LPC1768 -- RTC实时时钟

RTC是当下设备中比较普遍的一个部件,很多设备都需要查看时间。RTC实时时钟已经在很多的单片机中集成,以前还要专门的时钟芯片,现在Cortex-M3内核都包括了这个部件了。和以前NXP的ARM7内核不同的是,LPC1768的时钟源只有32K时钟源提供,这一点是要注意的,其他和ARM7一致。
RTC其实也就是一个定时,可以理解为秒定时器,RTC寄存器挺多的,不过寄存器结构相对简单,操作起来还是很方便的。
讲解几个重要的寄存器,中断位置寄存器ILR、时钟控制寄存器CCR、计数器增量中断寄存器CIIR、报警屏蔽寄存器AMR
第一个ILR中断位置寄存器

BIT0,当为1时计数器增量模块产生中断。
BIT1,当为1是报警寄存器产生中断
    第二个CCR时钟控制寄存器



BIT0,时钟时能位,为1是时能

BIT1,复位CTC。
BIT4,校准时能
第三个CIIR计数器增量中断寄存器

有上图可以很清楚看出,分别表示年月日时分秒,相应的位置为,就产生相应的中断,比较设置成0x01,既每秒产生一次中断,设置成0x02,既每分钟产生一次中断。
第四个,AMR报警屏蔽寄存器

这个是寄存器是屏蔽相应的报警位,和CIIR位定义相同。
至于其他寄存器像年月日时分秒这个寄存器可以直观知道它的用途,就不在一一描述。
看看软件设计
typedef struct _TIME_TYPE        //时间类型定义
{
    INT8U sec;    //秒
    INT8U min;    //分
    INT8U hour;    //时
    INT8U dom;    //日
    INT8U mon;    //月
    INT8U dow;    //星期
    INT16U year;//年
}Time_Type;
void SETNowTime(Time_Type * pdata)
{
    LPC_RTC->SEC = pdata->sec;
    LPC_RTC->MIN = pdata->min;
    LPC_RTC->HOUR = pdata->hour;
    LPC_RTC->DOM = pdata->dom;
    LPC_RTC->MONTH = pdata->mon;
    LPC_RTC->DOW = pdata->dow;
    LPC_RTC->YEAR = pdata->year;
}
Void RTC_Init (Time_Type * pdata)
{
    LPC_RTC->CCR   = 0x0; //禁止时钟时能,准备初始化RTC
    LPC_RTC->ILR   = 0x03;//清除中断
    LPC_RTC->CIIR  = 0x00;//不产生中断
    LPC_RTC->AMR   = 0xff; //屏蔽所有报警中断
SETNowTime (pdata);   //设置时间
    NVIC_EnableIRQ(RTC_IRQn);  //时能RTC中断
NVIC_SetPriority(RTC_IRQn, 9);//设置中断优先级
LPC_RTC->CCR   = 0x01;  // 启动RTC 
    LPC_RTC->CCR   = 0x01;  //启动RTC计数器  
}
void RTCTimeSend (void)
{
    USART0_printf("%02d年%02d月%02d日 %02d:%02d:%02d\r\n",
LPC_RTC->YEAR,LPC_RTC->MONTH,LPC_RTC->DOM,
LPC_RTC->HOUR,LPC_RTC->MIN, LPC_RTC->SEC);
}
void  RTC_IRQHandler(void)
{
     RTCTimeSend();//发送时间
     LPC_RTC->ILR = 0x01; //清除中断
}


每秒产生一次中断,在中断中发送时间数据给串口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值