硬件环境:AC7801x 通用开发板 ATC-LINK
软件环境:keil 5.23
最近都比较忙,所以先挑了几个简单的模块,AC7801x的RTC模块其实就有由一个预分频器+一个计数器组成,再简单点说,可以理解为两个定时器级联组成,预分频器的计数溢出作为计数器的计数时钟源,同时也可以产生预分频器溢出中断。
RTC相比普通的Timer还有的一个区别就是,RTC可以选择时钟源,可以选择外部晶振,系统时钟,内部32K时钟,或者外部RTCIN的输入时钟。在选择后两者时,RTC模块可以在stop以及standby模式下继续工作,产生的中断可以作为唤醒源唤醒芯片。
我们设置RTC选择内部32K时钟源,预分频器设置31999,这样预分频器便1s产生一次中断,同时设置计数器为5,即5s产生一次中断,在中断中设置两个标志位,main函数中设置LED在1s的flag中翻转,CAN报文在5s flasg中发送。
void RTC_IRQHandler(void)
{
uint32_t value;
value = RTC->SC;
if (value & (1 << 7)) ///<P interrupt
{
g_rtc5sFlag = 1;
}
if (value & (1 << 17)) ///<P interrupt
{
g_rtc1sFlag = 1;
}
RTC->SC = value; ///<clear flag
}
void Rtc_Init(void)
{
CKGEN->PERI_CLK_EN_0 |= CKGEN_PERI_CLK_EN_0_RTC_EN_Msk; ///<RTC clock en
CKGEN->PERI_SFT_RST0 |= CKGEN_PERI_SFT_RST0_SRST_RTC_Msk;
RTC->MOD = 5; ///<Set 5s triger a interrupt
RTC->PS = 31999; ///<count 1 per second
RTC->SC = 1 << 16 | 1 << 14 | 1 << 6; ///<internal 32K RC as clock source , enable interrupt
NVIC_EnableIRQ(RTC_IRQn);
}
rtc.rar
(695.5 KB)
|