⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.c

📁 实现在44b0开发板实现RTC功能。开发环境是:ADS1.2
💻 C
字号:
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\rtc.h"

void  Rtc_Tick(void);
void  Rtc_display(void);
void  Wdt_Int(void);

char *date[8] = {"","SUN","MON","TUE","WED","THU","FRI","SAT"};
volatile unsigned int sec_tick;
int year,month,day,weekday,hour,min,sec;

void Display_Rtc(void)
{
    int i;
      
    Uart_Printf("\nTyping any key to exit(press 1 will reset)!!!\n");
    pISR_TICK=(unsigned)Rtc_display;

    rRTCCON = 0x01;    // R/W enable, 1/32768, Normal(merge), No reset
    sec_tick=1;
    rINTMSK=~(BIT_GLOBAL|BIT_TICK); 
    
    rTICINT = 127+(1<<7);	//START

    i=Uart_GetIntNum();
    rINTMSK |= (BIT_GLOBAL | BIT_TICK);
    rRTCCON=0x0;	//END
    if(i==1)
    	Test_WDTimer();
}

void  Rtc_display(void)
{
     rI_ISPC=BIT_TICK; 			//clear pending_bit
     year = 0x2000 + rBCDYEAR;
     month=rBCDMON;
     day=rBCDDAY;
     weekday=rBCDDATE;
     hour=rBCDHOUR;
     min=rBCDMIN;
     sec=rBCDSEC; 
      
     Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,%2x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);
     DisplayRtc();
}

void Rtc_Init(void)
{
    int i,j;
    
    rRTCCON = 0x01;	// R/W enable, 1/32768, Normal(merge), No reset

    Uart_Printf("\nEnter Year(XX):");
    i=Uart_GetIntNum();
    rBCDYEAR = 0x2000+i+(i/10)*6;
    Uart_Printf("Enter month(XX):");
    i=Uart_GetIntNum();
    rBCDMON  = i+(i/10)*6;
    Uart_Printf("Enter DAY:");
    i=Uart_GetIntNum();
    rBCDDAY  = i+(i/10)*6;	// SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
    Uart_Printf("Enter DATE((SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7):):");
    i=Uart_GetIntNum();
    rBCDDATE = i;
    Uart_Printf("Enter hours:");
    i=Uart_GetIntNum();
    rBCDHOUR =i+(i/10)*6;
    Uart_Printf("Enter minute:");
    i=Uart_GetIntNum();
    rBCDMIN=i+(i/10)*6;
    Uart_Printf("Enter sec:");
    i=Uart_GetIntNum();
    rBCDSEC=i+(i/10)*6;
    rRTCCON = 0x00;	// R/W enable, 1/32768, Normal(merge), No reset
}

volatile int isWdtInt;

/****************************************
 *	Watch-dog timer test		*
 ****************************************/
void Test_WDTimer(void)
{
    Uart_Printf("[WatchDog Timer Test]\n");

    rINTMSK=~(BIT_GLOBAL|BIT_WDT);
    pISR_WDT=(unsigned)Wdt_Int;
    isWdtInt=0;
	
    rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1<<2);  //  t_watchdog = 1/66/128, interrupt enable
    rWTDAT=8448/4;				// t_watchdog=1/(Prescaler value+1)/Division_factor
    rWTCNT=8448/4;
    rWTCON=rWTCON|(1<<5);   // 1/40/128,interrupt 

    while(isWdtInt!=10);

    rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1);  //   1/66/128, reset enable
    Uart_Printf("\nI will restart after 2 sec!!!\n");
    rWTCNT=8448*2;
    rWTCON=rWTCON|(1<<5);   // 1/40/128,interrupt 
    while(1);
    rINTMSK=BIT_GLOBAL;
}

void  Wdt_Int(void)
{
    rI_ISPC=BIT_WDT;			//clear pending_bit
    Uart_Printf("%d ",++isWdtInt);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -