12. 定时器Timer

12. 定时器Timer

12.1 Timer 0/1

Timer0/1是2个16位定时/计数器,通过TCON和TMOD来配置Timer0和Timer1,TCON用于定时/计数器T0和T1的启动控制与溢出中断以及外部中断控制。每个定时器都是由2个8位寄存器组成的16位定时单元。定时器0的高字节计数器是TH0,低字节是TL0;定时器1的高字节计数器是TH1,低字节是TL1。定时器1还可以作为UART0的波特率发生器。

表12.1.1 Timer0/1相关寄存器列表

名称地址描述复位值
TH1 8DhTimer1计数高字节 xxh
TH0 8ChTimer0计数高字节 xxh
TL1 8BhTimer1计数低字节xxh
TL0 8AhTimer0计数低字节xxh
TMOD89hTimer0/1方式寄存器00h
TCON88hTimer0/1控制寄存器00h

定时/计数器0/1控制寄存器(TCON):

名称访问描述复位值
7 TF1 RW Timer1溢出中断标志位,进入定时器1中断后自动清零 0
6 TR1 RW Timer1启动/停止位,置1启动,由软件置位或者清零 0
5 TF0 RW Timer0溢出中断标志位,进入定时器0中断后自动清零 0
4 TR0 RW Timer0启动/停止位,置1启动,由软件置位或者清零 0
3 IE1 RW INT1外部中断1的中断请求标志位,进入中断后自动清零 0
2 IT1 RW INT1外部中断1触发方式控制位,该位为0选择外部中断为低电平触发;该位为1选择外部中断为下降边沿触发 0
1 IE0 RW INT0外部中断0的中断请求标志位,进入中断后自动清零 0
0 IT0 RW INT0外部中断0触发方式控制位,该位为0选择外部中断为低电平触发;该位为1选择外部中断为下降边沿触发 0

定时/计数器0/1方式寄存器(TMOD):

名称访问描述复位值
7 bT1_GATE RW门控使能位,控制Timer1启动是否受外部中断信号INT1的影响。该位为0则定时/计数器1是否启动与INT1无关;该位为1则只有INT1引脚为高电平并且TR1为1时才能启动 0
6 bT1_CT RW 定时或者计数方式选择位,该位为0工作于定时方式;该位为1工作于计数方式,使用T1引脚的下降沿作为时钟0
5 bT1_M1 RW 定时/计数器1模式选择高位 0
4 bT1_M0 RW 定时/计数器1模式选择低位 0
3 bT0_GATERW 门控使能位,控制Timer0启动是否受外部中断信号INT0的影响。该位为0则定时/计数器0是否启动与INT0无关;该位为1则只有INT0引脚为高电平并且TR0为1时才能启动0
2 bT0_CT RW 定时或者计数方式选择位,该位为0工作于定时方式;该位为1工作于计数方式,使用T0引脚的下降沿作为时钟0
1 bT0_M1 RW 定时/计数器0模式选择高位 0
0 bT0_M0 RW 定时/计数器0模式选择低位 0

表12.1.2 bTn_M1和bTn_M0选择Timern工作模式(n=0、1)

bTn_M1bTn_M0Timern工作模式(n=0、1)
0 0模式0:13位定时/计数器n,计数单元由TLn的低5位和THn组成,TLn的高3位无效。计数从13位全为1变成全为0时,设置溢出标志TFn,并需重置初值
0 1模式1:16位定时/计数器n,计数单元由TLn和THn组成。计数从16位全为1变成全为0时,设置溢出标志TFn,并需重置初值
1 0模式2:8位重载定时/计数器n,计数单元使用TLn,THn作为重载计数单元。计数从8位全为1变成全为0时,设置溢出标志TFn,并自动从THn加载初值
1 1模式3:如果是定时/计数器0,那么定时/计数器0被分成2个部分TL0和TH0,TL0作为8位定时/计数器使用,占用Timer0的全部控制位;而TH0也做另一个8位定时器使用,占用Timer1的TR1、TF1和中断资源,并且此时Timer1仍然可用,只是不能使用启动控制位TR1和溢出标志位TF1。
如果是定时/计数器1,那么进入模式3将停止定时/计数器1。

Timern计数低字节(TLn) (n = 0, 1):

名称访问描述复位值
[7:0]TLnRWTimern计数低字节xxh

Timern计数高字节(THn) (n = 0, 1):

名称访问描述复位值
[7:0]TLnRWTimern计数高字节xxh

12.2 Timer2

Timer2是16位自动重载定时/计数器,通过T2CON和T2MOD寄存器进行配置,定时器2的高字节计数器是TH2,低字节是TL2。Timer2可以作为UART0的波特率发生器,还具有2路信号电平捕捉功能,捕捉计数存储于RCAP2和T2CAP1寄存器中。

表12.2.1 Timer2相关寄存器列表

名称地址描述复位值
TH2 CDhTimer2计数器高字节 00h
TL2 CChTimer2计数器低字节 00h
T2COUNT CChTL2和TH2组成16位SFR 0000h
T2CAP1H CDhTimer2捕捉1数据高字节(只读) xxh
T2CAP1L CChTimer2捕捉1数据低字节(只读) xxh
T2CAP1 CChT2CAP1L和T2CAP1H组成16位SFR xxxxh
RCAP2H CBh计数重载/捕捉2数据寄存器高字节 00h
RCAP2L CAh计数重载/捕捉2数据寄存器低字节 00h
RCAP2 CAhRCAP2L和RCAP2H组成16位SFR 0000h
T2MOD C9hTimer2方式寄存器 00h
T2CON C8hTimer2控制寄存器 00h

定时/计数器2控制寄存器(T2CON):

名称访问描述复位值
7 TF2 RW当bT2_CAP1_EN=0时,是Timer2的溢出中断标志,当Timer2计数从16位全为1变成全为0时,设置该溢出标志为1,需要软件清零;当RCLK=1或者TCLK=1时,该位不会被置1 0
7CAP1FRW当bT2_CAP1_EN=1时,是Timer2捕捉1中断标志,由T2有效边沿触发,需要软件清零 0
6EXF2 RWTimer2的外部触发标志,当EXEN2=1时由T2EX有效边沿触发置1,需要软件清零 0
5RCLK RWUART0接收时钟选择,该位为0选择Timer1溢出脉冲产生波特率;该位为1选择Timer2溢出脉冲产生波特率 0
4TCLK RWUART0发送时钟选择,该位为0选择Timer1溢出脉冲产生波特率;该位为1选择Timer2溢出脉冲产生波特率 0
3EXEN2RWT2EX触发使能位,该位为0忽略T2EX;该位为1使能在T2EX有效边沿时触发重载或者捕捉 0
2 TR2 RWTimer2启动/停止位,置1启动,由软件置位或者清零 0
1 C_T2RWTimer2时钟源选择位,该位为0使用内部时钟;该位为1使用基于T2引脚下降沿的边沿计数 0
0CP_RL2RWTimer2功能选择位,如果RCLK或者TCLK为1,则该位应该强制为0。该位为0则Timer2作为定时/计数器,并且当计数器溢出或者T2EX电平变化时能够自动重载计数初值;该位为1使能Timer2的捕捉2功能,捕捉T2EX有效边沿 0

定时/计数器2方式寄存器(T2MOD):

名称访问描述复位值
7bTMR_CLKRW已选择快速时钟的T0/T1/T2定时器的最快时钟模式使能,该位为1则使用没有分频的系统主频Fsys作为计数时钟;该位为0则使用分频时钟。该位对选择标准时钟的定时器没有影响0
6bT2_CLKRWTimer2内部时钟频率选择位,该位为0选标准时钟,定时/计数模式为Fsys/12,UART0时钟模式为Fsys/4;该位为1选快速时钟,定时/计数模式为Fsys/4(bTMR_CLK=0)或Fsys(bTMR_CLK=1),UART0时钟模式为Fsys/2(bTMR_CLK=0)或Fsys(bTMR_CLK=1)0
5bT1_CLKRWTimer1内部时钟频率选择位,该位为0选标准时钟Fsys/12;为1选快速时钟Fsys/4(bTMR_CLK=0)或Fsys(bTMR_CLK=1)0
4bT0_CLKRWTimer0内部时钟频率选择位,该位为0选标准时钟Fsys/12;为1选快速时钟Fsys/4(bTMR_CLK=0)或Fsys(bTMR_CLK=1)0
3bT2_CAP_M1RWTimer2捕捉模式高位捕捉模式选择:
X0:从下降沿到下降沿
01:从任意沿到任意沿,即电平变化
11:从上升沿到上升沿
0
2bT2_CAP_M0RWTimer2捕捉模式低位0
1T2OERWTimer2时钟输出使能位,该位为0禁止输出;该位为1使能T2引脚输出时钟,频率为Timer2溢出速率的一半0
0bT2_CAP1_ENRW当RCLK=0、TCLK=0、CP_RL2=1、C_T2=0、T2OE=0时的捕捉1模式使能,该位为1启用捕捉1功能捕捉T2有效边沿;该位为0禁用捕捉10

计数重载/捕捉2数据寄存器(RCAP2):

名称访问描述复位值
[7:0]RCAP2HRW在定时/计数器模式下是重载值的高字节;在捕捉模式下是CAP2捕捉到的定时器的高字节00h
[7:0]RCAP2LRW在定时/计数器模式下是重载值的低字节;在捕捉模式下是CAP2捕捉到的定时器的低字节00h

Timer2计数器(T2COUNT),仅当bT2_CAP1_EN=0时有效:

名称访问描述复位值
[7:0]TH2RW当前计数器高字节00h
[7:0]TL2RW当前计数器低字节00h

Timer2捕捉1数据(T2CAP1),仅当bT2_CAP1_EN=1时有效:

名称访问描述复位值
[7:0]T2CAP1HRWCAP1捕捉到的定时器的高字节xxh
[7:0]T2CAP1LRWCAP1捕捉到的定时器的低字节xxh

12.3 Timer3

表12.3.1 Timer3相关寄存器列表

名称地址描述复位值
T3_FIFO_H AFhTimer3的FIFO高字节 xxh
T3_FIFO_L AEhTimer3的FIFO低字节 xxh
T3_FIFO AEhT3_FIFO_L和T3_FIFO_H组成16位SFR xxxxh
T3_DMA_AH ADhDMA当前缓冲区地址高字节 0xh
T3_DMA_AL AChDMA当前缓冲区地址低字节 xxh
T3_DMA AChT3_DMA_AL和T3_DMA_AH组成16位SFR0xxxh
T3_DMA_CN ABhDMA剩余计数寄存器00h
T3_CTRL AAhTimer3控制寄存器02h
T3_STAT A9hTimer3状态寄存器00h
T3_END_H A7hTimer3计数终值高字节xxh
T3_END_L A6hTimer3计数终值低字节xxh
T3_END A6hT3_END_L和T3_END_H组成16位SFRxxxxh
T3_COUNT_H A5hTimer3当前计数高字节(只读)00h
T3_COUNT_L A4hTimer3当前计数低字节(只读)00h
T3_COUNT A4hT3_COUNT_L和T3_COUNT_H组成16位SFR0000h
T3_CK_SE_H A5hTimer3时钟分频设置高字节00h
T3_CK_SE_L A4hTimer3时钟分频设置低字节20h
T3_CK_SE A4hT3_CK_SE_L和T3_CK_SE_H组成16位SFR0020h
T3_SETUP A3hTimer3设置寄存器04h

Timer3设置寄存器(T3_SETUP):

名称访问描述复位值
7bT3_IE_ENDRW该位为1使能捕捉模式计数超时中断或者PWM模式循环周期结束中断;该位为0关闭使能0
6bT3_IE_FIFO_OVRW该位为1使能FIFO溢出中断;该位为0关闭使能0
5bT3_IE_FIFO_REQRW该位为1使能捕捉模式FIFO>=4中断或者PWM模式FIFO<=3中断;该位为0关闭使能0
4bT3_IE_ACTRW该位为1使能捕捉模式输入信号激活中断或者PWM模式数据触发中断;该位为1关闭使能0
3保留R0保留0
2bT3_CAP_INR0经过噪声过滤后的当前捕捉引脚的输入电平1
1bT3_CAP_CLKRW该位为1使能无最小脉宽限制的输入捕捉,只有当T3_CK_SE为1时有效,用于捕捉高速信号0
0bT3_EN_CK_SERW该位为1使能访问时钟分频设置寄存器;该位为0使能访问当前计数寄存器0

Timer3当前计数(T3_COUNT),仅当bT3_EN_CK_SE=0时有效:

名称访问描述复位值
[7:0]T3_COUNT_HROTimer3当前计数高字节00h
[7:0]T3_COUNT_LROTimer3当前计数低字节00h

Timer3时钟分频设置寄存器(T3_CK_SE),仅当bT3_EN_CK_SE=1时有效:

名称访问描述复位值
[7:0]T3_CK_SE_HRWTimer3时钟分频除数高字节,仅低4位有效,高4位固定为000h
[7:0]T3_CK_SE_LRWTimer3时钟分频除数低字节20h

Timer3计数终值寄存器(T3_END):

名称访问描述复位值
[7:0]T3_END_HRWTimer3计数终值高字节xxh
[7:0]T3_END_LRWTimer3计数终值低字节xxh

Timer3状态寄存器(T3_STAT):

名称访问描述复位值
7bT3_IF_DMA_ENDRWDMA完成中断标志位,该位为1表示有中断;该位为0则无中断。写1清零或写T3_DMA_CN时清零0
6bT3_IF_FIFO_OVRW该位为1表示FIFO溢出中断;该位为0则无中断。写1清零0
5bT3_IF_FIFO_REQRW该位为1表示请求FIFO数据中断标志位,捕捉模式下由FIFO>=4触发,PWM模式下由FIFO<=3触发;该位为0则无中断。写1清零0
4bT3_IF_ACTRW当bT3_IE_ACT=1时,该位为1表示捕捉模式输入信号激活中断或者PWM模式数据触发中断;该位为0无中断。写1清零或访问FIFO时清零0
4bT3_IF_ENDRW当bT3_IE_ACT=0时,该位为1表示捕捉模式计数超时中断或者PWM模式循环周期结束中断;该位为0则无中断。写1清零0
[3:0]MASK_T3_FIFO_CNTR0Timer3的FIFO当前计数0000b

Timer3控制寄存器(T3_CTRL):

名称访问描述复位值
7bT3_CAP_M1RWTimer3捕捉边沿模式高位;PWM数据重复模式高位0
6bT3_CAP_M0RWTimer3捕捉边沿模式低位;PWM数据重复模式高位0
5bT3_PWM_POLARRWPWM模式下PWM输出极性控制位,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效0
5bT3_CAP_WIDTHRW捕捉模式下最小捕捉脉宽设置位,该位为0则至少4个分频时钟周期才有效,小于则忽略;该位为1则1个分频时钟周期即有效,小于则忽略0
4bT3_DMA_ENRW该位为1使能Timer3的DMA和DMA中断;为0关闭使能0
3bT3_OUT_ENRW该位为1使能Timer3的PWM输出;该位为0禁止0
2bT3_CNT_ENRW该位为1使能Timer3计数;该位为0暂停计数0
1bT3_CLR_ALLRW该位为1清空Timer3计数和FIFO,需要软件清零1
0bT3_MOD_CAPRWTimer3模式选择位,该位为0则Timer3工作在定时/计数或PWM模式;该位为1则工作在捕捉模式0

捕捉模式下bT3_CAP_M1和bT3_CAP_M0选择捕捉边沿:当bT3_CAP_M1和bT3_CAP_M0为00时,则关闭或暂停捕捉模式;为01时,由任意边沿即电平变化激活,捕捉从任意边沿到任意边沿;为10时,由下降沿激活,捕捉从下降沿到下降沿;为11时,由上升沿激活,捕捉从上升沿到上升沿。

PWM模式下bT3_CAP_M1和bT3_CAP_M0选择数据重复次数:当bT3_CAP_M1和bT3_CAP_M0为00时,数据不重复使用,即每个PWM周期使用一个新数据;为01时,数据重复使用4次,即同一数据用于连续4个PWM周期;为10时,数据重复使用8次;为11时,数据重复使用16次。

DMA剩余计数寄存器(T3_DMA_CN):

名称访问描述复位值
[7:0]T3_DMA_CNRW当前DMA剩余计数,可预置初值,DMA操作后自动减少00h

DMA当前缓冲区地址(T3_DMA):

名称访问描述复位值
[7:0]T3_DMA_AHRW当前DMA地址高字节,可预置初值,DMA后自动增加,仅低4位有效,高4位固定为0,仅支持xRAM前4K0xh
[7:0]T3_DMA_ALRW当前DMA地址低字节,可预置初值,DMA后自动增加,仅高7位有效,最低位固定为0,仅支持偶地址xxh

FIFO端口(T3_FIFO):

名称访问描述复位值
[7:0]T3_FIFO_HRWTimer3的FIFO高字节xxh
[7:0]T3_FIFO_LRWTimer3的FIFO低字节xxh

12.4 PWM功能

CH559的Timer3具有16位PWM功能,除此之外还有另外2路8位PWM,PWM可以选择默认的输出极性为低电平或者高电平,可以动态修改PWM的输出占空比,通过简单RC电阻电容进行积分低通滤波后,即可获得各种输出电压,相当于低速数模转换器DAC。

PWM3输出占空比=T3_FIFO/T3_END,支持范围0%到100%,如果T3_FIFO数值大于T3_END则按100%处理。

PWM1输出占空比=PWM_DATA/PWM_CYCLE,支持范围0%到100%,如果PWM_DATA数值大于PWM_CYCLE则按100%处理。

PWM2输出占空比=PWM_DATA2/PWM_CYCLE,支持范围0%到100%,如果PWM_DATA2数值大于PWM_CYCLE则按100%处理。

实际应用中,建议允许PWM引脚输出并且设置PWM输出引脚为推挽输出模式。

12.4.1 PWM1和PWM2

表12.4.1 PWM1和PWM2相关寄存器列表

名称地址描述复位值
PWM_CYCLE9FhPWM循环周期寄存器xxh
PWM_CK_SE9EhPWM时钟分频设置寄存器00h
PWM_CTRL9DhPWM控制寄存器02h
PWM_DATA9ChPWM1数据寄存器xxh
PWM_DATA29BhPWM2数据寄存器xxh

PWM2数据寄存器(PWM_DATA2):

名称访问描述复位值
[7:0]PWM_DATA2RW存储PWM2当前数据,PWM2输出有效电平的占空比=PWM_DATA2/PWM_CYCLExxh

PWM1数据寄存器(PWM_DATA):

名称访问描述复位值
[7:0]PWM_DATARW存储PWM1当前数据,PWM1输出有效电平的占空比=PWM_DATA/PWM_CYCLExxh

PPWM控制寄存器(PWM_CTRL):

名称访问描述复位值
7bPWM_IE_ENDRW该位为1使能PWM循环周期结束或MFM缓冲区空中断0
6bPWM2_POLARRW当bPWM_MOD_MFM=0时控制PWM2输出极性,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效0
6bMFM_BUF_EMPTYR0当bPWM_MOD_MFM=1时,该位为1表示MFM缓冲区空0
5bPWM_POLARRW控制PWM1输出极性,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效0
4bPWM_IF_ENDRWPWM循环周期结束中断标志位,该位为1表示有中断,写1清零或写PWM_CYCLE时清零或重新加载数据时清零0
3bPWM_OUT_ENRWPWM1输出使能,该位为1使能PWM1输出0
2bPWM2_OUT_ENRW当bPWM_MOD_MFM=0时,该位为1使能PWM2输出0
2bMFM_BIT_CNT2R0当bPWM_MOD_MFM=1时表示当前MFM编码进度,该位为0表示正在处理低4位;为1表示处理高4位0
1bPWM_CLR_ALLRW该位为1清空PWM1和PWM2计数和FIFO,需要软件清零1
0bPWM_MOD_MFMRWMFM编码模式使能,该位为0则为PWM模式;该位为1则为MFM模式0

PWM时钟分频设置寄存器(PWM_CK_SE):

名称访问描述复位值
[7:0]PWM_CK_SERW设置PWM时钟分频除数00h

PWM循环周期寄存器(PWM_CYCLE):

名称访问描述复位值
[7:0]PWM_CYCLERW设置PWM循环周期,数值为00h时代表100hxxh

12.5 Timer功能

12.5.1 Timer0/1

  1. 设置T2MOD选择Timer内部时钟频率,如果bTn_CLK(n=0/1)为0,那么Timer0/1对应的时钟为Fsys/12;如果bTn_CLK为1,那么由bTMR_CLK=0或1选择Fsys/4或者Fsys作为时钟。
  2. 设置TMOD配置Timer的工作模式。

模式0:13位定时/计数器

Timer_Mode_0

图12.5.1.1 Timer0/1模式0

模式1:16位定时/计数器

Timer_Mode_1

图12.5.1.2 Timer0/1模式1

模式2:自动重载8位定时/计数器

Timer_Mode_2

图12.5.1.3 Timer0/1模式2

模式3:Timer0分解为两个独立的8位定时/计数器,并借用Timer1的TR1控制位;Timer1通过是否启动模式3代替被借用的TR1控制位,Timer1进入模式3则Timer1停止运行。

Timer_Mode_3

图12.5.1.4 Timer0模式3

  1. 设置定时/计数器初值TLn和THn(n=0/1)。
  2. 设置TCON中的位TRn(n=0/1)开启或者停止定时/计数器,可以通过位TFn(n=0/1)查询或者通过中断方式进行检测。

12.5.2 Timer2

Timer216位重载定时/计数器模式:

  1. 设置T2CON中的位RCLK和TCLK都为0,选择非串口波特率发生器模式。
  2. 设置T2CON中的位C_T2为0选择使用内部时钟,转步骤(3);也可置1选择T2引脚的下降沿作为计数时钟,跳过步骤(3)。
  3. 设置T2MOD选择Timer内部时钟频率,如果bT2_CLK为0,那么Timer2的时钟为Fsys/12;如果bT2_CLK为1,那么由bTMR_CLK=0或1选择Fsys/4或者Fsys作为时钟。
  4. 设置T2CON的位CP_RL2为0,选择Timer2的16位重载定时/计数器功能。
  5. 设定RCAP2L和RCAP2H为定时器溢出后的重载值,设定TL2和TH2为定时器的初值(一般与RCAP2L和RCAP2H相同),设置TR2为1,开启Timer2。
  6. 通过查询TF2或者定时器2中断可以获取当前定时/计数器状态。

Timer2_16bit

图12.5.1.4 Timer0模式3

Timer2时钟输出模式:

参考16位重载定时/计数器模式,并且再设置T2MOD中的位T2OE为1,则使能从T2引脚输出TF2频率的二分频时钟。

Timer2串口0波特率发生器模式:

  1. 设置T2CON中的位C_T2为0选择使用内部时钟,也可置1选择T2引脚的下降沿作为时钟,根据需要设置T2CON中的位RCLK和TCLK为1或其中之一为1,选择串口波特率发生器模式。
  2. 设置T2MOD选择Timer内部时钟频率,如果bT2_CLK为0,那么Timer2的时钟为Fsys/4;如果bT2_CLK为1,那么由bTMR_CLK=0或1选择Fsys/2或者Fsys作为时钟。
  3. 设定RCAP2L和RCAP2H为定时器溢出后的重载值,设置TR2为1,开启Timer2。

Timer2_baud_gen

图12.5.2.2 Timer2 UART0波特率发生器

Timer2双通道捕捉模式:

  1. 设置T2CON中的位RCLK和TCLK都为0,选择非串口波特率发生器模式。
  2. 设置T2CON中的位C_T2为0选择使用内部时钟,转步骤(3);也可置1则选择T2引脚的下降沿作为计数时钟,跳过步骤(3)。
  3. 设置T2MOD选择Timer内部时钟频率,如果bT2_CLK为0,那么Timer2的时钟为Fsys/12;如果bT2_CLK为1,那么由bTMR_CLK=0或1选择Fsys/4或者Fsys作为时钟。
  4. 设置T2MOD的位bT2_CAP_M1和bT2_CAP_M0选择相应的边沿捕捉模式。
  5. 设置T2CON的位CP_RL2为1,选择Timer2对T2EX引脚的捕捉功能。
  6. 设定TL2和TH2为定时器的初值,设置TR2为1,开启Timer2。
  7. 当CAP2捕捉完成,RCAP2L和RCAP2H会保存当时TL2和TH2的计数值,并使EXF2置位,产生中断,下一次捕捉到的RCAP2L和RCAP2H与上一次捕捉到的RCAP2L和RCAP2H之间的差值,就是两次有效边沿之间的信号宽度。
  8. 如果T2CON中的位C_T2为0,并且T2MOD中的位bT2_CAP1_EN为1,那么将同时使能Timer2对T2引脚的捕捉功能,当CAP1捕捉完成,T2CAP1L和T2CAP1H会保存当时TL2和TH2的计数值,并使CAP1F置位,产生中断。

tim2_capture_mode

图12.5.2.3 Timer2捕捉模式

12.5.3 Timer3

  1. 设置T3_SETUP中的位bT3_EN_CK_SE为1,使能Timer3时钟分频设置寄存器T3_CK_SE,设置分频系数,计数时钟为Fsys/T3_CK_SE,设置完成后清零bT3_EN_CK_SE。
  2. 设置T3_END计数终值或PWM总周期数。
  3. 根据需要在T3_SETUP中开启中断使能。
  4. 设置T3_CTRL中的各个控制位,选择模式,并清bT3_CLR_ALL,置bT3_CNT_EN开启Timer3。
  5. 根据需要设置T3_DMA_AL和T3_DMA_AH以及T3_DMA_CN,设置bT3_DMA_EN,启用DMA功能。

tim3_16bit_tpc

图12.5.3.1 Timer3 16位定时器/PWM/捕捉

Timer3捕捉的数据格式:

Timer3可以用于捕捉信号的两个有效边沿之间的宽度,该宽度以分频后的时钟计数表示,捕捉过程中或者完成后,可以通过DMA或者直接读FIFO得到该宽度数据,数据为16位,最高位是标识位,低15位是宽度计数。启用信号捕捉后,每检测到一次有效边沿或者每次定时器溢出,都将产生一次数据,由于第一次有效边沿时产生的数据是从启用信号捕捉时起算的宽度,而不是两个有效边沿之间的宽度,所以捕捉得到的第一个数据通常会被舍弃。

  1. bT3_CAP_M1和bT3_CAP_M0=11
    上升沿有效,捕捉从上升沿到上升沿的信号宽度,即上升沿激活。如果数据最高位为1,那么说明该信号宽度已经溢出计数终值,即计时超过T3_END仍未发现下一个上升沿,该宽度值必须累加到下一个数据最高位为0的宽度值上;如果数据最高位为0,那么说明该宽度是截止到某个上升沿之间的宽度,根据之前若干数据的最高位是否为1决定是否向前累加其低15位。该模式下,建议设置T3_END以检测特殊用途的超宽信号或者结束信号,而正常信号不应产生溢出。
     例如,T3_END设置为4000h,采集到的原始数据序列如下:
      1234h, 2345h, 0456h, C000h, C000h, 1035h, 3579h, C000h, 2468h, 0987h
     合并后得到各上升沿之间的间隔:
      1234h, 2345h, 0456h, 9035h, 3579h, 6468h, 0987h

  2. bT3_CAP_M1和bT3_CAP_M0=10
    同上,但是下降沿有效,捕捉从下升沿到下升沿的信号宽度,即下降沿激活。

  3. bT3_CAP_M1和bT3_CAP_M0=01
    任意边沿有效,捕捉从任意边沿到任意边沿的信号宽度,即电平变化激活。如果数据最高位为1,那么说明该宽度是高电平宽度,即从上升沿到下降沿;如果数据最高位为0,那么说明该宽度是低电平宽度,即从下降沿到上升沿。屏蔽掉最高位后的低15位是以分频时钟计数的宽度值。该模式下,建议将T3_END设置为较大的值,避免计时溢出,但不得超过15位有效数据。