最近在操作复旦微的CORTEX-M0 FM33A048的时候,需要用外部32K时钟,实现时中断使能,闹钟中断使能,秒中断等其他中断禁止。但调试中遇到每秒都会产生秒中断,无法禁止。经过调试发现,RTC初始化函数没什么问题,问题应该出在RTC服务函数的处理上,中断的产生首先是总中断要打开,然后相应的中断要开启,第三要中断标志位要置起,当有多个中断源使用同一个中断入口的时候,只用if(SET == RTC_RTCIF_ChkEx(RTC_RTCIE_SEC_IE_Msk))这么判断秒中断标志位是不准确的,这个条件成立了,但是不一定是这个中断;
附件的例程实现了初始时间是01时59分55秒,到02时0分0秒的时候会产生时中断,到2时0分5秒的时候会产生闹钟中断;另外如果遇到第一次秒中断,后面就没了,需要检查下RTC初始化的时候是否先开了所以中断,再关掉所有中断,其实完全不用先开,直接关掉所有中断,后面需要用到什么中断再开什么中断就可以了,否则会出现第一次会进去中断的情况~
以上调试心得分享给大家,希望可以帮助有同样问题的贴友!
|
楼主很用心嘛
不错
对于不想下载代码的贴友,可以直接看这条回复,即增加一个判断相应的秒中断是否开启的条件,if((SET == RTC_RTCIF_ChkEx(RTC_RTCIE_SEC_IE_Msk)) && (RTC->RTCIE & RTC_RTCIE_SEC_IE_Msk) ),而非单单判断秒中断标志if(SET == RTC_RTCIF_ChkEx(RTC_RTCIE_SEC_IE_Msk))