Browse Source

Page_write V1

jakob 5 years ago
parent
commit
3ed61c6c45

+ 3 - 7
Source/ASM_Source/main.s

@@ -32,7 +32,7 @@ main:
 ;Mode Selection
 
 mode_select:
-
+	out		PORTC, false
 	sbi		PORTC, PC0								;Signal State
 
 ;Receive Frame----------------------------------------------------------
@@ -76,7 +76,7 @@ mode_select:
 	sts		UCSR0B, usart_r
 
 	lds		usart_r, frame_cnt
-	cpi		usart_r, 0x04							;check if Frame send
+	cpi		usart_r, 0x02							;check if Frame send
 	brne	.-8
 
 	lds		usart_r, UCSR0B							;disable TX, TXCI
@@ -126,8 +126,6 @@ mode_page_read:
 ;Send Acknoledgement---------------------------------------------------
 
 	sts		cmd_mode, option 						;verify Mode
-	sts 	cmd_opt_lo, option
-	sts 	cmd_opt_hi, option
 
 	ldi		X_l, lo8(cmd_ptr)						;set Command-Ptr
 	ldi		X_h, hi8(cmd_ptr)
@@ -136,7 +134,7 @@ mode_page_read:
 	sts		UCSR0B, usart_r
 
 	lds		usart_r, frame_cnt
-	cpi		usart_r, 0x04							;check if Frame send
+	cpi		usart_r, 0x02							;check if Frame send
 	brne	.-8
 
 	lds		usart_r, UCSR0B							;disable TX, TXCI
@@ -192,8 +190,6 @@ page_rebuild:
 
 	ldi		main_r, frame_mask						;signal Page rec
 	sts		cmd_mode, main_r 						;by sending mask
-	sts 	cmd_opt_lo, main_r
-	sts 	cmd_opt_hi, main_r
 
 	ret
 

+ 35 - 36
Source/ASM_Source/prog.hex

@@ -1,41 +1,40 @@
 :100000000C9434000C9400000C9400000C9400003C
 :100010000C9400000C9400000C9400000C94000060
 :100020000C9400000C9400000C9400000C94000050
-:100030000C9400000C942D010C9400000C94000012
-:100040000C9400000C9400000C94F3000C9402013A
-:100050000C9413010C9400000C9400000C9400000C
+:100030000C9400000C9426010C9400000C94000019
+:100040000C9400000C9400000C94EC000C94FB0049
+:100050000C940C010C9400000C9400000C94000013
 :100060000C9400000C9400000FEF0DBF08E00EBFD1
-:1000700099278FEF0E94DF000FE107B998B97894B4
-:1000800002C0FFCFF894409AA0E0B1E01091C10007
-:1000900010691093C100109103011330E1F7109122
-:1000A000C1001F761093C1009093C6009093030186
-:1000B0000E947B0060FDE7CF61FDE5CF62FD0E94FD
-:1000C000930063FDE0CF64FDDECFA0E0B1E01091CE
-:1000D000C10010621093C100109103011430E1F7C8
-:1000E0001091C10017791093C1009093C6009093AE
-:1000F0000301449AC8CF419A009100010F7061E05A
-:10010000002319F0660F0A95FBCF772700910101B4
-:100110000F70702B009102010F700295702B11F47B
-:100120000C9443000895429A70930001709301016A
-:1001300070930201A0E0B1E01091C1001062109331
-:10014000C100109103011430E1F71091C10017793B
-:100150001093C1009093C60090930301A0E0B2E019
-:100160001091C10010691093C10010910301072F75
-:10017000000F1017D1F71091C1001F761093C10026
-:100180009093C60090930301439AA0E0B2E0C0E0D0
-:10019000C395D2E0E0E0F2E00C911296188122962D
-:1001A0000F701F701295012B01937A95A9F700E942
-:1001B00000930001009301010093020108959093C0
-:1001C000C6009093C0009093C1009093C20010E0CD
-:1001D0001093C50013E31093C40016E01093C200FF
-:1001E0009093030108951F935091C600152F107F1F
-:1001F000103931F45D9310910301139510930301AD
-:100200001F9118951F935D915093C60010910301A3
-:100210001395109303011091C1001F7D1864109372
-:10022000C1001F9118951F931091C100177B106298
-:100230001093C1001F9118959093800090938100B6
-:1002400090938200909385009093840090936F0028
-:10025000909310019093110108953F9330911001F4
-:10026000339520911201321719F43327809311012D
-:08027000309310013F91189535
+:1000700099278FEF0E94D8000FE107B998B97894BB
+:1000800002C0FFCFF89498B9409AA0E0B1E0109177
+:10009000C10010691093C100109103011330E1F702
+:1000A0001091C1001F761093C1009093C6009093E9
+:1000B00003010E947C0060FDE6CF61FDE4CF62FD9C
+:1000C0000E94940063FDDFCF64FDDDCFA0E0B1E0CE
+:1000D0001091C10010621093C10010910301123001
+:1000E000E1F71091C10017791093C1009093C600F9
+:1000F00090930301449AC7CF419A009100010F7079
+:1001000061E0002319F0660F0A95FBCF7727009175
+:1001100001010F70702B009102010F700295702B7E
+:1001200011F40C9443000895429A70930001A0E0EA
+:10013000B1E01091C10010621093C1001091030151
+:100140001230E1F71091C10017791093C10090931C
+:10015000C60090930301A0E0B2E01091C1001069C5
+:100160001093C10010910301072F000F1017D1F752
+:100170001091C1001F761093C1009093C600909318
+:100180000301439AA0E0B2E0C0E0C395D2E0E0E012
+:10019000F2E00C911296188122960F701F70129542
+:1001A000012B01937A95A9F700E9009300010895C6
+:1001B0009093C6009093C0009093C1009093C200AA
+:1001C00010E01093C50013E31093C40016E01093E1
+:1001D000C2009093030108951F935091C600152FFC
+:1001E000107F103931F45D93109103011395109332
+:1001F00003011F9118951F935D915093C6001091B4
+:1002000003011395109303011091C1001F7D186421
+:100210001093C1001F9118951F931091C100177B77
+:1002200010621093C1001F911895909380009093D5
+:100230008100909382009093850090938400909326
+:100240006F00909310019093110108953F933091A6
+:100250001001339520911201321719F4332780933E
+:0A0260001101309310013F91189531
 :00000001FF

BIN
Source/ASM_Source/prog.o


+ 91 - 44
Source/C_Source/prog.c

@@ -6,6 +6,10 @@
 
 int main(int argc, const char * argv[]){
 
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//Initializations
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
 //Setting up Timer-Signal--------------------------------------------
 	sigset_t signal;
 	pthread_t thread;
@@ -21,17 +25,6 @@ int main(int argc, const char * argv[]){
 	pthread_err = pthread_sigmask(SIG_BLOCK, &signal, NULL);
 	if(pthread_err!=0){
 		error_handler(pthread_err, "Error changing Signal-Mask");
-	}	
-
-//Loading Page-------------------------------------------------------
-	FILE * file_stream = fopen("test.hex", "r");
-	if(file_stream==NULL){
-		fprintf(stderr, "No File \n");
-	}
-	char * page_get_ptr = page_get(file_stream);
-	for(int i=0; i<page_size; i++){
-		printf("%02X \n", *page_get_ptr);
-		page_get_ptr++;
 	}
 
 //initializing USART at USB_PORT-------------------------------------
@@ -50,45 +43,99 @@ int main(int argc, const char * argv[]){
 	cfsetspeed(termios_ptr, B19200);			//set Baudrate 19.2k
 	tcsetattr(USB, TCSANOW ,termios_ptr);
 
-//Get Command--------------------------------------------------------
-	char cmd_check = 0;
-	char * frame_ptr;
-	char * cmd_ack_ptr = (char *)malloc(3*sizeof(char));
-	frame_ptr = cmd_build(page_read, (char)page_size);	
-	write(USB, frame_ptr, 3*sizeof(char));
-	while(cmd_check<3){
-		read(USB, cmd_ack_ptr, sizeof(char));
-		tcflush(USB, TCIFLUSH);
-		if(*cmd_ack_ptr==page_size){
-			cmd_check++;
-		}
+//initializing Stream for Source-Code--------------------------------	
+	FILE * file_stream = fopen("test.hex", "r");
+	if(file_stream==NULL){
+		fprintf(stderr, "No File \n");
 	}
-	tcflush(USB, TCIOFLUSH);
-	set_timer(0, 1000);
-	pthread_err = pthread_create(&thread, NULL, 
+	int page_cnt = 0;
+	int skip;
+	int page_end = page_size;
+
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//Programming cycle
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+	
+//Loading and Masking Page-------------------------------------------
+	while(page_end==page_size){
+		skip=1;
+		page_end = page_get(file_stream, page_cnt);
+		printf("Page %d: \n", page_cnt);
+		for(int i=0; i<page_end; i++, skip++){
+			printf("%02X", page_buf[i]);
+			if(skip==16){
+				printf("\n");
+				skip=0;
+			}
+		}
+		printf("\n");
+		if(skip!=1){
+			printf("\n");
+		}
+		page_cnt++;
+		printf("Page %d Masked: \n", page_cnt-1);
+		unsigned char * page_ptr = page_mask(&page_buf[0], page_end);
+		skip=1;
+		for(int i=0; i<2*page_end; i++, skip++, page_ptr++){
+			printf("%02X", *page_ptr);
+			if(skip==16){
+				printf("\n");
+				skip=0;
+			}
+		}
+		printf("\n");
+		if(skip!=1){
+			printf("\n");
+		}
+		page_ptr = page_ptr-2*page_end;
+		printf("Page Ready \n");
+
+//Opening Connection to Programmer-----------------------------------
+		char * cmd_ack_ptr = (char *)malloc(sizeof(char));
+		char * frame_ptr = cmd_build(page_read, page_end);	
+		write(USB, frame_ptr, 3*sizeof(char));
+		while(true){
+			read(USB, cmd_ack_ptr, sizeof(char));
+			if(*cmd_ack_ptr==page_end){	
+				break;
+			}
+		}
+		tcflush(USB, TCIOFLUSH);
+		printf("Acknowledged Page Send \n");
+		set_timer(0, 200);
+		pthread_err = pthread_create(&thread, NULL, 
 									&signal_thread, (void *)&signal);
-	if(pthread_err!=0){
-		error_handler(pthread_err, "Failed to create Thread");
-	}
-	while(timer_state);
-	printf("Page Read acknoledged \n");
-	char * cmd_done_ptr = (char *)malloc(sizeof(char));
-	cmd_check = 0;
-	char * page_ptr = page_mask(page_build(page_size)); 
-	write(USB, page_ptr, 2*page_size*sizeof(char));
-	while(cmd_check<3){
-		read(USB, cmd_done_ptr, sizeof(char));
-		tcflush(USB, TCIFLUSH);
-		if(*cmd_done_ptr==frame_mask){
-			break;
+		if(pthread_err!=0){
+			error_handler(pthread_err, "Failed to create Thread");
+		}
+		while(timer_state);
+
+//Sending Page-------------------------------------------------------									
+		write(USB, page_ptr, 2*page_end*sizeof(char));
+		char * page_rec_ptr = (char *)malloc(sizeof(char));
+		while(true){
+			read(USB, page_rec_ptr, sizeof(char));
+			if(*page_rec_ptr==-112){					//Framemask
+				break;
+			}
 		}
+		printf("Page Send Complete \n");	
+
+//Receiving Checksum-------------------------------------------------
+		for(int i=0; i<32; i++){
+			printf("-");
+		}
+		printf("\n");
 	}
-	printf("Page Read Complete \n");
-	close(USB);
-	return EXIT_SUCCESS;
-}	
+
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//Deintialization and Error Handling
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
+	close(USB);
+	return EXIT_SUCCESS;
+}
+
+
 
 

+ 46 - 37
Source/C_Source/prog.h

@@ -44,13 +44,13 @@ void * signal_thread(void * arg_ptr);
 void set_timer(int sec, int usec);
 char * cmd_build(mode cmd_mode, char cmd_option);
 char * page_build(char size);
-char * page_mask(char * page_build_ptr);
-char * page_get(FILE * input_stream);
+unsigned char * page_mask(char * page_build_ptr, int page_end);
+int page_get(FILE * input_stream, int page_pos);
 
 //Variables----------------------------------------------------------
 char cmd_arr[3];
 bool timer_state;
-char page_buf[64];
+unsigned char page_buf[64];
 
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Signal Thread
@@ -108,49 +108,58 @@ char * page_build(char size){
 
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Mask Page
-char * page_mask(char * page_build_ptr){
-	char page[2*page_size];
-	char * page_mask_ptr = &page[0];
-	for(int i=0; i<page_size; i++){
-		*page_mask_ptr = frame_mask|(*page_build_ptr&nibble_lo);
-		*(page_mask_ptr+1) = frame_mask|
-									((*page_build_ptr&nibble_hi)>>4);
+unsigned char * page_mask(char * page_build_ptr, int page_end){
+	unsigned char * page_mask_ptr = (unsigned char *)
+									malloc(2*page_end*sizeof(char));
+	for(int i=0; i<page_end; i++){
+		*page_mask_ptr = frame_mask|
+								((*page_build_ptr&nibble_hi)>>4);
+		*(page_mask_ptr+1) = frame_mask|(*page_build_ptr&nibble_lo);
 		page_mask_ptr = page_mask_ptr + 2;
+		page_build_ptr++;
 	}
-	page_mask_ptr = &page[0];
-	return page_mask_ptr;
+	return page_mask_ptr-2*page_end;
 }
 
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Get Page
-char * page_get(FILE * input_stream){
-	int count = 7;
-	char * page_buf_ptr = (char*)malloc(page_size*sizeof(char));
-	for(int i=0; i<page_size; ){
-		*page_buf_ptr = fgetc(input_stream);
-		*(page_buf_ptr+1) = fgetc(input_stream);
-		if(count>6){
-			if(*page_buf_ptr==0x3A){
-				count=0;
+int page_get(FILE * input_stream, int p_cnt){
+	int j = 0;									//init loc Variables
+	int c_cnt = 0;
+	if(p_cnt==0){								//check for Start
+		for(int k=0; k<9; k++){
+			page_buf[0] = fgetc(input_stream);
+		}
+	}
+	else{
+		c_cnt = 16;
+	}
+	while(j<page_size){							//get Char
+		page_buf[j] = fgetc(input_stream);
+		page_buf[j+1] = fgetc(input_stream);
+		if(page_buf[j]==0x25){
+			return j;
+		}	
+		if(c_cnt==16){							//check for Lineend
+			c_cnt = 0;
+			for(int k=0; k<11; k++){
+				page_buf[j] = fgetc(input_stream);
 			}
-			else{
-				for(int j=0; j<2; j++){
-					if(*(page_buf_ptr+j)<0x39){
-						*(page_buf_ptr+j)=*(page_buf_ptr+j)-0x30;
-					}
-					else{
-						*(page_buf_ptr+j)=*(page_buf_ptr+j)-0x37;
-					}
+		}
+		else{									//Convert to HEX
+			for(int m=0; m<2; m++){
+				if(page_buf[j+m]<0x3A&&page_buf[j+m]>0x2F){
+						page_buf[j+m] -= 0x30;
+				}
+				else if(page_buf[j+m]<0x47&&page_buf[j+m]>0x40){
+						page_buf[j+m] -= 0x37;
 				}
-				*page_buf_ptr = ((*page_buf_ptr<<4)&nibble_hi)|
-									((*page_buf_ptr+1)&nibble_lo);
-				i++;
-				page_buf_ptr++;
 			}
-		}
-		else{
-			count++;
+			page_buf[j] = ((page_buf[j]<<4)&nibble_hi)|
+										(page_buf[j+1]&nibble_lo);
+			c_cnt++;
+			j++;
 		}
 	}
-	return page_buf_ptr-page_size;
+	return page_size;
 }

BIN
Source/C_Source/prog.o


+ 1 - 1
Source/C_Source/test.hex

@@ -11,5 +11,5 @@
 :1000A00008950F930091010108B9000F06FD01E0CA
 :1000B000009301010F9108950F93009100010395A2
 :1000C000033019F40E9451000027009300010F91A2
-:0200D000189581
+:0200D000189581%%%%
 :00000001FF