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 | 8Dh | Timer1计数高字节 | xxh |
| TH0 | 8Ch | Timer0计数高字节 | xxh |
| TL1 | 8Bh | Timer1计数低字节 | xxh |
| TL0 | 8Ah | Timer0计数低字节 | xxh |
| TMOD | 89h | Timer0/1方式寄存器 | 00h |
| TCON | 88h | Timer0/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_GATE | RW | 门控使能位,控制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_M1 | bTn_M0 | Timern工作模式(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] | TLn | RW | Timern计数低字节 | xxh |
Timern计数高字节(THn) (n = 0, 1):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | TLn | RW | Timern计数高字节 | xxh |
12.2 Timer2
Timer2是16位自动重载定时/计数器,通过T2CON和T2MOD寄存器进行配置,定时器2的高字节计数器是TH2,低字节是TL2。Timer2可以作为UART0的波特率发生器,还具有2路信号电平捕捉功能,捕捉计数存储于RCAP2和T2CAP1寄存器中。
表12.2.1 Timer2相关寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
|---|---|---|---|
| TH2 | CDh | Timer2计数器高字节 | 00h |
| TL2 | CCh | Timer2计数器低字节 | 00h |
| T2COUNT | CCh | TL2和TH2组成16位SFR | 0000h |
| T2CAP1H | CDh | Timer2捕捉1数据高字节(只读) | xxh |
| T2CAP1L | CCh | Timer2捕捉1数据低字节(只读) | xxh |
| T2CAP1 | CCh | T2CAP1L和T2CAP1H组成16位SFR | xxxxh |
| RCAP2H | CBh | 计数重载/捕捉2数据寄存器高字节 | 00h |
| RCAP2L | CAh | 计数重载/捕捉2数据寄存器低字节 | 00h |
| RCAP2 | CAh | RCAP2L和RCAP2H组成16位SFR | 0000h |
| T2MOD | C9h | Timer2方式寄存器 | 00h |
| T2CON | C8h | Timer2控制寄存器 | 00h |
定时/计数器2控制寄存器(T2CON):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | TF2 | RW | 当bT2_CAP1_EN=0时,是Timer2的溢出中断标志,当Timer2计数从16位全为1变成全为0时,设置该溢出标志为1,需要软件清零;当RCLK=1或者TCLK=1时,该位不会被置1 | 0 |
| 7 | CAP1F | RW | 当bT2_CAP1_EN=1时,是Timer2捕捉1中断标志,由T2有效边沿触发,需要软件清零 | 0 |
| 6 | EXF2 | RW | Timer2的外部触发标志,当EXEN2=1时由T2EX有效边沿触发置1,需要软件清零 | 0 |
| 5 | RCLK | RW | UART0接收时钟选择,该位为0选择Timer1溢出脉冲产生波特率;该位为1选择Timer2溢出脉冲产生波特率 | 0 |
| 4 | TCLK | RW | UART0发送时钟选择,该位为0选择Timer1溢出脉冲产生波特率;该位为1选择Timer2溢出脉冲产生波特率 | 0 |
| 3 | EXEN2 | RW | T2EX触发使能位,该位为0忽略T2EX;该位为1使能在T2EX有效边沿时触发重载或者捕捉 | 0 |
| 2 | TR2 | RW | Timer2启动/停止位,置1启动,由软件置位或者清零 | 0 |
| 1 | C_T2 | RW | Timer2时钟源选择位,该位为0使用内部时钟;该位为1使用基于T2引脚下降沿的边沿计数 | 0 |
| 0 | CP_RL2 | RW | Timer2功能选择位,如果RCLK或者TCLK为1,则该位应该强制为0。该位为0则Timer2作为定时/计数器,并且当计数器溢出或者T2EX电平变化时能够自动重载计数初值;该位为1使能Timer2的捕捉2功能,捕捉T2EX有效边沿 | 0 |
定时/计数器2方式寄存器(T2MOD):
| 位 | 名称 | 访问 | 描述 | 复位值 | |
|---|---|---|---|---|---|
| 7 | bTMR_CLK | RW | 已选择快速时钟的T0/T1/T2定时器的最快时钟模式使能,该位为1则使用没有分频的系统主频Fsys作为计数时钟;该位为0则使用分频时钟。该位对选择标准时钟的定时器没有影响 | 0 | |
| 6 | bT2_CLK | RW | Timer2内部时钟频率选择位,该位为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 | |
| 5 | bT1_CLK | RW | Timer1内部时钟频率选择位,该位为0选标准时钟Fsys/12;为1选快速时钟Fsys/4(bTMR_CLK=0)或Fsys(bTMR_CLK=1) | 0 | |
| 4 | bT0_CLK | RW | Timer0内部时钟频率选择位,该位为0选标准时钟Fsys/12;为1选快速时钟Fsys/4(bTMR_CLK=0)或Fsys(bTMR_CLK=1) | 0 | |
| 3 | bT2_CAP_M1 | RW | Timer2捕捉模式高位 | 捕捉模式选择: X0:从下降沿到下降沿 01:从任意沿到任意沿,即电平变化 11:从上升沿到上升沿 | 0 |
| 2 | bT2_CAP_M0 | RW | Timer2捕捉模式低位 | 0 | |
| 1 | T2OE | RW | Timer2时钟输出使能位,该位为0禁止输出;该位为1使能T2引脚输出时钟,频率为Timer2溢出速率的一半 | 0 | |
| 0 | bT2_CAP1_EN | RW | 当RCLK=0、TCLK=0、CP_RL2=1、C_T2=0、T2OE=0时的捕捉1模式使能,该位为1启用捕捉1功能捕捉T2有效边沿;该位为0禁用捕捉1 | 0 | |
计数重载/捕捉2数据寄存器(RCAP2):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | RCAP2H | RW | 在定时/计数器模式下是重载值的高字节;在捕捉模式下是CAP2捕捉到的定时器的高字节 | 00h |
| [7:0] | RCAP2L | RW | 在定时/计数器模式下是重载值的低字节;在捕捉模式下是CAP2捕捉到的定时器的低字节 | 00h |
Timer2计数器(T2COUNT),仅当bT2_CAP1_EN=0时有效:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | TH2 | RW | 当前计数器高字节 | 00h |
| [7:0] | TL2 | RW | 当前计数器低字节 | 00h |
Timer2捕捉1数据(T2CAP1),仅当bT2_CAP1_EN=1时有效:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T2CAP1H | RW | CAP1捕捉到的定时器的高字节 | xxh |
| [7:0] | T2CAP1L | RW | CAP1捕捉到的定时器的低字节 | xxh |
12.3 Timer3
表12.3.1 Timer3相关寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
|---|---|---|---|
| T3_FIFO_H | AFh | Timer3的FIFO高字节 | xxh |
| T3_FIFO_L | AEh | Timer3的FIFO低字节 | xxh |
| T3_FIFO | AEh | T3_FIFO_L和T3_FIFO_H组成16位SFR | xxxxh |
| T3_DMA_AH | ADh | DMA当前缓冲区地址高字节 | 0xh |
| T3_DMA_AL | ACh | DMA当前缓冲区地址低字节 | xxh |
| T3_DMA | ACh | T3_DMA_AL和T3_DMA_AH组成16位SFR | 0xxxh |
| T3_DMA_CN | ABh | DMA剩余计数寄存器 | 00h |
| T3_CTRL | AAh | Timer3控制寄存器 | 02h |
| T3_STAT | A9h | Timer3状态寄存器 | 00h |
| T3_END_H | A7h | Timer3计数终值高字节 | xxh |
| T3_END_L | A6h | Timer3计数终值低字节 | xxh |
| T3_END | A6h | T3_END_L和T3_END_H组成16位SFR | xxxxh |
| T3_COUNT_H | A5h | Timer3当前计数高字节(只读) | 00h |
| T3_COUNT_L | A4h | Timer3当前计数低字节(只读) | 00h |
| T3_COUNT | A4h | T3_COUNT_L和T3_COUNT_H组成16位SFR | 0000h |
| T3_CK_SE_H | A5h | Timer3时钟分频设置高字节 | 00h |
| T3_CK_SE_L | A4h | Timer3时钟分频设置低字节 | 20h |
| T3_CK_SE | A4h | T3_CK_SE_L和T3_CK_SE_H组成16位SFR | 0020h |
| T3_SETUP | A3h | Timer3设置寄存器 | 04h |
Timer3设置寄存器(T3_SETUP):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bT3_IE_END | RW | 该位为1使能捕捉模式计数超时中断或者PWM模式循环周期结束中断;该位为0关闭使能 | 0 |
| 6 | bT3_IE_FIFO_OV | RW | 该位为1使能FIFO溢出中断;该位为0关闭使能 | 0 |
| 5 | bT3_IE_FIFO_REQ | RW | 该位为1使能捕捉模式FIFO>=4中断或者PWM模式FIFO<=3中断;该位为0关闭使能 | 0 |
| 4 | bT3_IE_ACT | RW | 该位为1使能捕捉模式输入信号激活中断或者PWM模式数据触发中断;该位为1关闭使能 | 0 |
| 3 | 保留 | R0 | 保留 | 0 |
| 2 | bT3_CAP_IN | R0 | 经过噪声过滤后的当前捕捉引脚的输入电平 | 1 |
| 1 | bT3_CAP_CLK | RW | 该位为1使能无最小脉宽限制的输入捕捉,只有当T3_CK_SE为1时有效,用于捕捉高速信号 | 0 |
| 0 | bT3_EN_CK_SE | RW | 该位为1使能访问时钟分频设置寄存器;该位为0使能访问当前计数寄存器 | 0 |
Timer3当前计数(T3_COUNT),仅当bT3_EN_CK_SE=0时有效:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T3_COUNT_H | RO | Timer3当前计数高字节 | 00h |
| [7:0] | T3_COUNT_L | RO | Timer3当前计数低字节 | 00h |
Timer3时钟分频设置寄存器(T3_CK_SE),仅当bT3_EN_CK_SE=1时有效:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T3_CK_SE_H | RW | Timer3时钟分频除数高字节,仅低4位有效,高4位固定为0 | 00h |
| [7:0] | T3_CK_SE_L | RW | Timer3时钟分频除数低字节 | 20h |
Timer3计数终值寄存器(T3_END):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T3_END_H | RW | Timer3计数终值高字节 | xxh |
| [7:0] | T3_END_L | RW | Timer3计数终值低字节 | xxh |
Timer3状态寄存器(T3_STAT):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bT3_IF_DMA_END | RW | DMA完成中断标志位,该位为1表示有中断;该位为0则无中断。写1清零或写T3_DMA_CN时清零 | 0 |
| 6 | bT3_IF_FIFO_OV | RW | 该位为1表示FIFO溢出中断;该位为0则无中断。写1清零 | 0 |
| 5 | bT3_IF_FIFO_REQ | RW | 该位为1表示请求FIFO数据中断标志位,捕捉模式下由FIFO>=4触发,PWM模式下由FIFO<=3触发;该位为0则无中断。写1清零 | 0 |
| 4 | bT3_IF_ACT | RW | 当bT3_IE_ACT=1时,该位为1表示捕捉模式输入信号激活中断或者PWM模式数据触发中断;该位为0无中断。写1清零或访问FIFO时清零 | 0 |
| 4 | bT3_IF_END | RW | 当bT3_IE_ACT=0时,该位为1表示捕捉模式计数超时中断或者PWM模式循环周期结束中断;该位为0则无中断。写1清零 | 0 |
| [3:0] | MASK_T3_FIFO_CNT | R0 | Timer3的FIFO当前计数 | 0000b |
Timer3控制寄存器(T3_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bT3_CAP_M1 | RW | Timer3捕捉边沿模式高位;PWM数据重复模式高位 | 0 |
| 6 | bT3_CAP_M0 | RW | Timer3捕捉边沿模式低位;PWM数据重复模式高位 | 0 |
| 5 | bT3_PWM_POLAR | RW | PWM模式下PWM输出极性控制位,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效 | 0 |
| 5 | bT3_CAP_WIDTH | RW | 捕捉模式下最小捕捉脉宽设置位,该位为0则至少4个分频时钟周期才有效,小于则忽略;该位为1则1个分频时钟周期即有效,小于则忽略 | 0 |
| 4 | bT3_DMA_EN | RW | 该位为1使能Timer3的DMA和DMA中断;为0关闭使能 | 0 |
| 3 | bT3_OUT_EN | RW | 该位为1使能Timer3的PWM输出;该位为0禁止 | 0 |
| 2 | bT3_CNT_EN | RW | 该位为1使能Timer3计数;该位为0暂停计数 | 0 |
| 1 | bT3_CLR_ALL | RW | 该位为1清空Timer3计数和FIFO,需要软件清零 | 1 |
| 0 | bT3_MOD_CAP | RW | Timer3模式选择位,该位为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_CN | RW | 当前DMA剩余计数,可预置初值,DMA操作后自动减少 | 00h |
DMA当前缓冲区地址(T3_DMA):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T3_DMA_AH | RW | 当前DMA地址高字节,可预置初值,DMA后自动增加,仅低4位有效,高4位固定为0,仅支持xRAM前4K | 0xh |
| [7:0] | T3_DMA_AL | RW | 当前DMA地址低字节,可预置初值,DMA后自动增加,仅高7位有效,最低位固定为0,仅支持偶地址 | xxh |
FIFO端口(T3_FIFO):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | T3_FIFO_H | RW | Timer3的FIFO高字节 | xxh |
| [7:0] | T3_FIFO_L | RW | Timer3的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_CYCLE | 9Fh | PWM循环周期寄存器 | xxh |
| PWM_CK_SE | 9Eh | PWM时钟分频设置寄存器 | 00h |
| PWM_CTRL | 9Dh | PWM控制寄存器 | 02h |
| PWM_DATA | 9Ch | PWM1数据寄存器 | xxh |
| PWM_DATA2 | 9Bh | PWM2数据寄存器 | xxh |
PWM2数据寄存器(PWM_DATA2):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | PWM_DATA2 | RW | 存储PWM2当前数据,PWM2输出有效电平的占空比=PWM_DATA2/PWM_CYCLE | xxh |
PWM1数据寄存器(PWM_DATA):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | PWM_DATA | RW | 存储PWM1当前数据,PWM1输出有效电平的占空比=PWM_DATA/PWM_CYCLE | xxh |
PPWM控制寄存器(PWM_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bPWM_IE_END | RW | 该位为1使能PWM循环周期结束或MFM缓冲区空中断 | 0 |
| 6 | bPWM2_POLAR | RW | 当bPWM_MOD_MFM=0时控制PWM2输出极性,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效 | 0 |
| 6 | bMFM_BUF_EMPTY | R0 | 当bPWM_MOD_MFM=1时,该位为1表示MFM缓冲区空 | 0 |
| 5 | bPWM_POLAR | RW | 控制PWM1输出极性,该位为0则默认低电平,高电平有效;该位为1则默认高电平,低电平有效 | 0 |
| 4 | bPWM_IF_END | RW | PWM循环周期结束中断标志位,该位为1表示有中断,写1清零或写PWM_CYCLE时清零或重新加载数据时清零 | 0 |
| 3 | bPWM_OUT_EN | RW | PWM1输出使能,该位为1使能PWM1输出 | 0 |
| 2 | bPWM2_OUT_EN | RW | 当bPWM_MOD_MFM=0时,该位为1使能PWM2输出 | 0 |
| 2 | bMFM_BIT_CNT2 | R0 | 当bPWM_MOD_MFM=1时表示当前MFM编码进度,该位为0表示正在处理低4位;为1表示处理高4位 | 0 |
| 1 | bPWM_CLR_ALL | RW | 该位为1清空PWM1和PWM2计数和FIFO,需要软件清零 | 1 |
| 0 | bPWM_MOD_MFM | RW | MFM编码模式使能,该位为0则为PWM模式;该位为1则为MFM模式 | 0 |
PWM时钟分频设置寄存器(PWM_CK_SE):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | PWM_CK_SE | RW | 设置PWM时钟分频除数 | 00h |
PWM循环周期寄存器(PWM_CYCLE):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | PWM_CYCLE | RW | 设置PWM循环周期,数值为00h时代表100h | xxh |
12.5 Timer功能
12.5.1 Timer0/1
- 设置T2MOD选择Timer内部时钟频率,如果bTn_CLK(n=0/1)为0,那么Timer0/1对应的时钟为Fsys/12;如果bTn_CLK为1,那么由bTMR_CLK=0或1选择Fsys/4或者Fsys作为时钟。
- 设置TMOD配置Timer的工作模式。
模式0:13位定时/计数器

图12.5.1.1 Timer0/1模式0
模式1:16位定时/计数器

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

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

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

图12.5.1.4 Timer0模式3
Timer2时钟输出模式:
参考16位重载定时/计数器模式,并且再设置T2MOD中的位T2OE为1,则使能从T2引脚输出TF2频率的二分频时钟。
Timer2串口0波特率发生器模式:
- 设置T2CON中的位C_T2为0选择使用内部时钟,也可置1选择T2引脚的下降沿作为时钟,根据需要设置T2CON中的位RCLK和TCLK为1或其中之一为1,选择串口波特率发生器模式。
- 设置T2MOD选择Timer内部时钟频率,如果bT2_CLK为0,那么Timer2的时钟为Fsys/4;如果bT2_CLK为1,那么由bTMR_CLK=0或1选择Fsys/2或者Fsys作为时钟。
- 设定RCAP2L和RCAP2H为定时器溢出后的重载值,设置TR2为1,开启Timer2。

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

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

图12.5.3.1 Timer3 16位定时器/PWM/捕捉
Timer3捕捉的数据格式:
Timer3可以用于捕捉信号的两个有效边沿之间的宽度,该宽度以分频后的时钟计数表示,捕捉过程中或者完成后,可以通过DMA或者直接读FIFO得到该宽度数据,数据为16位,最高位是标识位,低15位是宽度计数。启用信号捕捉后,每检测到一次有效边沿或者每次定时器溢出,都将产生一次数据,由于第一次有效边沿时产生的数据是从启用信号捕捉时起算的宽度,而不是两个有效边沿之间的宽度,所以捕捉得到的第一个数据通常会被舍弃。
-
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 -
bT3_CAP_M1和bT3_CAP_M0=10
同上,但是下降沿有效,捕捉从下升沿到下升沿的信号宽度,即下降沿激活。 -
bT3_CAP_M1和bT3_CAP_M0=01
任意边沿有效,捕捉从任意边沿到任意边沿的信号宽度,即电平变化激活。如果数据最高位为1,那么说明该宽度是高电平宽度,即从上升沿到下降沿;如果数据最高位为0,那么说明该宽度是低电平宽度,即从下降沿到上升沿。屏蔽掉最高位后的低15位是以分频时钟计数的宽度值。该模式下,建议将T3_END设置为较大的值,避免计时溢出,但不得超过15位有效数据。