Browse Source

Problem Read-Fkt

jakob 5 years ago
parent
commit
2015a4352f

+ 1 - 1
Source/ASM_Source/global.inc

@@ -44,7 +44,7 @@
 .equ	cmd_mode,		0x0100
 .equ	cmd_opt_lo,		0x0101
 .equ	cmd_opt_hi,		0x0102	
-
+.equ	frame_cnt,		0x0103
 
 .equ	timer1_cnt,		0x0110
 .equ	timer1_bool,	0x0111

+ 32 - 23
Source/ASM_Source/main.s

@@ -33,6 +33,11 @@ main:
 
 mode_select:
 
+	in 		main_r, PORTC							;toggle PC0
+	ldi		usart_r, 1<<PC0
+	eor		main_r, usart_r
+	out		PORTC, main_r
+
 ;Receive Frame----------------------------------------------------------
 	ldi		X_l, lo8(cmd_ptr)						;set Command-Ptr
 	ldi		X_h, hi8(cmd_ptr)
@@ -40,15 +45,15 @@ mode_select:
 	sbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
 	sts		UCSR0B, usart_r
 
-	cpi		X_l, 0x03								;check if Frame rec
-	brne	.-4
+	lds		usart_r, frame_cnt
+	cpi		usart_r, 0x03							;check if Frame rec
+	brne	.-8
 
 	lds		usart_r, UCSR0B							;disable Receiver
 	cbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
 	sts		UCSR0B, usart_r
 	sts		UDR0, false								;clear UDR
-
-sbi		PORTC, PC0				;delete
+	sts		frame_cnt, false						;reset Frame cnt
 
 	call	cmd_rebuild								;read Cmd
 
@@ -67,20 +72,23 @@ sbi		PORTC, PC0				;delete
 
 ;Send Frame-------------------------------------------------------------
 
-
 	ldi		X_l, lo8(cmd_ptr)						;set Command-Ptr
 	ldi		X_h, hi8(cmd_ptr)
 	lds		usart_r, UCSR0B							;enable UDRI
 	sbr 	usart_r, 1<<UDRIE0
 	sts		UCSR0B, usart_r
-	cpi		X_l, 0x04								;check if Frame send
-	brne	.-4
+
+	lds		usart_r, frame_cnt
+	cpi		usart_r, 0x04							;check if Frame send
+	brne	.-8
+
 	lds		usart_r, UCSR0B							;disable TX, TXCI
 	cbr 	usart_r, (1<<TXEN0)|(1<<TXCIE0)|(1<<UDRIE0)		
 	sts		UCSR0B, usart_r
 	sts		UDR0, false								;clear UDR
+	sts		frame_cnt, false						;reset Frame cnt
 
-	sbi		PORTC, PC4				;delete
+	sbi		PORTC, PC1								;read Page complete
 
 	rjmp 	mode_select
 
@@ -104,8 +112,8 @@ cmd_rebuild:
 	andi	main_r, nibble_lo
 	swap	main_r
 	or		option, main_r
-
-	sbi		PORTC, PC1				;delete
+	brne	.+4										;check valid Mode
+	jmp		mode_select								
 
 	ret
 
@@ -116,8 +124,6 @@ mode_page_read:
 
 ;Send Acknoledgement---------------------------------------------------
 
-sbi		PORTC, PC2
-
 	sts		cmd_mode, option 						;verify Mode
 	sts 	cmd_opt_lo, option
 	sts 	cmd_opt_hi, option
@@ -127,12 +133,16 @@ sbi		PORTC, PC2
 	lds		usart_r, UCSR0B							;enable UDRI
 	sbr 	usart_r, 1<<UDRIE0
 	sts		UCSR0B, usart_r
-	cpi		X_l, 0x04								;check if Frame send
-	brne	.-4
+
+	lds		usart_r, frame_cnt
+	cpi		usart_r, 0x04							;check if Frame send
+	brne	.-8
+
 	lds		usart_r, UCSR0B							;disable TX, TXCI
 	cbr 	usart_r, (1<<TXEN0)|(1<<TXCIE0)|(1<<UDRIE0)		
 	sts		UCSR0B, usart_r
 	sts		UDR0, false								;clear UDR
+	sts		frame_cnt, false						;reset Frame cnt
 
 ;Read Page--------------------------------------------------------------
 
@@ -142,21 +152,20 @@ sbi		PORTC, PC2
 	sbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
 	sts		UCSR0B, usart_r
 
-	cp		X_l, option								;check if Page rec
-	brne	.-4
+	lds		usart_r, frame_cnt
+	cp		usart_r, option							;check if Page rec
+	brne	.-8
 
 	lds		usart_r, UCSR0B							;disable Receiver
 	cbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
 	sts		UCSR0B, usart_r
 	sts		UDR0, false								;clear UDR
+	sts		frame_cnt, false						;reset Frame cnt
 
-	sbi		PORTC, PC3
-
-;Recode Command----------------------------------------------------------
-
-	mov		main_r, mode 							;reset Mode 			
-	ori		main_r, frame_mask
-	sts		cmd_mode, main_r
+	ldi		main_r, frame_mask						;signal Page rec
+	sts		cmd_mode, main_r 						
+	sts 	cmd_opt_lo, main_r
+	sts 	cmd_opt_hi, main_r
 
 	ret
 

+ 33 - 29
Source/ASM_Source/prog.hex

@@ -1,34 +1,38 @@
 :100000000C9434000C9400000C9400000C9400003C
 :100010000C9400000C9400000C9400000C94000060
 :100020000C9400000C9400000C9400000C94000050
-:100030000C9400000C94F3000C9400000C9400004D
-:100040000C9400000C9400000C94C3000C94CD00A0
-:100050000C94D9000C9400000C9400000C94000047
+:100030000C9400000C9419010C9400000C94000026
+:100040000C9400000C9400000C94DF000C94EE0063
+:100050000C94FF000C9400000C9400000C94000021
 :100060000C9400000C9400000FEF0DBF08E00EBFD1
-:1000700099278FEF0E94B1000FE107B998B97894E2
-:1000800002C0FFCFF894A0E0B1E01091C100106968
-:100090001093C100A330F1F71091C1001F761093A7
-:1000A000C1009093C600409A0E94730060FDEBCFA0
-:1000B00061FDE9CF62FD0E94880063FDE4CF64FD2D
-:1000C000E2CF449AA0E0B1E01091C1001062109319
-:1000D000C100A430F1F71091C10017791093C1004D
-:1000E0009093C600D0CF009100010F7061E0002313
-:1000F00019F0660F0A95FBCF7727009101010F7069
-:10010000702B009102010F700295702B419A089597
-:10011000429A709300017093010170930201A0E074
-:10012000B1E01091C10010621093C100A430F1F74A
-:100130001091C10017791093C1009093C600A0E000
-:10014000B2E01091C10010691093C100A717F1F738
-:100150001091C1001F761093C1009093C600439A7E
-:1001600008959093C6009093C0009093C10090931F
-:10017000C20010E01093C50013E31093C40016E012
-:100180001093C20008951F935091C600152F107F41
-:10019000103909F45D931F9118951F935D91509349
-:1001A000C6001091C1001F7D18641093C1001F91FB
-:1001B00018951F931091C100177B10621093C10016
-:1001C0001F911895909380009093810090938200E6
-:1001D000909385009093840090936F00909310010A
-:1001E0009093110108953F93309110013395209120
-:1001F0001201321719F43327809311013093100143
-:040200003F9118957D
+:1000700099278FEF0E94CB000FE107B998B97894C8
+:1000800002C0FFCFF89408B111E0012708B9A0E041
+:10009000B1E01091C10010691093C10010910301EB
+:1000A0001330E1F71091C1001F761093C1009093B7
+:1000B000C600909303010E947E0060FDE4CF61FDC5
+:1000C000E2CF62FD0E94950063FDDDCF64FDDBCFD2
+:1000D000A0E0B1E01091C10010621093C100109136
+:1000E00003011430E1F71091C10017791093C1009A
+:1000F0009093C60090930301419AC5CF00910001EF
+:100100000F7061E0002319F0660F0A95FBCF772787
+:10011000009101010F70702B009102010F70029588
+:10012000702B11F40C9443000895709300017093A8
+:10013000010170930201A0E0B1E01091C1001062D2
+:100140001093C100109103011430E1F71091C10028
+:1001500017791093C1009093C60090930301A0E01B
+:10016000B2E01091C10010691093C1001091030119
+:100170001717E1F71091C1001F761093C1009093FB
+:10018000C6009093030100E9009300010093010170
+:100190000093020108959093C6009093C00090933D
+:1001A000C1009093C20010E01093C50013E31093B8
+:1001B000C40016E01093C2009093030108951F93AA
+:1001C0005091C600152F107F103931F45D931091B6
+:1001D00003011395109303011F9118951F935D91CF
+:1001E0005093C600109103011395109303011091D1
+:1001F000C1001F7D18641093C1001F9118951F93B3
+:100200001091C100177B10621093C1001F911895C7
+:10021000909380009093810090938200909385004A
+:100220009093840090936F0090931001909311012C
+:1002300008953F93309110013395209112013217A8
+:1002400019F4332780931101309310013F911895D1
 :00000001FF

BIN
Source/ASM_Source/prog.o


+ 8 - 1
Source/ASM_Source/usart.s

@@ -18,6 +18,7 @@ usart_init:
 	sts		UBRR0L, usart_r
 	ldi		usart_r, (1<<UCSZ01)|(1<<UCSZ00)		;8-Bit Character
 	sts		UCSR0C, usart_r 						;Aysnchonous USART
+	sts		frame_cnt, false						;init Frame cnt
 	ret
 
 ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -30,8 +31,11 @@ usart_RXC:
 	mov		usart_r, frame
 	andi	usart_r, nibble_hi						;check Frame
 	cpi		usart_r, frame_mask
-	brne	.+2
+	brne	.+12
 	st 		X+, frame 								;store Frame
+	lds		usart_r, frame_cnt
+	inc 	usart_r
+	sts		frame_cnt, usart_r
 	pop		usart_r
 	reti
 
@@ -43,6 +47,9 @@ usart_UDRE:
 	push	usart_r
 	ld 		frame, X+ 								;load new Frame
 	sts		UDR0, frame								;set Frame
+	lds 	usart_r, frame_cnt
+	inc 	usart_r
+	sts		frame_cnt, usart_r
 	lds		usart_r, UCSR0B
 	cbr		usart_r, 1<<UDRIE0 						;disable UDREI
 	sbr 	usart_r, (1<<TXEN0)|(1<<TXCIE0)			;enable TX, TXCI

+ 25 - 23
Source/C_Source/prog.c

@@ -6,10 +6,10 @@
 
 int main(int argc, const char * argv[]){
 
-	delay(1000);		//delete me!!
+	delay(100);		//delete me!!
 
 //initializing USART at USB_PORT-------------------------------------
-	int USB = open("/dev/ttyACM3", O_RDWR|O_NOCTTY);
+	int USB = open("/dev/ttyACM3", O_RDWR|O_NOCTTY|O_NONBLOCK);
 	if(isatty(USB)==0){
 		printf("ERROR: No File Descriptor! \n");
 		return 0;
@@ -20,36 +20,38 @@ int main(int argc, const char * argv[]){
 	(*termios_ptr).c_oflag = 0;
 	(*termios_ptr).c_cflag = CS8|CREAD;			//set Size, enable RX 
 	(*termios_ptr).c_lflag = 0;
-//	(*termios_ptr).c_cc[VMIN] = 2;				//set min Characters
-//	(*termios_ptr).c_cc[VTIME] = 0.1;			//Timeout after 10ms
+	(*termios_ptr).c_cc[VMIN] = 0;				//set min Characters
+//	(*termios_ptr).c_cc[VTIME] = 0.01;			//Timeout after 1ms
 	cfsetspeed(termios_ptr, B19200);			//set Baudrate 19.2k
 	tcsetattr(USB, TCSANOW ,termios_ptr);
 
 //Get Command--------------------------------------------------------
-	char * frame_ptr = cmd_build(page_read, page_size);	
-	for(int i=0; i<3; i++, frame_ptr++){
-		write(USB, frame_ptr, sizeof(char));
-		printf("%d \n", *frame_ptr);
-	}
 	char cmd_check = 0;
-	frame_ptr = &cmd_arr[0];
-	while(cmd_check < 3){
-		read(USB, frame_ptr, sizeof(char));
-		printf("Return: %d \n", *frame_ptr);
-		if(*frame_ptr == page_size){
+	char * frame_ptr;
+	char * data_ptr = (char *)malloc(3*sizeof(char));
+	frame_ptr = cmd_build(page_read, page_size);	
+	write(USB, frame_ptr, 3*sizeof(char));
+	while(cmd_check<3){
+		read(USB, data_ptr, sizeof(char));
+		tcflush(USB, TCIFLUSH);
+//		printf("%d \n", *data_ptr);
+		if(*data_ptr==page_size){
 			cmd_check++;
 		}
 	}
-	printf("Read Acknoledged \n");
-	char * page_ptr = page_build();
-	for(int i=0; i<70; i++){
-		write(USB, page_ptr, sizeof(char));
-	}
-	frame_ptr = &cmd_arr[0];
-	for(int i=0; i<3; i++, frame_ptr++){
-		read(USB, frame_ptr, sizeof(char));
-		printf("Return: %d \n", *frame_ptr);
+	printf("Read Acknoledgement \n");
+	cmd_check = 0;
+	char * page_ptr = page_build(page_size+2); 
+	write(USB, page_ptr, (page_size+2)*sizeof(char));
+	while(cmd_check<3){
+		read(USB, data_ptr, sizeof(char));
+		tcflush(USB, TCIFLUSH);
+		printf("%d \n", *data_ptr);
+		if(*data_ptr==frame_mask){
+			cmd_check++;
+		}
 	}
+	printf("Page Read Complete \n");
 	close(USB);
 	return EXIT_SUCCESS;
 }	

+ 6 - 6
Source/C_Source/prog.h

@@ -31,7 +31,7 @@ typedef struct {
 
 //Protoypes----------------------------------------------------------
 char * cmd_build(mode cmd_mode, char cmd_option);
-char * page_build();
+char * page_build(char size);
 void delay(int delay_time);
 
 //Variables----------------------------------------------------------
@@ -54,15 +54,15 @@ char * cmd_build(mode cmd_mode, char cmd_option){
 void delay(int delay_time){
 	clock_t time1 = clock();
 	while(((clock()-time1)/CLOCKS_PER_SEC)*1000
-			 							!= (clock_t)delay_time);
+			 							< (clock_t)delay_time);
 }
 
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Build Page
-char * page_build(){
-	char page[70];
-	for(int i=0; i<70; i++){
-		page[i] = 0xFF;
+char * page_build(char size){
+	char page[size];
+	for(int i=0; i<size; i++){
+		page[i] = 0x9F;
 	}
 	char * page_ptr = &page[0];
 	return page_ptr;

BIN
Source/C_Source/prog.o