步骤如下
①配置外部时钟源的参数:
Ⅰ.若选择来源为TMRx_CH1,需配置通道1的输入滤波和极性;
Ⅱ.若选择来源为TMRx_CH2,需配置通道2的输入滤波和极性;
Ⅲ.若选择来源为TMRx_EXT,需配置外部信号的极性、分频和滤波。
②设置外部信号的来源:
Ⅰ.当STIS[2:0] =3'b100时,选择通道1的上升沿和下降沿信号;
Ⅱ.当STIS[2:0] =3'b101时,选择通道1经滤波且极性选择后的信号;
Ⅲ.当STIS[2:0] =3'b110时,选择通道2经滤波且极性选择后的信号;
Ⅳ.当STIS[2:0] =3'b111时,选择外部输入经极性选择、分频和滤波后的信号。
注:
-STIS[2:0]表示‘次定时器输入来源’的第0位到第2位;
-3‘b100表示三位二进制100。
③使能外部时钟模式A:
配置‘次定时器模式选择’,即SMSEL[1:0] = 3b'111。
④设置计数器计数频率:
配置‘定时器的预分频器’,即TMRx_DIV[15:0]。
⑤设置计数器计数周期:
配置‘定时器的周期寄存器’,即TMRx_PR[15:0]。
⑥使能计数器:
配置‘定时器的控制寄存器1’,即TMRx_CTRL1的TMREN = 1。
l 外部时钟模式B
步骤如下
①设置外部信号极性、分频和滤波:
Ⅰ.配置‘次定时器控制寄存器的外部信号极性’,即TMRx_STCTRL的ESP;
Ⅱ.配置‘次定时器控制寄存器的外部信号分频’,即TMRx_STCTRL的ESDIV;
Ⅲ.配置‘次定时器控制寄存器的外部信号滤波’,即TMRx_STCTRL的ESF。
②使能外部时钟模式B:
配置‘次定时器控制寄存器的外部时钟模式B’,即TMRx_STCTRL的ECMBEN = 1。
③设置计数器计数频率:
配置‘定时器的预分频器’,即TMRx_DIV[15:0]。
④设置计数器计数周期:
配置‘定时器的周期寄存器’,即TMRx_PR[15:0]。
⑤使能计数器:
配置‘定时器的控制寄存器1’,即TMRx_CTRL1的TMREN = 1。
注:外部时钟模式B等效于外部时钟模式A选择EXT信号作为外部时钟源(TRGIN)。
l 内部触发输入
内部触发是指一个定时器的计数时钟(TMR_CLK)可由另一个定时器的输出信号(TRGOUT)提供。
步骤如下
①设置计数器计数频率:
配置‘定时器的预分频器’,即TMRx_DIV[15:0]。
②设置计数器计数周期:
配置‘定时器的周期寄存器’,即TMRx_PR[15:0]。
③设置计数器计数模式:
配置‘定时器控制寄存器1的中央双向对齐计数模式选择’,即TMRx_CTRL1的TWCMSEL[1:0]。
④选择内部触发:
配置‘次定时器控制寄存器的次定时器输入选择’,即TMRx_STCTRL的STIS[2:0]:
Ⅰ.当STIS[2:0] =3'b000时,选择输入源0(IS0);
Ⅱ.当STIS[2:0] =3'b001时,选择输入源1(IS1);
Ⅲ.当STIS[2:0] =3'b010时,选择输入源2(IS2);
Ⅳ.当STIS[2:0] =3'b011时,选择输入源3(IS3)。
例如:当主定时器选TMR2、次定时器选TMR3时,根据下图需配置STIS[2:0] = 3'b001(选择IS1)。
注:如果某款芯片没有相应的定时器(TMRx),则对应的触发信号(ISx)也不存在。
⑤使能外部时钟模式A:
配置‘次定时器模式选择’,即SMSEL[1:0] = 3b'111。
⑥使能计数器:
配置‘定时器的控制寄存器1’,即TMRx_CTRL1的TMREN = 1。
2. 计数模式计数模式包括向上、向下和中央双向对齐三种计数模式,可以由定时器控制器1的“中央双向对齐计数模式选择”和“单向对齐计数方向”配置,即TMRx_CTRL1的“TWCMSEL(Two-way count mode selection)”和“OWCDIR(one-way countdirection)”。
①若TWCMSEL[1:0] = 2b'00且OWCDIR = 0,开启向上计数模式;
②若TWCMSEL[1:0] = 2b'00且OWCDIR = 1,开启向下计数模式;
③若TWCMSEL[1:0] ≠ 2b'00,开启中央双向对齐计数模式:
Ⅰ.当TWCMSEL[1:0] =2b'01,CxIF(捕获比较中断标志位)仅在向上计数时置起;
Ⅱ.当TWCMSEL[1:0] =2b'10,CxIF(捕获比较中断标志位)仅在向下计数时置起;
Ⅲ.当TWCMSEL[1:0] =2b'11,CxIF(捕获比较中断标志位)在向上和向下计数时都置起;
注:中央双向对齐计数模式时,OWCDIR为只读位,用于查看计数器的计数方向。
1) 向上计数模式计数器向上计数:
当计数值达到TMR_PR时,计数器向上溢出并产生溢出事件,同时OVFIF(溢出中断标志)置1,之后从0开始向上计数 。
2) 向下计数模式计数器向下计数:
当计数值达到0时,计数器向下溢出并产生溢出事件,同时OVFIF(溢出中断标志)置1,之后从TMR_PR开始向下计数。
3) 中央双向计数模式计数器交替向上、向下计数 :
当计数值达到TMR_PR-1时,计数器向上溢出并产生溢出事件,同时OVFIF(溢出中断标志)置1,之后从TMR_PR开始向下计数;
当计数值达到1时,计数器向下溢出并产生溢出事件,同时OVFIF(溢出中断标志)置1,之后从0开始向上计数。
3. 编码模式编码模式需要提供两组输入信号TMRx_CH1和TMRx_CH2,根据一组信号的电平值,在另一组信号的边沿向上或者向下计数,计数方向由OWCDIR指示。
1) 编码模式A需配置“次定时器模式选择”,即SMSEL[1:0] = 3b'001,计数器在C1IFP1边沿(上升沿和下降沿)计数,计数方向由C1IFP1的边沿方向和C2IFP2的电平高低共同决定。
| C1IFP1为上升沿 | C1IFP1为下降沿 |
C2IFP2为高电平 | 向下计数 | 向上计数 |
C2IFP2为低电平 | 向上计数 | 向下计数 |
注:编码模式A时,计数边沿为 C1IFP1 2) 编码模式B需配置“次定时器模式选择”,即SMSEL[1:0] = 3b'010,计数器在C2IFP2边沿(上升沿和下降沿)计数,计数方向由C2IFP2的边沿方向和C1IFP1的电平高低共同决定。
| C2IFP2为上升沿 | C2IFP2为下降沿 |
C1IFP1为高电平 | 向上计数 | 向下计数 |
C1IFP1为低电平 | 向下计数 | 向上计数 |
注:编码模式B时,计数边沿为 C2IFP2 3) 编码模式C需配置“次定时器模式选择”,即SMSEL[1:0] = 3b'011,计数器在C1IFP1和C2IFP2边沿(上升沿和下降沿)计数,计数方向由C1IFP1和C2IFP2的边沿方向、C1IFP1和C2IFP2的电平高低共同决定。
| C1IFP1为上升沿 | C1IFP1为下降沿 | C2IFP2为上升沿 | C2IFP2为下降沿 |
相对信号为高电平 | 向下计数 | 向上计数 | 向上计数 | 向下计数 |
相对信号为低电平 | 向上计数 | 向下计数 | 向下计数 | 向上计数 |
注: - 编码模式C时,计数边沿为 C1IFP1 和 C2IFP2;
- C1IFP1的相对信号为C2IFP2;
- C2IFP2的相对信号为C1IFP1。
4. 编码模式实例
如上图,编码模式C下:
①当C1IRAW为上升沿且C2IRAW为低电平时,计数器向上计一个数(COUNTER = 0x20);
②当C2IRAW为上升沿且C1IRAW为高电平时,计数器向上计一个数(COUNTER = 0x21);
③当C1IRAW为下降沿且C2IRAW为高电平时,计数器向上计一个数(COUNTER = 0x22);
④当C2IRAW为下降沿且C1IRAW为低电平时,计数器向上计一个数(COUNTER = 0x23);
……
即COUNTER每过一个周期会计4个数。
注:
C1IRAW为通道1预处理的信号;
C2IRAW为通道2预处理的信号;
三、案例