HT66F70A芯片的定时器与51的定时器有很大的不同,我花费了很大的功夫才把HT66F70A的定时器弄清楚,下面是总结。
HT66F70A单片机包含 6 个TM,分别命名为TM0~TM5。每个TM 可被划分为一个特定的类型,即简易型CTM,标准型STM 或增强型ETM。此单片机的定时器除了有定时功能以外,还有其他的功能,具体见下表
功能 | CTM | STM | ETM |
---|---|---|---|
定时/计数器 | √ | √ | √ |
捕捉输入 | - | √ | √ |
比较匹配输出 | √ | √ | √ |
PWM通道数 | 1 | 1 | 2 |
单脉冲输出 | - | 1 | 1 |
PWM对齐方式 | 边沿对齐 | 边沿对齐 | 边沿& 中心对齐 |
PWM 调节周期& 占空比 | 占空比或周期 | 占空比或周期 | 占空比或周期 |
TM0 | TM1 | TM2 | TM3 | TM4 | TM5 |
10-bit CTM | 10-bit ETM | 16-bit STM | 10-bit CTM | 16-bit STM | 16-bit STM |
下面以简易TM寄存器为例总结此单片机定时器的特点,只要弄清楚了定时器的特点,后面的标准TM和增强TM也都会操作了。
Name | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
TMnC0 | TnPAU | TnCK2 | TnCK1 | TnCK0 | TnON | TnRP2 | TnRP1 | TnRP0 |
TMnC1 | TnM1 | TnM0 | TnIO1 | TnIO0 | TnOC | TnPOL | TnDPX | TnCCLR |
TMnDL | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TMnDH | - | - | - | - | - | - | D9 | D8 |
TMnAL | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TMnAH | - | - | - | - | - | - | D9 | D8 |
其中,TMnDL和TMnDH这两个寄存器属性为只读,其他的寄存器为可读可写。下面简单说明各个标志位的作用,如想看详细资料请查芯片手册。
TnPAU:TMn 计数器暂停控制位
通过设置此位为高可使计数器暂停,清零此位恢复正常计数器操作。
TnCK2~TnCK0:选择TMn 计数时钟位
此三位用于选择TM 的时钟源。
TnON:TMn 计数器On/Off 控制位
此位控制TM 的总开关功能
TnRP2~TnRP0:TMn CCRP 3-bit 寄存器,对应于TMn 计数器bit 9~bit 7 比较器P 匹配周期
此三位设定内部CCRP 3-bit 寄存器的值,然后与内部计数器的高三位进行比较。
TnM1~TnM0:选择TMn 工作模式位
TnIO1~TnIO0:选择TPn,TPnB 输出功能位
TnOC:TPn,TPnB 输出控制位
TnPOL:TPn,TPnB 输出极性控制位
TnDPX:TMn PWM 周期/ 占空比控制位
在使用定时器功能的时候,以上五个标志位不起作用,所以可以暂时忽视。
TnCCLR:选择TMn 计数器清零条件位
此位用于选择清除计数器的方法:
TnCCLR 位设为高,计数器在比较器A 比较匹配发生时被清除;
此位设为低,计数器在比较器P 比较匹配发生或计数器溢出时被清除。
TM0初始化程序
void Tm0Init(void)
{
uint16 time0 = 200; //设置为200个周期,time0为中间变量
_t0ae = 1; //使能比较器A中断
// _t0pe = 1;<span style="white-space:pre"> </span>//使能比较器P中断,这里用不到
_mf0e = 1; //使能多功能中断
_emi = 1; //开总中断
_tm0al = time0 & 0xff; //给比较器A的低8位(D7~D0)赋值
_tm0ah = time0 >>8; //给比较器A的高8位(D9~D8)赋值
_tm0c0 = TnCK_fsys4 | TnON_ON; //选择系统时钟/4作为时钟源,并打开TM控制位
_tm0c1 = TnM_TIMER | TnCCLR_A; //定时器功能设置,选择与比较器A匹配
_t0pau = 0; //运行
}
下面简单说明这个初始化后发生的事情,当定时运行的时候,TMnDL(n=0,1,2...)和TMnDH会从0开始自动加1,直到和比较器A(TMnAL寄存器和TMnAH寄存器)所设置的数值相等的时候,就会产生中断,最后进入中断服务程序。
2017年4月5日补充:
由于博主很久不碰合泰芯片,很多细节已经忘记,所以如果调试不成功博主也已经帮不上忙了,本文评论博主不再回复。
另外根据以往评论,调试合泰芯片请留意以下细节,说不准就debug了。
1、看门狗是否除能;
2、编译器优化是否关闭;