📄 rtc.c
字号:
/*
#include "netcomm.h"
#include <string.h>
#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++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -