/* Demo5.c: 1. To read and write NVSRAM(0 to 30 totally 31 bytes) 2. It can read and write NVSRAM in any number of cycles 3. Li-battery for data backup, 10 yeasr in the normal condition Compiler: MSC 6.0, MSVC 1.52. Compile mode: Small Project: Demo5.c ..\lib\7188xas.lib Hordware: 7188XA Note: ReadRTC, WriteRTC addr: 32-63 for NavRam addr: 0-7 Time,Date addr: 8,Control register. Bit7=1:Write protect, 0:Write enable If set this bit=1, cannot write data to RTC(time, date, NVRAM) that is you can not set new time or date form ROM DOS command TIME, DATE. and you cannot write new data to NVRAM. [27/Oct/2005] compiled by Liam */ #include #include #include #include #include #include"..\..\lib\7188xa.h" void ReadRTC(int addr, int *data); void WriteRTC(int addr, int data); int data; void main(void) { unsigned int i=0,j=0; int idx,regidx,quit; char c,cmd[20]; unsigned char NVRAM[31]; InitLib(); /* driver initial */ Init5DigitLed(); /* 5-digit LED initial */ Show5DigitLed(3,17); /* show - in 5-digit LED */ for(j=0;j<=8;j++) { ReadRTC(j,(int *)&i); Print("\n\rClock[%d]=%02X",j,i); } ReadRTC(7,(int *)&j); if(j&0x80) Print("\n\rCurrent is Write Protect"); else { Print("\n\rCurrent is Write Enable"); WriteRTC(7,0x80); /* write protect */ Print("\n\rNow Set to Write Protect"); } /* read current NVRAM 0-31 */ for(j=0;j<31;j++) { NVRAM[j]=ReadNVRAM(j); } Print("\n\rCurrent Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",NVRAM[j]); for(j=0;j<31;j++) NVRAM[j]++; for (j=0;j<31; j++) WriteNVRAM(j,NVRAM[j]); /* write to NVRAM for test */ Print("\n\rAfter write Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); WriteRTC(7,0x00); /* write enable */ Print("\n\rNow Set to Write Enable"); for (j=0;j<31; j++) WriteNVRAM(j,NVRAM[j]); /* write to NVRAM for test */ Print("\n\rAfter write Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); quit=0; cmd[0]=0; idx=0; regidx=0; Print("\n\rdemo5>"); while(!quit) { if(Kbhit()) { switch(c=Getch()) { case 'q': case 'Q': quit=1; case '\r': Putch('\r'); Putch('\n'); Putch('\r'); cmd[idx]=0; switch(cmd[0]) { case 'a': case 'A': /* set all to xx */ data=atoi(cmd+2); for(j=0;j<31;j++) WriteNVRAM(j,data); Ungetch('s'); Ungetch('\r'); break; case 's': case 'S': /* show all */ for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); break; case 'r': case 'R': /* set register idx */ regidx=atoi(cmd+1); Print("\n\rset idx to %d",regidx); break; case 'd': case 'D': /* show current register value */ ReadRTC(regidx+32,&data); Print("\n\ridx=%d data=%d",regidx,data); break; default: if(cmd[0]>='0' && cmd[0]<='9') { /* set value to current register */ data=atoi(cmd); WriteNVRAM(regidx,data); Print("\n\rwrite %d to index %d",data,regidx); } } idx=0; Print("\n\rdemo5>"); break; case '\b': if(idx) { cmd[--idx]=0; Putch(c); } break; default: cmd[idx++]=c; Putch(c); break; } } } }