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

📄 main.c

📁 优龙FS2410板的实时时钟源码
💻 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 + -