#include #include #include #include "..\lib\7188.h" /* ------------------------------------------------------------------- */ void ReadRTC(int addr, int *data); void WriteRTC(int addr, int data); /* 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. */ int data; void main() { 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); printf("\nClock[%d]=%02X",j,i); } ReadRTC(7,(int *)&j); if(j&0x80) printf("\nCurrent is Write Protect"); else { printf("\nCurrent is Write Enable"); WriteRTC(7,0x80); /* write protect */ printf("\nNow Set to Write Protect"); } /* read current NVRAM 0-31 */ for(j=0;j<31;j++){ NVRAM[j]=ReadNVRAM(j); } printf("\nCurrent Values are:\n"); for(j=0;j<31;j++) printf("%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 */ printf("\nAfter write Values are:\n"); for(j=0;j<31;j++) printf("%3d ",ReadNVRAM(j)); WriteRTC(7,0x00); /* write enable */ printf("\nNow Set to Write Enable"); for (j=0;j<31; j++) WriteNVRAM(j,NVRAM[j]); /* write to NVRAM for test */ printf("\nAfter write Values are:\n"); for(j=0;j<31;j++) printf("%3d ",ReadNVRAM(j)); quit=0; cmd[0]=0; idx=0; regidx=0; printf("\ndemo5>"); while(!quit){ if(kbhit()){ switch(c=getch()){ case 'q': case 'Q': quit=1; case '\r': putch('\r'); putch('\n'); cmd[idx]=0; switch(cmd[0]){ case 's': case 'S': /* show all */ for(j=0;j<31;j++) printf("%3d ",ReadNVRAM(j)); break; case 'r': case 'R': /* set register idx */ regidx=atoi(cmd+1); printf("\nset idx to %d",regidx); break; case 'd': case 'D': /* show current register value */ ReadRTC(regidx+32,&data); printf("\nidx=%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); printf("\nwrite %d to index %d",data,regidx); } } idx=0; printf("\ndemo5>"); break; case '\b': if(idx){ cmd[--idx]=0; putchar(c); } break; default: cmd[idx++]=c; putchar(c); break; } } } }