大家好、
我正在使用 RTC、但在理解 RTCIV 的优先级时遇到问题。 我的代码会将时间发送到显示器、但速度慢了一分钟。 我已将其跟踪为事件中断(发送时间的每一分钟)、在就绪中断之前执行(在 RTCRDY 中、更新时间)。 我本来以为 RTCRDYIFG 的优先级比 RTCEVIFG 高、但在一分钟的翻转时间内、这两个位都将被置位(根据用户手册中的图29-1)。
#pragma vector = RTC_Vector _中断 void RTC_ISR (void) { switch (__event_in_range (RTCIV、16)) { 案例 RTCIV_NONE:中断; //无中断 案例 RTCIV_RTCOFIFG:中断; //RTCOFIFG -故障。 RTCIV__RTCRDYIFG 案例: //RTCRDYIFG -在1Hz 寄存器更新后触发。 //更新 RTC 内部时间的最安全点 sRtcTime.seconds = HWREG8 (RTC_C_base + OFS_RTCTIM0_L); sRtcTime.minutes = HWREG8 (RTC_C_base + OFS_RTCTIM0_H); sRtcTime.hours = HWREG8 (RTC_C_base + OFS_RTCTIM1_L); sRtcTime.DayOfWeek = HWREG8 (RTC_C_BASE + OFS_RTCTIM1_H); sRtcTime.dayofmonth = HWREG8 (RTC_C_base + OFS_RTCDATE_L); sRtcTime.Month = HWREG8 (RTC_C_base + OFS_RTCDATE_H); sRtcTime.Year = HWREG16 (RTC_C_base + OFS_RTCYEAR); Task_SysTK_1s.flag = true; APP_WAKEUP; 中断; 案例 RTCIV_RTCTEVIFG: //RTCEVIFG -每分钟中断一次 Task_MinuteTick.flag = true; APP_WAKEUP; 中断; 中断; 案例 RTCIV_RTCAIFG:中断; 案例 RTCIV_RT0PSIFG:中断; 案例 RTCIV_RT1PSIFG:中断; 默认值:break; } }
在主循环中、它会检查是否设置了 Task_MinuteTick、并将 sRtcTime (日历)复制到另一个实例并将其发送到。 我可以看到、在 GPIO 切换的情况下、EVIFG 在 RTCRDY 之前的运行时间为3.9-4ms、但我认为这是另一种方法吗?
我有一个权变措施、但我想知道我是否误解了中断矢量的工作方式。
谢谢、
Michael。