Browse Source

Read_Page in Arbeit

jakob 5 years ago
parent
commit
a5f78f42f2

+ 0 - 2
C_Source/dest.hex

@@ -1,2 +0,0 @@
-100000000C9434000C9400000C9400000C9400003C
-100010000C9400000C940

+ 0 - 109
C_Source/prog.c

@@ -1,109 +0,0 @@
-//Define Constants---------------------------------------------------
-typedef enum {false, true} bool; 
-
-//Include Header Files-----------------------------------------------
-#include<stdlib.h>
-#include<stdio.h>
-#include<time.h>
-#include<errno.h>
-#include<unistd.h>
-#include<termios.h>
-#include<sys/types.h>
-#include<sys/stat.h>
-#include<fcntl.h>
-#include<sys/resource.h>
-
-//Prototypes---------------------------------------------------------
-int delay(int delay_time);
-void print_attrTermios(struct termios * ptr_attr);
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//Main-Program
-int main(int argc, const char * argv[]){
-
-//initializing USART at USB_PORT-------------------------------------
-	int USB = open("/dev/ttyACM3", O_RDWR|O_NOCTTY);
-	if(isatty(USB)==0){
-		printf("ERROR: No File Descriptor! \n");
-		return 0;
-	}
-	struct termios * ptr_attr = (struct termios *)
-									malloc(sizeof(struct termios));
-	if(ptr_attr==NULL){
-		printf("ERROR: Termios not available! \n");
-		return 0;
-	}
-	tcgetattr(USB, ptr_attr);
-	(*ptr_attr).c_iflag = IGNPAR;
-	(*ptr_attr).c_oflag = 0;
-	(*ptr_attr).c_cflag = CS8|CREAD;
-	(*ptr_attr).c_lflag = 0;
-	cfsetspeed(ptr_attr, B19200);
-	tcsetattr(USB, TCSANOW ,ptr_attr);
-
-	char req[] = {'R', 'E', 'Q'};
-	char ack[] = {'A', 'C', 'K'};
-	char input[3];
-	char page[] = "PAGE";
-	char * ptr_req = &req[0];
-	char * ptr_ack = &ack[0];
-	char * ptr_input = &input[0];
-	char * ptr_page = &page[0];
-	int connection;
-	delay(1000);
-
-//Establishing  Connection-------------------------------------------
-	write(USB, ptr_req, sizeof(req));
-	tcflush(USB, TCIFLUSH);
-	read(USB, ptr_input, sizeof(input));
-	tcflush(USB, TCOFLUSH);
-	ptr_input = &input[0];
-	for(int i=0; i<3; i++){
-		connection = false;
-		if(input[i]!=ack[i]){
-			break;
-		}
-		connection = true;
-	}
-	if(connection==true){
-			printf("Connection Success! \n");
-	}
-	else{
-			printf("Connection Failed! \n");
-	}
-
-//Sending Page-------------------------------------------------------
-	for(int i=0; i<64; i++){
-		write(USB, ptr_page, sizeof(char));
-		tcflush(USB, TCIFLUSH);
-		ptr_page++;
-		if(ptr_page> & page[3]){
-			ptr_page = &page[0];
-		}
-	}
-	printf("Page send! \n");
-	close(USB);
-	return EXIT_SUCCESS;
-}	
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
-//Delay-Function-----------------------------------------------------
-int delay(int delay_time){
-	clock_t time1 = clock();
-	while(((clock()-time1)/CLOCKS_PER_SEC)*1000
-			 							!= (clock_t)delay_time);
-	return 1;
-}
-
-//Print Termios-Attributes-------------------------------------------
-void print_attrTermios(struct termios * ptr_attr){
-	printf("Input Mode Flag: %d \n", (*ptr_attr).c_iflag);
-	printf("Output Mode Flag: %d \n", (*ptr_attr).c_oflag);
-	printf("Control Mode Flag: %d \n", (*ptr_attr).c_cflag);
-	printf("Local Mode Flag: %d \n", (*ptr_attr).c_lflag);
-	printf("Baudrate Input: %d \n", (*ptr_attr).c_ispeed);
-	printf("Baudrate Output: %d \n", (*ptr_attr).c_ospeed);
-}

BIN
C_Source/prog.o


+ 0 - 15
C_Source/source.hex

@@ -1,15 +0,0 @@
-100000000C9434000C9400000C9400000C9400003C
-100010000C9400000C9400000C9400000C94000060
-100020000C9400000C9400000C9400000C94000050
-100030000C9400000C945C000C9400000C940000E4
-100040000C9400000C9400000C9400000C94000030
-100050000C9400000C9400000C9400000C94000020
-100060000C9400000C9400000FEF0DBF08E00EBFD1
-1000700010E02FEF27B90E943F007894FFCF0F9335
-100080001093800002E0009381001093820001E051
-1000900000936F001093000101E0009301010F91A4
-1000A00008950F930091010108B9000F06FD01E0CA
-1000B000009301010F9108950F93009100010395A2
-1000C000033019F40E9451000027009300010F91A2
-0200D000189581
-00000001FF

+ 66 - 18
Source/ASM_Source/main.s

@@ -33,8 +33,6 @@ main:
 
 mode_select:
 
-sbi		PORTC, PC0				;delete
-
 ;Receive Frame----------------------------------------------------------
 	ldi		X_l, lo8(cmd_ptr)						;set Command-Ptr
 	ldi		X_h, hi8(cmd_ptr)
@@ -50,38 +48,39 @@ sbi		PORTC, PC0				;delete
 	sts		UCSR0B, usart_r
 	sts		UDR0, false								;clear UDR
 
-sbi		PORTC, PC1				;delete
+sbi		PORTC, PC0				;delete
 
 	call	cmd_rebuild								;read Cmd
 
 ;Select Mode------------------------------------------------------------
-;	lds		mode, cmd_mode 
-;	sbrc  	mode, fuse_read
-;	rjmp	mode_select
-;	sbrc  	mode, fuse_write
-;	rjmp	mode_select
-;	sbrc  	mode, page_read
-;	rjmp	mode_select
-;	sbrc	mode, page_write
-;	rjmp	mode_select
-;	sbrc  	mode, prog_read
-;	rjmp	mode_select
+
+	sbrc  	mode, fuse_read
+	rjmp	mode_select
+	sbrc  	mode, fuse_write
+	rjmp	mode_select
+	sbrc  	mode, page_read
+	call	mode_page_read
+	sbrc	mode, page_write
+	rjmp	mode_select
+	sbrc  	mode, prog_read
+	rjmp	mode_select
 
 ;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, 0x03								;check if Frame send
+	cpi		X_l, 0x04								;check if Frame send
 	brne	.-4
 	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
 
-sbi		PORTC, PC2				;delete
+	sbi		PORTC, PC4				;delete
 
 	rjmp 	mode_select
 
@@ -94,9 +93,9 @@ cmd_rebuild:
 	ldi		mode, 0x01
 	tst		main_r									
 	breq	.+6
-	lsl		main_r
+	lsl		mode
 	dec 	main_r
-	rjmp	.-8
+	rjmp	.-10
 	clr 	option									;set Option
 	lds		main_r, cmd_opt_lo
 	andi	main_r, nibble_lo
@@ -110,6 +109,55 @@ cmd_rebuild:
 
 	ret
 
+;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+;Read Page
+
+mode_page_read:
+
+;Send Acknoledgement---------------------------------------------------
+
+sbi		PORTC, PC2
+
+	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)
+	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, UCSR0B							;disable TX, TXCI
+	cbr 	usart_r, (1<<TXEN0)|(1<<TXCIE0)|(1<<UDRIE0)		
+	sts		UCSR0B, usart_r
+	sts		UDR0, false								;clear UDR
+
+;Read Page--------------------------------------------------------------
+
+	ldi		X_l, lo8(page_ptr)						;set Page-Ptr
+	ldi		X_h, hi8(page_ptr)
+	lds		usart_r, UCSR0B							;activate Receiver
+	sbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
+	sts		UCSR0B, usart_r
+
+	cp		X_l, option								;check if Page rec
+	brne	.-4
+
+	lds		usart_r, UCSR0B							;disable Receiver
+	cbr 	usart_r, (1<<RXEN0)|(1<<RXCIE0)
+	sts		UCSR0B, usart_r
+	sts		UDR0, false								;clear UDR
+
+	sbi		PORTC, PC3
+
+;Recode Command----------------------------------------------------------
+
+	mov		main_r, mode 							;reset Mode 			
+	ori		main_r, frame_mask
+	sts		cmd_mode, main_r
+
+	ret
 
 

+ 29 - 22
Source/ASM_Source/prog.hex

@@ -1,27 +1,34 @@
 :100000000C9434000C9400000C9400000C9400003C
 :100010000C9400000C9400000C9400000C94000060
 :100020000C9400000C9400000C9400000C94000050
-:100030000C9400000C94C0000C9400000C94000080
-:100040000C9400000C9400000C9490000C949A0006
-:100050000C94A6000C9400000C9400000C9400007A
+:100030000C9400000C94F3000C9400000C9400004D
+:100040000C9400000C9400000C94C3000C94CD00A0
+:100050000C94D9000C9400000C9400000C94000047
 :100060000C9400000C9400000FEF0DBF08E00EBFD1
-:1000700099278FEF0E947E000FE107B998B9789415
-:1000800002C0FFCFF894409AA0E0B1E01091C10007
-:1000900010691093C100A330F1F71091C1001F76D1
-:1000A0001093C1009093C600419A0E946900A0E09D
-:1000B000B1E01091C10010621093C100A330F1F7BC
-:1000C0001091C10017791093C1009093C600429A15
-:1000D000DACF009100010F7061E0002319F0000FEA
-:1000E0000A95FCCF7727009101010F70702B0091CA
-:1000F00002010F700295702B419A08959093C600EB
-:100100009093C0009093C1009093C20010E01093B0
-:10011000C50013E31093C40016E01093C2000895C5
-:100120001F935091C600152F107F103909F45D936D
-:100130001F9118951F935D915093C6001091C100B7
-:100140001F7D18641093C1001F9118951F93109183
-:10015000C100177B10621093C1001F9118959093F6
-:1001600080009093810090938200909385009093FB
-:10017000840090936F009093100190931101089563
-:100180003F9330911001339520911201321719F4E9
-:0E019000332780931101309310013F91189591
+: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
 :00000001FF

BIN
Source/ASM_Source/prog.o


+ 21 - 10
Source/C_Source/prog.c

@@ -16,10 +16,6 @@ int main(int argc, const char * argv[]){
 	}
 	struct termios * termios_ptr = (struct termios *)
 									malloc(sizeof(struct termios));
-	if(termios_ptr==NULL){
-		printf("ERROR: Termios not available! \n");
-		return 0;
-	}
 	(*termios_ptr).c_iflag = IGNPAR;			//ignore Parity-Err
 	(*termios_ptr).c_oflag = 0;
 	(*termios_ptr).c_cflag = CS8|CREAD;			//set Size, enable RX 
@@ -30,15 +26,30 @@ int main(int argc, const char * argv[]){
 	tcsetattr(USB, TCSANOW ,termios_ptr);
 
 //Get Command--------------------------------------------------------
-	cmd_t * cmd_ptr = cmd_build(page_read, 0xFF);
-	char * frame_ptr = &((*cmd_ptr).mode);
+	char * frame_ptr = cmd_build(page_read, page_size);	
 	for(int i=0; i<3; i++, frame_ptr++){
 		write(USB, frame_ptr, sizeof(char));
-		tcflush(USB, TCIFLUSH);
+		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){
+			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);
 	}
-//	frame_ptr = &frame[0];
-//	read(USB, frame_ptr, sizeof(frame));
-//	tcflush(USB, TCOFLUSH);
 	close(USB);
 	return EXIT_SUCCESS;
 }	

+ 23 - 6
Source/C_Source/prog.h

@@ -30,24 +30,41 @@ typedef struct {
 } cmd_t;
 
 //Protoypes----------------------------------------------------------
-cmd_t * cmd_build(mode cmd_mode, char cmd_option);
+char * cmd_build(mode cmd_mode, char cmd_option);
+char * page_build();
 void delay(int delay_time);
 
+//Variables----------------------------------------------------------
+char cmd_arr[3];
+char page_size = 0x40;
+
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Build Command
-cmd_t * cmd_build(mode cmd_mode, char cmd_option){
+char * cmd_build(mode cmd_mode, char cmd_option){
 	cmd_t * cmd_ptr = (cmd_t *)malloc(sizeof(cmd_t));
 	(*cmd_ptr).mode = frame_mask|cmd_mode;
 	(*cmd_ptr).opt_lo = frame_mask|(cmd_option&nibble_lo);
-	(*cmd_ptr).opt_hi = frame_mask|((4>>cmd_option)&nibble_lo);
-	return cmd_ptr;
+	(*cmd_ptr).opt_hi = frame_mask|((cmd_option>>4)&nibble_lo);
+	char * frame_ptr = &((*cmd_ptr).mode);
+	return frame_ptr;
 }
 
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //Delay in ms
-
 void delay(int delay_time){
 	clock_t time1 = clock();
 	while(((clock()-time1)/CLOCKS_PER_SEC)*1000
 			 							!= (clock_t)delay_time);
-}
+}
+
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//Build Page
+char * page_build(){
+	char page[70];
+	for(int i=0; i<70; i++){
+		page[i] = 0xFF;
+	}
+	char * page_ptr = &page[0];
+	return page_ptr;
+}
+

BIN
Source/C_Source/prog.o