www.pudn.com > MPC8241BSP.rar > rtc.c
/* #include "netcomm.h" #include#include "mpc.h" */ #include "vxWorks.h" #include "rtc.h" void rtctest(void); void rtc_init(void); char *get_rtc_time(void); STATUS set_rtc_time(char *); void ReadRTC(UBYTE,UBYTE*); void ReadRTCBurst(UBYTE,UBYTE*); void WriteRTC(UBYTE,UBYTE); void HexToAscii(UBYTE,UBYTE*); char UARTData[100]; UBYTE *BCSR0; UBYTE *BCSR1; UBYTE *BCSR4; /* t_Uart_regs *UART; */ /* UBYTE *UART_RHR_THR_DLL0; UBYTE *UART_IER_DLM1; UBYTE *UART_FCR_ISR2; UBYTE *UART_LCR3; UBYTE *UART_MCR4; UBYTE *UART_LSR5; UBYTE *UART_MSR6; UBYTE *UART_SPR7; UBYTE *addr1; UBYTE *addr2; */ /****************************************************/ /* function : LED FLASH */ /****************************************************/ void rtc_init(void) { UBYTE RTCData[1]; WriteRTC(0x8e,0); WriteRTC(0x90,0xab); ReadRTC(0x81,RTCData); *RTCData &= ~BBIT0; WriteRTC(0x80,*RTCData); } char *get_rtc_time() { int i,readreg; UBYTE RTCData[1]; char *cp; UBYTE sec; UBYTE min; UBYTE hour; UBYTE date; UBYTE month; UBYTE day; UBYTE year; for(i=0;i<100;i++) UARTData[i]=NULL; cp = UARTData; ReadRTC(0x81,&sec); /* read clock sec*/ ReadRTC(0x83,&min); /* read clock min*/ ReadRTC(0x85,&hour); /* read clock hour*/ ReadRTC(0x87,&date); /* read clock date*/ ReadRTC(0x89,&month); /* read clock month*/ ReadRTC(0x8b,&day); /* read clock day*/ ReadRTC(0x8d,&year); /* read clock year*/ sprintf (cp, "0x%02x:",year); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x:",month); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x:",date); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x:",day); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x:",hour); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x:",min); cp = UARTData; cp+= strlen (UARTData); sprintf (cp, "0x%02x",sec); cp = UARTData; cp+= strlen (UARTData); /* if((*RTCData)>=02&&(*RTCData)<30) */ return UARTData; /* else return NULL; */ } STATUS set_rtc_time(char *initString) { char * tok; /* an initString token */ char * holder = NULL; /* points to initString fragment beyond tok */ UBYTE RTCData[1]; UBYTE sec; UBYTE min; UBYTE hour; UBYTE date; UBYTE month; UBYTE day; UBYTE year; tok = strtok_r (initString, ":", &holder); if (tok == NULL) return ERROR; year = strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; month= strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; date = strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; day= strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; hour= strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; min= strtoul (tok, NULL, 16); tok = strtok_r (NULL, ":", &holder); if (tok == NULL) return ERROR; sec= strtoul (tok, NULL, 16); WriteRTC(0x80,sec); /* write clock sec */ WriteRTC(0x82,min); /* write clock min */ WriteRTC(0x84,hour); /* write clock hour */ WriteRTC(0x86,date); /* write clock date */ WriteRTC(0x88,month); /* write clock month */ WriteRTC(0x8a,day); /* write clock day */ WriteRTC(0x8c,year); /* write clock year */ ReadRTC(0x8b,RTCData); if((*RTCData)==day) return (OK); else return (ERROR); } void rtctest(void) { UBYTE ii; UBYTE sec; UBYTE min; UBYTE hour; UBYTE date; UBYTE month; UBYTE day; UBYTE year; UWORD jj; UBYTE RTCData[40]; UBYTE UARTData[14]; /*char kk[]="\n\r************************************\n\rHow are you!张加民\n\r************************************\n\r";*/ char y[] ="年"; char x[]="周"; char m[]="月"; char d[]="日"; char h[]="时"; char mi[]="分"; char s[]="秒"; /* *BCSR0 = 0xff; for (jj=0; jj < 100000; jj++); *BCSR0 = 0x00; */ /*UART_RHR_THR_DLL0=(UBYTE *)(0xff900000); UART_IER_DLM1=(UBYTE *)(0xff900001); UART_FCR_ISR2=(UBYTE *)(0xff900002); UART_LCR3=(UBYTE *)(0xff900003); UART_MCR4=(UBYTE *)(0xff900004); UART_LSR5=(UBYTE *)(0xff900005); UART_MSR6=(UBYTE *)(0xff900006); UART_SPR7=(UBYTE *)(0xff900007); *UART_LCR3 = 0x80; *UART_IER_DLM1=0x0; *UART_RHR_THR_DLL0=0x78;*/ /* 9600 1.8432M 0x0c 18.431M 0x78*/ /**UART_LCR3 = 0x03;*/ /* word length 8*/ /**UART_FCR_ISR2 = 0x01; */ /*Enable the transmit and receive FIFO.This bit must be a "1" when other FCR bits are written to or they will not be programmed.*/ /**UART_FCR_ISR2 = 0x07; */ /*clears the contents of receive FIFO and clears thecontents of transmit FIFO,resets the FIFO ciybter kiguc,*/ /**UART_SPR7 =0x55;*/ /* temporary data register*/ /*if((*UART_FCR_ISR2 & 0xC0)==0xC0)*/ /*当FIFO有效时*/ /**UART_IER_DLM1=0x00; */ /* Set as polling mode 不使用中断*/ /* *UART_MCR4 = 0x10; */ /*addr1= (UBYTE *)(0x6000); addr2= (UBYTE *)(0xff900000); for (jj=0; jj < 100; jj++) { *addr1=*addr2; addr2++; addr1++; } addr1= (UBYTE *)(0x6000); *UART_RHR_THR_DLL0= 0x0a; *UART_RHR_THR_DLL0= 0x0d; ii=1; while(kk[ii]) { *UART_RHR_THR_DLL0= kk[ii]; ii++; for (jj=0; jj < 10000; jj++); } *UART_RHR_THR_DLL0= 0x0a; *UART_RHR_THR_DLL0= 0x0d;*/ printf("\n************************************\nHow are you!张加民\n************************************\n"); WriteRTC(0x8e,0); WriteRTC(0x90,0xab); ii=1; if(ii==1) { sec=0x00; min=0x10; hour=0x13; date=0x16; month=0x08; day=0x05; year=0x02; WriteRTC(0x80,sec); /* read clock sec*/ WriteRTC(0x82,min); /* read clock min*/ WriteRTC(0x84,hour); /* read clock hour*/ WriteRTC(0x86,date); /* read clock date*/ WriteRTC(0x88,month); /* read clock month*/ WriteRTC(0x8a,day); /* read clock day*/ WriteRTC(0x8c,year); /* read clock year*/ } /* WriteRTC(0xc0,0x55); */ /* write ram*/ while(1) { /*ReadRTC(0xc1,RTCData);*/ /* read ram*/ ReadRTC(0x81,RTCData); /* read clock sec*/ HexToAscii(*RTCData,&UARTData[12]); ReadRTC(0x83,RTCData); /* read clock min*/ HexToAscii(*RTCData,&UARTData[10]); ReadRTC(0x85,RTCData); /* read clock hour*/ HexToAscii(*RTCData,&UARTData[8]); ReadRTC(0x87,RTCData); /* read clock date*/ HexToAscii(*RTCData,&UARTData[6]); ReadRTC(0x89,RTCData); /* read clock month*/ HexToAscii(*RTCData,&UARTData[4]); ReadRTC(0x8b,RTCData); /* read clock day*/ HexToAscii(*RTCData,&UARTData[2]); ReadRTC(0x8d,RTCData); /* read clock year*/ HexToAscii(*RTCData,&UARTData[0]); for (jj=0; jj < 1000000; jj++); /*if ((*UART_LSR5 & 0x20) == 0x20 ) *UART_RHR_THR_DLL0= 0x0a; *UART_RHR_THR_DLL0= 0x0d; *UART_RHR_THR_DLL0= 0x32; *UART_RHR_THR_DLL0= 0x30;*/ /*for (jj=0; jj < 1000000; jj++); *UART_RHR_THR_DLL0= UARTData[0]; *UART_RHR_THR_DLL0= UARTData[1]; *UART_RHR_THR_DLL0= y[0]; *UART_RHR_THR_DLL0= y[1];*/ printf("\n"); printf("%c",UARTData[0]); printf("%c",UARTData[1]); printf("%c",y[0]); printf("%c",y[1]); for(ii=3;ii<5;ii++) { /**UART_RHR_THR_DLL0= UARTData[ii*2-2];*/ printf("%c",UARTData[ii*2-2]); /**UART_RHR_THR_DLL0= UARTData[ii*2-1];*/ printf("%c",UARTData[ii*2-1]); /*if(ii==2) {*UART_RHR_THR_DLL0= 0x20;}*/ if(ii==3) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= m[0];*/ printf("%c",m[0]); /**UART_RHR_THR_DLL0= m[1];*/ printf("%c",m[1]); } if(ii==4) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= d[0];*/ printf("%c",d[0]); /**UART_RHR_THR_DLL0= d[1];*/ printf("%c",d[1]); } if(ii==5) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= h[0];*/ printf("%c",h[0]); /**UART_RHR_THR_DLL0= h[1];*/ printf("%c",h[1]); } if(ii==6) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= mi[0];*/ printf("%c",mi[0]); /**UART_RHR_THR_DLL0= mi[1];*/ printf("%c",mi[1]); } if(ii==7) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= s[0];*/ printf("%c",s[0]); /**UART_RHR_THR_DLL0= s[1];*/ printf("%c",s[1]); } /*UART_RHR_THR_DLL0= 0x20;*/ for (jj=0; jj < 100000; jj++); } /**UART_RHR_THR_DLL0= x[0];*/ printf("%c",x[0]); /**UART_RHR_THR_DLL0= x[1];*/ printf("%c",x[1]); /**UART_RHR_THR_DLL0= UARTData[2];*/ printf("%c",UARTData[2]); /**UART_RHR_THR_DLL0= UARTData[3];*/ printf("%c",UARTData[3]); /**UART_RHR_THR_DLL0= 0x20;*/ printf("%c",0x20); for(ii=5;ii<8;ii++) { /**UART_RHR_THR_DLL0= UARTData[ii*2-2];*/ printf("%c",UARTData[ii*2-2]); /**UART_RHR_THR_DLL0= UARTData[ii*2-1];*/ printf("%c",UARTData[ii*2-1]); /*if(ii==2) {*UART_RHR_THR_DLL0= 0x20;}*/ if(ii==3) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= m[0];*/ printf("%c",m[0]); /**UART_RHR_THR_DLL0= m[1];*/ printf("%c",m[1]); } if(ii==4) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= d[0];*/ printf("%c",d[0]); /**UART_RHR_THR_DLL0= d[1];*/ printf("%c",d[1]); } if(ii==5) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= h[0];*/ printf("%c",h[0]); /**UART_RHR_THR_DLL0= h[1];*/ printf("%c",h[1]); } if(ii==6) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= mi[0];*/ printf("%c",mi[0]); /**UART_RHR_THR_DLL0= mi[1];*/ printf("%c",mi[1]); } if(ii==7) { /*UART_RHR_THR_DLL0= 0x9;*/ /**UART_RHR_THR_DLL0= s[0];*/ printf("%c",s[0]); /**UART_RHR_THR_DLL0= s[1];*/ printf("%c",s[1]); } /*UART_RHR_THR_DLL0= 0x20;*/ for (jj=0; jj < 100000; jj++); } /**UART_RHR_THR_DLL0= 0x0a; *UART_RHR_THR_DLL0= 0x0d;*/ } } void ReadRTC(UBYTE addr1,UBYTE* addr2) { UBYTE i; UBYTE TEMP; UBYTE TEMP1; UWORD RTCi; UBYTE *BCSR0; UBYTE *BCSR1; UBYTE *BCSR4; TEMP=0; TEMP1=0; BCSR0=(UBYTE *)(0xff800000); BCSR1=(UBYTE *)(0xff800001); BCSR4=(UBYTE *)(0xff800004); *BCSR1 &= ~BBIT6; /* SCLK '0'*/ *BCSR0 &= ~BBIT4; /* RESET '0'*/ *BCSR4 |= BBIT3; /* EPLD DIO OUTPUT*/ for (RTCi=0; RTCi < 2000; RTCi++); *BCSR0 |= BBIT4; /* RESET '1'*/ for(i = 0; i < 8; ++i) { if(addr1 & 0x01) { *BCSR1 |= BBIT7; /* set port pin high to read data */ } else *BCSR1 &= ~BBIT7; *BCSR1 &= ~BBIT6; /* SCLK '0'*/ for (RTCi=0; RTCi < 100; RTCi++); *BCSR1 |= BBIT6; /* SCLK '1'*/ for (RTCi=0; RTCi < 100; RTCi++); addr1 >>= 1; } *BCSR4 &= ~BBIT3; /* EPLD DIO INPUT*/ for(i=0;i<8;i++){ *BCSR1 |= BBIT6; /*SCLK '1'*/ for (RTCi=0; RTCi < 100; RTCi++); *BCSR1 &= ~BBIT6; /* SCLK '0'*/ for (RTCi=0; RTCi < 100; RTCi++); TEMP=(*BCSR1 & BBIT7); TEMP<<=7; TEMP1>>= 1;; TEMP1 |= TEMP; } *addr2=TEMP1; *BCSR0 &= ~BBIT4; /* RESET '0'*/ for (RTCi=0; RTCi < 2000; RTCi++); } void HexToAscii(UBYTE data,UBYTE* addr ) { * addr=(data>>4)+0x30; addr++; * addr=(data&0x0f)+0x30; } void WriteRTC(UBYTE addr1,UBYTE data) { UBYTE i; UBYTE TEMP; UBYTE TEMP1; UWORD RTCi; UBYTE *BCSR0; UBYTE *BCSR1; UBYTE *BCSR4; TEMP=0; TEMP1=0; BCSR0=(UBYTE *)(0xff800000); BCSR1=(UBYTE *)(0xff800001); BCSR4=(UBYTE *)(0xff800004); *BCSR1 &= ~BBIT6; /* SCLK '0'*/ *BCSR0 &= ~BBIT4; /* RESET '0'*/ *BCSR4 |= BBIT3; /* EPLD DIO OUTPUT*/ for (RTCi=0; RTCi < 2000; RTCi++); *BCSR0 |= BBIT4; /* RESET '1'*/ for(i = 0; i < 8; ++i) { if(addr1 & 0x01) { *BCSR1 |= BBIT7; /* set port pin high to read data */ } else *BCSR1 &= ~BBIT7; *BCSR1 &= ~BBIT6; /* SCLK '0'*/ for (RTCi=0; RTCi < 100; RTCi++); *BCSR1 |= BBIT6; /* SCLK '1'*/ for (RTCi=0; RTCi < 100; RTCi++); addr1 >>= 1; } for(i = 0; i < 8; ++i) { if(data & 0x01) { *BCSR1 |= BBIT7; /* set port pin high to read data */ } else *BCSR1 &= ~BBIT7; *BCSR1 &= ~BBIT6; /* SCLK '0'*/ for (RTCi=0; RTCi < 100; RTCi++); *BCSR1 |= BBIT6; /* SCLK '1'*/ for (RTCi=0; RTCi < 100; RTCi++); data >>= 1; } *BCSR0 &= ~BBIT4; /* RESET '0'*/ for (RTCi=0; RTCi < 2000; RTCi++); }