本帖最后由 springvirus 于 2013-10-24 14:57 编辑
从名字FlexTimer看,就知道此模块会有多种设置来实现不同的功能。
计数器的时钟源选择,SC中的CLKS[1:0],可以选择无时钟源,系统时钟,固定频率时钟,外部时钟。 计数器可以工作在以下多种方式下。
I.当QUANEN=0且CPWMS=0,计数器便工作在向上计数方式。初值由CNTIN指定,溢出值由MOD指定,当计数器 值到达MOD时,此时计数器重载CNTIN的值,产生溢出中断,TOF置位。 CNTIN可以是正数,也可以是负数,若是负数,以补码(two's complement)数值赋值 整个计数周期 = (MOD - CNTIN + 1)* 计数器时钟
【这里顺便复习下补码: 正数的补码与原码相同,负数的补码为除了符号位,原码各位取反,再加1 例如,求-6的补码,原码为1000 0110,各位取反1111 1001,再加1,为1111 1010 若赋初值为-6,这里CNTIN是16位寄存器,所以1000 0000 0000 0110->1111 1111 1111 1001
->1111 1111 1111 1010,CNTIN = 0xFFFA】
注意,CNTIN值要小于MOD值,否则会有不可预测的结果。
II.当QUANEN=0且CPWMS=1,计数器便工作在向上向下计数方式。初值由CNTIN指定,溢出值由MOD指定, 当计数器从CNTIN增值到达MOD时,再减值到CNTIN,来回反复,当记数器值由MOD变为MOD-1时,产生 中断,TOF置位。
【在Figure 39-171下面看到,"使用向上向下计数时,CNTIN最好是0x0000",为什么? 觉得只要满足CNTIN<MOD的CNTIN值都可以吧~~~】
III.自由运行方式
1. FTMEN=0且MOD=0x0000或MOD=0xFFFF
2. FTMEN=1且QUANEN=0且CPWMS=0且CNTIN=0x0000且MOD=0x0000或MOD=0xFFFF
这2种设置都会使计数器工作在此方式下,其实就是一个向上计数到16位最大值的定时器了。
IV.输入捕捉方式
当DECAPEN=0且COMBINE=0且CPWMS=0且(MSnB:MSnA=0:0)且(ELSnB:ELSnA!=0:0),计数器便工作在输入捕捉, 当输入通道有信号跳变时,计数器值便会被捕捉到CnV中,如果CHnIE=1,则CHnF置位。 ELSnB:ELSnA的值决定了是跳变,是上升沿还是下降沿,进行捕捉。 注意,可以探测到的输入信号的最大频率为系统时钟的1/4,原因是奈奎斯特采样原理。
V.输出比较方式
当DECAPEN=0且COMBINE=0且CPWMS=0且(MSnB:MSnA=0:1),计数器便工作在输出比较。 计数器为向上计数,当等于CnV的值时,输出信号可以置1,清0,或者翻转,中断使能的话,产生中断。
【那么CnV的值应该是在计数器初始化时被赋值的吧,像CNTIN一样的?】
|