📄 main.c
字号:
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "timer.h"
#include "mmu.h"
#define FCLK 200000000
#define HCLK (FCLK/2)
#define PCLK (HCLK/2)
#define UCLK 48000000
#define U32 unsigned int
U32 Console_Uart = 0;
U32 Console_Baud = 115200;
void Isr_Init(void);
void Rtc_Init(void);
void RtcDisplay(void);
void Display_Rtc(void);
void __irq display(void);
char *date[8] = {"","MON","TUE","WED","THU","FRI","SAT","SUN"};
int year, month,day,weekday,hour,mini,sec;
void Main (void)
{ MMU_Init();
SetClockDivider(1, 1);
SetSysFclk(DFT_FCLK_VAL);
Port_Init();
Isr_Init();
Uart_Select(Console_Uart);
Uart_Init(0, Console_Baud);
Rtc_Init();
printf ("FS2410XP RTC Test \n");
Display_Rtc ();
//Delay (500);
RtcDisplay();
while (1);
}
void Rtc_Init(void)
{
rRTCCON = 0x01; //RTC 读写使能,选择BCD 时钟、计数器,无复位,1/32768
rBCDYEAR = 0x07 ; //设定年
rBCDMON = 0x8 ; //设定月
rBCDDAY = 0x06 ; //设定日
rBCDDATE = 0x1 ; //设定星期
rBCDHOUR = 0x17 ; //设定小时
rBCDMIN = 0x34 ; //设定分钟
rBCDSEC = 0x28 ; //设定秒
rRTCCON = 0x0; //RTC 读写禁止,选择BCD 时钟、计数器,无复位,1/32768
}
void Display_Rtc(void)
{
int year;
rRTCCON = 0x01; //RTC 读写使能,选择BCD 时钟、计数器,无复位,1/32768
while(1)
{
if (rBCDYEAR == 0x99) year = 0x1999;
else year = 0x2000 + rBCDYEAR;
month=rBCDMON;
day=rBCDDAY;
weekday=rBCDDATE;
hour=rBCDHOUR;
mini=rBCDMIN;
sec=rBCDSEC;
if(sec!=0) break;
}
printf("RTC TIME : %4x/%02x/%02x %s %02x:%02x:%02x\n\n",year,month,day,date[weekday],hour,mini,sec);
rRTCCON = 0x0; //RTC 读写禁止,选择BCD 时钟、计数器,无复位,1/32768
}
void Isr_Init(void)
{
// pISR_UNDEF = (U32)HaltUndef;
//pISR_SWI = (U32)HaltSwi;
//pISR_PABORT = (U32)HaltPabort;
//pISR_DABORT = (U32)HaltDabort;
rINTMOD = 0x0; // All=IRQ mode
rINTMSK = BIT_ALLMSK; // All interrupt is masked.
}
void RtcDisplay(void)
{
// Uart_Printf("This test should be excuted once RTC test(Alarm) for RTC initialization\n");
Uart_Printf("Please check the VDDRTC connector or connect the VDD to Bt1+ !!!\n");
Uart_Printf("Typing any key to exit\n\n\n ");
//Rtc_Init();
pISR_TICK=(unsigned) display;
rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No reset
// sec_tick=1;
rINTMSK=~BIT_TICK;
rTICNT = 127+(1<<7); //START tick计时
Uart_Getch(); //键盘有输入时便结束
rINTMSK |= BIT_TICK;
rRTCCON=0x0; //END
}
void __irq display(void)
{ rSRCPND = BIT_TICK;
rINTPND = BIT_TICK;
// rI_ISPC=BIT_TICK; //清除tick挂起标志位
// if(rBCDYEAR == 0x99)
// year = 0x1999;
// else
year = 0x2000 + rBCDYEAR;
month=rBCDMON;
day=rBCDDAY;
weekday=rBCDDATE;
hour=rBCDHOUR;
mini=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,mini,sec);
} //退格键多于字符个数23则不会退到上一行,少于字符个数则右移
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -