TX2440 看手册学习2440-RTC的设置(ADS1.2编译)

TX2440 看手册学习2440-RTC的设置(ADS1.2编译)

寄存器列表,如下图:

源码,示例:

//====================================================
// 常量定义区
//====================================================

void __irq RTC_tickHandler(void);
void __irq RTC_alarmHandler(void);

//====================================================
// 变量定义区
//====================================================
U8 led_index;               //用于秒刷新标识
U8 alarmflag = 0;            //闹钟报警标识

typedef struct ST_DATE{      //表示日期时间的数据结构
 short year;
 U8 month;
 U8 day;
 U8 week_day;
 U8 hour;
 U8 minute;
 U8 second;
 }st_date;
char *date[7] = { "SUN","MON", "TUES", "WED", "THURS","FRI", "SAT" } ; //星期几

//====================================================
// 函数定义区
//====================================================
//====================================================
// 语法格式:void RTC_setdate(st_date *p_date)
// 功能描述: 设置实时时钟当前日期、 时间
// 入口参数: 设置日期时间
// 出口参数: 无
//====================================================
void RTC_setdate(st_date *p_date)
{
 rRTCCON = 0x01;              //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
 rBCDYEAR = p_date->year;
 rBCDMON = p_date->month;
 rBCDDAY = p_date->day;
 rBCDDATE = p_date->week_day;
 rBCDHOUR = p_date->hour;
 rBCDMIN = p_date->minute;
 rBCDSEC = p_date->second;
 rRTCCON = 0x00;             //RTC读写禁止,选择BCD时钟、计数器,无复位,1/32768
}

//====================================================
// 语法格式:void RTC_getdate(st_date *p_date)
// 功能描述: 获取实时时钟当前日期、 时间
// 入口参数: 返回日期时间的指针
// 出口参数: 无
//====================================================
void RTC_getdate(st_date *p_date)
{
 rRTCCON = 0x01;             //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
 p_date->year = rBCDYEAR;
 p_date->month = rBCDMON;
 p_date->day = rBCDDAY;
 p_date->week_day = rBCDDATE;
 p_date->hour = rBCDHOUR;
 p_date->minute = rBCDMIN;
 p_date->second = rBCDSEC;
 rRTCCON = 0x00;             //RTC读写禁止,选择BCD时钟、计数器,无复位,1/32768
}

//====================================================
// 语法格式:void RTC_tickIRQ_init(U8 tick)
// 功能描述: TICK 中断初始化
// 入口参数: tick初始值
// 出口参数: 无
//====================================================

void RTC_tickIRQ_init(U8 tick)
{
    pISR_TICK = (unsigned)RTC_tickHandler;      //中断函数的入口地址
 EnableIrq(BIT_TICK);//open RTC TICK INTERRUPT
    rRTCCON = 0x00;                               //屏蔽RTC读写
    rTICNT = (tick&0x7f)|0x80; //设置tick计数器 和中断使能   (1+n)/128
}

//====================================================
// 语法格式:void RTC_alarm_setdate(st_date *p_date,U8 mode)
// 功能描述: 设置闹钟日期、 时间
// 入口参数: 设置日期时间及其闹钟唤醒模式
// 出口参数: 无
//====================================================
void RTC_alarm_setdate(st_date *p_date,U8 mode)
{
 rRTCCON = 0x01;
 rALMYEAR = p_date->year;
 rALMMON = p_date->month;
 rALMDAY = p_date->day; 
 rALMHOUR = p_date->hour;
 rALMMIN = p_date->minute;
 rALMSEC = p_date->second;
 rRTCALM = mode;
 rRTCCON = 0x00;               
 pISR_RTC = (unsigned)RTC_alarmHandler; 
    EnableIrq(BIT_RTC); //open RTC alarm  INTERRUPT
}

//====================================================
// 语法格式:void Main(void)
// 功能描述: 设置实时时钟及闹钟时间,初始化RTC和alarm中断
// 入口参数:
// 出口参数: 无
//====================================================

void Main(void)
{
    st_date m_date;
    U8 old_index;

 memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);
   
 SetSysFclk(FCLK_400M);  //设置系统时钟 400M    
 ChangeClockDivider(2, 1);      //设置分频 1:4:8
 CalcBusClk();           //计算总线频

  
 rGPFCON = (rGPFCON | 0xFFFF) & 0xFFFFFF55;  //GPF0--GPF3设置为output      
    rGPFUP  = rGPFUP & 0xFFF0;                  //使能GPF上拉电阻
    rGPFDAT = 0x0F;          //GPF低4位初始化为1

 Uart_Select(0);   
 Uart_Init(0, 115200);   //设置端口 波特率115200  无数据流检测   数据位= 8位
   
    Uart_Printf("\n ---实时时钟测试程序---\n");
  

                               //设置当前日期 时钟
    m_date.year =  0x09;   
    m_date.month = 0x10;
    m_date.day = 0x15;
    m_date.week_day = 0x04;
    m_date.hour = 0x13;
    m_date.minute = 0x02;
    m_date.second = 0x55;
   
    RTC_setdate(&m_date);     //设置实时时钟
   
    m_date.second = 0x5;     //修改alarm秒数
   
    RTC_alarm_setdate(&m_date,0x41);//设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟报警
   
    RTC_tickIRQ_init(127);          // 设置1秒钟tick一次
   
 
    while(1)
    {
     if(old_index != led_index)
     {            //秒是否刷新
      RTC_getdate(&m_date);      //获取当前日期时间
      m_date.year += 0x2000;  
      old_index = led_index;     //更新标识
      Uart_Printf("RTC TIME : %04x/%02x/%02x  %s - %02x:%02x:%02x %d\r",m_date.year,m_date.month,m_date.day,date[m_date.week_day],m_date.hour,m_date.minute,m_date.second,led_index);
     }
     
     if(alarmflag)
     {                     //是否报警
       alarmflag = 0;               //更新标识
       RTC_getdate(&m_date);
       Uart_Printf("\nRTC ALARM  %02x:%02x:%02x \n",m_date.hour,m_date.minute,m_date.second);
        }
    }
}

//=================================================================
// 语法格式:void __irq RTC_tickHandler(void)
// 功能描述: 实时时钟tick中断函数,更新index标识,设置端口(LED1闪烁)
// 入口参数:
// 出口参数: 无
//==================================================================
void __irq RTC_tickHandler(void)
{
    rGPFDAT = ~(rGPFDAT^0xe);     //刷新LED1
    led_index ++;
    ClearPending(BIT_TICK);
}

//====================================================
// 语法格式:void __irq RTC_alarmHandler(void)
// 功能描述: alarm中断函数,设置端口(LED2被点亮)
// 入口参数:
// 出口参数: 无
//====================================================
void __irq RTC_alarmHandler(void)
{
   rGPFDAT = (rGPFDAT^0x2);      //刷新LED2
   alarmflag = 1;
   ClearPending(BIT_RTC);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值