图5
2. RTC模块bare-metal程序配置
对于一个非PE的应用,需要去自己直接操作寄存器完成相关的功能配置。同样,也需要完成两个方面的配置:对CPU 的配置(主要是时钟的配置)和RTC模块的配置。对CPU 的配置步骤如下:
1) 使能内部参考时钟,选择内部32Khz慢速时钟作为OUTCLK输出时钟源;
MCG_C1 |= MCG_C1_IRCLKEN_MASK;
MCG_C2 &= ~(MCG_C2_IRCS_MASK);
2)设置PTC1引脚的功能为RTC_CLKIN ,并选择32 KHz 时钟输入作为 RTC 模块时钟的输入源;
PORTC_PCR1 |= (PORT_PCR_MUX(0x1));
SIM_SOPT1 |= SIM_SOPT1_OSC32KSEL(0b10);
3.)设置PTC3引脚的功能为CLKOUT,并选择MCG内部 32 KHz 慢时钟输出到CLKOUT引脚
SIM_SOPT2 |= SIM_SOPT2_CLKOUTSEL(0b100);
PORTC_PCR3 |= (PORT_PCR_MUX(0x5));
同样,在完成CPU的配置后,还需要配置RTC模块,其中重要的是其秒中断的设置。
1)使能软件可触发中断;
SIM_SCGC6 |= SIM_SCGC6_RTC_MASK;
2) 清除所有的RTC寄存器;
RTC_CR = RTC_CR_SWR_MASK;
RTC_CR &= ~RTC_CR_SWR_MASK;
if (RTC_SR & RTC_SR_TIF_MASK)
{
RTC_TSR = 0x00000000;
}
3) 设置时间补偿参数,这个参数会根据应用的不同而不同;
RTC_TCR = RTC_TCR_CIR(1) | RTC_TCR_TCR(0xFF);
4) 使能模块的秒中断;
enable_irq(INT_RTC_Seconds - 16);
RTC_IER |= RTC_IER_TSIE_MASK;
5) 启动时间计数器,并写秒寄存器;
RTC_SR |= RTC_SR_TCE_MASK;
RTC_TSR = 0xFF;
完成以上工作后,还需要添加中断服务程序,编写应用程序,详细代码请参见附件2。同样,在调试过程中,串口接收终端波特率设置也应为115200,调试结果如图5所示,每隔一秒更新一次输出结果,只显示分和秒的值。