FSCM(Fail-Safe Clock Monitor)是用来检测时钟源故障,并让INTRC作为备用时钟源。但是INRTC作为振荡源无法满足对某些定时要求较高的应用,所以可以选用另一种时钟配置。PIC有3个时钟源:1.Primary oscillators;2.Secondary oscillators;3.Internal oscillator block(而这个block里又包含一个8MHz的振荡源和31kHz的INTRC)
。如果开启了FSCM且开启了FSCM中断,那么可以在中断里配置精度更好的时钟源作为配用时钟;也可以尝试部分恢复或执行安全关机(to attempt a partial recovery or execute a controlled shutdown)。关于datasheet里对FSCM的原理描述:INTRC通过64分频输出的采样时钟信号,与外设时钟,作为时钟监视锁存器(Clock MonitorLatch (CM))的输入,该锁存器是边沿触发的:在外设时钟的下降沿,CM输出置1,在采样时钟信号的上升沿,CM输出置0(The
CM is set on the falling edge of the device clock source, but cleared on the rising edge of thesample clock)。对INTRC进行64分频是为了有足够的时间使外设时钟在采样时钟的一个周期内出现跳变沿(所以相应的外设时钟的信号需要把较高的频率)。下面是datasheet里的diagram:(OSCFIF是FSCM中断的标志位) 个人觉得理解不能的地方是:1.红笔修改过的,CM的输出应该在Device Clock的下降沿置1;2.关于检测时钟源是否正常,datasheet原文: Clock failure is tested for on the falling edge of the
sample clock. If a sample clock falling edge occurs
while CM is still set, a clock failure has been detected按照我的理解,CM Tsst 的结果并不是第一个图里的锁存器右边的与门的输出吧。CM Test是在Sample Clock下降沿进行的,这时与门的输入:上方——CM的输出0,下方——Sample Clock的高电平取反 即0(因为应该看跳变沿之前的电平) 这样通过与门应该同样为0,而不是1。CM is still set 手册里并没有说清楚的样子-。- 所以可能这里的CM 并不是指CM的输出,因为很明显如果时钟源停止工作,CM的输出将一直是0. 所以我猜测CM Test的结果通过一个逻辑电路 :((A非) 与 (B非)) (A——Sample
Clock,B——CM的输出) 得到的。而datasheet没有说明。 但是第一个图中的那个与门着实让我想不通有什么用,还是说是我想错了。 note:FSCM只能检测Primary oscillators和Secondary oscillators的故障。 打算把关于MCU的博文搬到与非网去了 http://www.eefocus.com/andrewchan/blog