CW32F030 支持外部时钟(HSE 和 LSE)运行中失效检测功能。在外部时钟稳定运行过程中,时钟检测逻辑持续以一定的检测周期对 HSE 和 LSE 时钟信号进行计数:
在检测周期内检测到设定个数的时钟信号则运行正常,否则运行失效。
HSE 时钟的运行中失效检测周期通过 SYSCTRL_HSE.DETCNT 配置,实际时间为 SYSCTRL_HSE.DETCNT/fLSI,检测时钟个数为 0x20000。
考虑到时钟都有一定的偏差,为保证检测功能可靠,HSE 检测周期参数 HSE.DETCNT的配置须留有一定的裕量,一般根据 HSE 的运行频率,配置为 8000/fHSE(其中 fHSE 为 HSE 时钟的频率,单位为MHz)。例:如果 HSE 时钟频率为 4MHz,则 SYSCTRL_HSE.DETCNT 应配置为 2000。LSE 时钟的运行中失效检测周期不可配置,固定为 256 个 LSI 时钟周期,检测时钟个数为 128。
外部时钟故障检测功能默认处于关闭状态,此时 HSE/LSE 运行中失效不会产生相应的中断标志。通过设置SYSCTRL_CR1.HSECCS 为 1 和 SYSCTRL_CR1.LSECCS 为 1,分别使能 HSE 和 LSE 时钟故障检测功能。HSE 或LSE 时钟运行中失效检测还需要设置 SYSCTRL_CR1.LSIEN 为 1 使能内部低速时钟 LSI。
使能外部时钟的故障检测功能后,如果运行过程中检测到 HSE 或者 LSE 失效,则会产生运行中失效标志(对应SYSCTRL_ISR.HSEFAULT 或者 SYSCTRL_ISR.LSEFAULT 被置 1),如果中断使能(对应 SYSCTRL_IER.HSEFAULT或者 SYSCTRL_IER.LSEFAULT 设置为 1),则 CPU 会执行中断服务程序进行时钟运行中失效处理。
如果当前系统时钟来源为 HSE,则当 HSE 出现运行中失效时系统时钟源会自动切换到 HSI 时钟。
如果当前系统时钟来源为 LSE,则当 LSE 出现运行中失效时系统时钟源会自动切换到 HSI 时钟。
|