硬件环境: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, 下载次数: 2)
|