编辑: huangshuowei01 | 2019-07-31 |
本文将 藉由 HT66F40 的16-bit STM (Standard TM) 说明 TM 的基本工作原理与使用注意事项,帮 助用户了解 TM 工作原理.不同类型的 TM 功能可能比 STM 有缩减、提升或有些微差异, 本文将作批注说明,读者可以自行参考 datasheet 内说明,进而灵活运用. 工作原理 TM与一般Timer的差异 单个一般 Timer 与单个 TM 差异如表
1 所示. 表1比较项目 单个一般 Timer 单个 TM 工作原理 以计数器的概念实现定时、 计 数或者脉冲宽度测量等功能. 比一般的 Timer 多了几组比较器,当计数器与比较器设定值匹配 时,根据不同模式执行相应的动作. 计数器
1 1: TMnDL/TMnDH CTM/STM/PTM 两组比较器: CCRA、CCRP 比较器 无ETM 三组比较器: CCRA、CCRP、CCRB 外部输入脚
1 1 : TCKn CTM/STM/PTM 两个输出脚: TPn_
0、TPn_1 外部输出脚 无ETM 三或四个输出脚: TPn1A、TPnB_
0、TPnB_
1、(TPnB_2) (1) 定时器/计数器模式 (2) 比较匹配输出模式 (3) 单脉冲输出模式 CTM 无此功能 (4) 脉冲宽度调制 (PWM) 输出模式 功能 (1) 定时器/计数器模式 (2) 脉冲宽度测量模式 (5) 捕捉输入模式 即脉冲宽度测量模式 CTM 无此功能 注:不同 TM 所配置的资源与功能差异请参考(附录)表9. 重点说明:TM 与传统 Timer 最大的不同在于 TM 是在当计数器与比较器设定值匹配时(即compare match) ,根据不同模式执行相应的动作.
1 HT66Fx0 Timer Module 工作原理与使用注意事项 Timer Module的五种工作模式 以下简单说明这五种工作模式的功能. 表2Mode 说明 定时器/计数器模式 即一般 Timer 的定时器/计数器模式, 当计数器发生比较匹配时, 产生系统中断. 比较匹配输出模式 即定时器/计数器模式于比较匹配时自动产生的输出信号. PWM 输出模式 利用 CCRA 与CCRP 控制 PWM 的占空比(Duty)与周期(Period). 单脉冲输出模式 产生一个符合比较器设定宽度的单脉冲信号. 捕捉输入模式 即一般 Timer 的脉冲宽度测量模式,当符合捕捉起始与终止条件时,会自动将 计数器值复制到 CCRA 中,使用者可以利用这两次数值的差与这段期间 CCRP 比较匹配产生的中断数计算出脉冲的宽度. TM相关寄存器 以下以 HT66F40 TM2 (16-bit STM) 为例说明需要设置的 TM 相关寄存器. 图1HT66F40 STM 方框图 TM 模块内部寄存器(如图
1 左边红色框内所示) . 表3相关寄存器 设置项目 TM2C0 设置 TM 暂停位,计数频率选择位,计数器 ON/OFF 位等 TM2C1 设置 TM 工作模式,输出控制,清除计数器方式等 TM2AH、TM2AL 即CCRA TM2RP 即CCRP 的高位 注: 1:不同的 TM,配置有不同数目的 TMnCx,如ETM 比其他 TM 多配置 TMnC2, 请参考表 9. 2:10-bit TM 的CCRP 的最高
3 位处于 TMnC0 的低三位,16-bit TM 的CCRP 高8位为独 立的一个寄存器控制,请参考表 10.
2 HT66Fx0 Timer Module 工作原理与使用注意事项 注意事项: 1. 计数器的内容 (TMnDL,TMnDH) 只能读不能写,在以下三个条件下会清零. (1) 当TnON 由0→1 时. (2) 当计数器满足 TnCCRL 设定内容时. (3) 当计数器溢出清零时. 2. 比较器匹配情况. TM 的比较器有三种类型,分别是 CCRP、CCRA 和CCRB.不同的比较器在满足匹配 条件的时候,就会有不同的动作产生. 表4匹配的 比较器 比较器所在的 TM 满足条件 PTM TMnDH=TMnRPH 且TMnDL=TMnRPL 16-bit CTM/STM/ETM 当较低的 8-bit 计数器进位时,才会比较 TMnRP 是否匹配 CCRP 10-bit CTM/STM/ETM 当较低的 7-bit 计数器进位时,才会比较 TnRP2~0 是否匹配 CCRA CTM/STM/ PTM /ETM TMnDH=TMnAH 且TMnDL=TMnAL CCRB ETM TMnDH=TMnBH 且TMnDL=TMnBL 3. 对于宽度 > 8-bit 的计数寄存器、比较寄存器,读写注意事项: (1) 先写入低字节,再写入高字节. (2) 先读出高字节,再读出低字节. 例如:先写入 TMnAL,再写入 TMnAH;
先读出 TMnAH,再读出 TMnAL. (2) 输入/输出引脚设置 (如图
1 右边蓝色框内) 表5相关寄存器 作用 以HT66F40 为例说明 CP1C 设置与 TM 输入/输出引脚共用的 比较器功能 图2中,要使用 TP2_0 需要先关闭 CP1 的功能. TMPC0/TMPC1 使能/除能 TM 的输入/输出脚 TMPC1 控制 TP2_0,TP2_1 输入/输出脚使能/除能. PRM0~PRM2 设置引脚重置寄存器 PRM0~2, 指定TM从哪一个I/O口输入/输出 TCK2PS ( PRM1[7] ) 控制 TCK2 由PC2/PD0 输入. TP21PS、TP20PS (PRM2[5:4]) 控制 TP2 由哪一只 I/O 口输出. PDPRM (PRM0[3]) 控制当TM2 的输入/输出脚与I2 C有 冲突时的引脚重置. TnPOL 控制输出是否要经过反相 0:不反相输出;
1:反相输出. 以PRM0~2 所选 的I/O 脚设置 当需要两个输出脚时可以控制两 个输出脚反相或者不反相输出 图3中蓝色方框表示除了 TnPOL 可以控制输出的极性 外,也可以通过更改 PRM0~2 所选的 I/O 脚设置. 图3中TP2_0 由PC3 输出,则PC3 也控制 TP2_0 的输 出极性.通过 PC3/PC4 可以控制 TP2_0/TP2_1 是否反 相/不反相输出,提供最大弹性的应用. 注:定时器/计数器模式不一定需要做输入/输出引脚设置.
3 HT66Fx0 Timer Module 工作原理与使用注意事项 重要说明:有共用功能的 I/O 脚其共用功能以标示于引脚名称上较右者 (通常都是 analog input) 具有较高优先级, 用户预计使用的功能如果优先等级较低, 应先 disable 较 高等级的功能, 否则无法得到预计的输出. 以HT66F40 28SKDIP 为例, TP2_0 与C1-共用引脚,C1-的优先等级较高,如欲使用 TP2_0,则必先 disable 比较器 1. 图2HT66F40 STM 的输出脚共用功能 图3HT66F40 STM 功能引脚控制
4 HT66Fx0 Timer Module 工作原理与使用注意事项 与TM有关的中断设置 下表以 HT66F40 TM2 (16-bit STM) 为例说明与中断相关的寄存器. 表6需要设置 的寄存器 作用 说明 注意事项 MFI0 (图4左边 红色部份) 使能/除能TM 的比较器 A 匹配、 比较 器P匹配中 断. TM 相关 MFIx 包含以下两种控制位: ? TnAE/TnPE:使能/除能 TMn 比较器 A/ 比较器 P 匹配中断. ? TnAF/TnPF:TMn 比较器 A/比较器 P 匹 配中断请求标志位. 1. 当TM 的多功能中断产生时,可 以查询 TnAF/TnPF 来判断是哪一 个比较器匹配产生的中断. 2. 当TnAF/TnPF=1 时,需要软件 清0,否则下一次 TM 中断无法进 入. INTC0 (图4右边 蓝色部份) 使能/除能TM 多功能中 断(1) TM 相关 INTCx 包含以下两种控制位. ? MFxE:使能/除能多功能中断 x. ? MFxF:多功能中断 x 请求标志位. (2) EMI:总中断控制. MFxF 在中断服务子程序被启动后 会自动清除. 注1:"x"为0或1. 注2:各种工作模式下是否需要进行中断设置,请参考表 8. 图4HT66F40 STM 功能引脚控制方框图
5 HT66Fx0 Timer Module 工作原理与使用注意事项 建议TM程序设置顺序 下表以 HT66F40 TM2 (16-bit STM) 为例说明. 表7建议 TM 程序设置顺序及说明 步骤 设置项目 HT66F40 TM2 相关寄存器/位1时钟源/模式设定 TMnC
0、TMnC1
2 比较器设定值 CCRA:TMnAL、TMnAH CCRP:TMnRP
3 输出设置 除能与 TM 输出引脚共用的比较器 TMPCx:输出引脚除能/使能 PRMx:设置引脚重置功能 设置所选定的 I/O 口:相位控制
4 中断设置 TnAE/TnPE MFxE、EMI
5 使能 TM TnON 注:步骤
1、2 是必要步骤,步骤
3、
4、5 视所选择的模式需要而定. TM 各种模式设置步骤: 表8TM 各种模式设置步骤 步骤 设置项目 定时器/计数 器模式 捕捉输入 模式 比较匹配 输出模式 PWM 输 出模式 单脉冲输 出模式
1 时钟源/模式设定
2 比较器设定值
3 输出设置
4 中断设置
5 使能 TM 注:" √ ":可设置;
" -- ":不需要设置. 建议实验方式 Holtek TM 建议实验方式如下: (1) 建议 MCU:HT66F40 内部有
1 个CTM、1 个STM 和1个ETM,同一个 MCU 就可以 进行
3 个TM 的实验,PTM 实验则可以使用 HT45F4M. (2) 实验不用外接电路:Holtek 新开发的 MCU 都提供内部 HIRC 与内部复位电路.只要利 用所选定 MCU 的e-ICE 或OCDS EV,并设置成内部 HIRC 提供系统频率与内部复位 电路,就可以不用外接电路. (3) 建议下载 Holtek 应用范例的示范程序并配合示波器进行实验. (4) 除错小秘方:如果因其它原因 (如程序不正确,笔误等等) 造成程序执行没有达到预期 效果,建议可以先观察 IDE3000 的寄存器窗口内 TMnDL 与TMnDH 是否变化,再进行 除错.
6 HT66Fx0 Timer Module 工作原理与使用注意事项 S/W流程图 以HT66F40 STM (TM2) 的定时器/计数器模式为范例的程序流程图. 主程序流程图 Start 设置 TM2C
0、TM2C1 设置 TM2AH、TM2AL 中断使能: T2AE/MF0E/EMI PB2设置为输出 T2ON=1 等待中断 清除T2CP0 中断子程序流程图
7 HT66Fx0 Timer Module 工作原理与使用注意事项 编程注意事项 程序说明 该程序以 HT66F40 STM (TM2)的定时器/计数器模式为例,定时时间结束后中断翻转 PB.2, 产生周期为 256us 的方波. 程序范例 ;
PROJECT CODE: HT66F40 STM Timer-Counter Mode Example ;
CONFIGURATION OPTION: ;
SysVolt : 5.0V ;
SysFreq : HIRC 4MHz ;
WDT : Enable / clear WDT: two instructions ;
I/O or Reset function: I/O ;
LVR function: Disable include HT66F40.inc include 66F40TM.inc Mode EQU Timer_Counter ;
Mode EQU Compare_Match_Output ;
Mode EQU PWM_output ;
Mode EQU Single_Pulse_Output ds .section 'data' if Mode==Timer_counter acc_backup db ? status_backup db ? endif cs .section 'code' org 0h jmp Begin if Mode==Timer_Counter org 14h jmp MF0_ISR ;
Multi-Function Interrupt Service Routine MF0_ISR: mov acc_backup, A mov A, status mov status_backup, A SNZ T2AF JMP MF0_ISR_EXIT mov A, PB xor A, 1