HT66F3195包含 3 个 TM,每个 TM 可被划分为一个特定的类型,即简易型 TM, 标准型 TM 或周期型 TM。虽然性质相似,但不同 TM 特性复杂度不同。本章 介绍简易型,标准型和周期型 TM 的共性,更多详细资料参见HT66F3195 Datasheet。三 种类型 TM 的特性和区别见下表
基本上我们常用的定时器功能主要是定时和PWM输出。在定时功能三种定时器模块用法配置基本没有区别,我们就以CTM为例。来介绍定时器定时中断如何使用。
CTM的计数方式是向上计数。其计数器的值与CCRA或CCRP的值匹配就会发生中断。CTM的寄存器如下图所示:
基本定时器包含两个控制寄存器CTMC0和CTMC1。一对8位计数寄存器(CTMDH:CTMDL);一对CCRA匹配值寄存器(CTMAH:CTMAL);以及一个8位CCRP(CTMRP)匹配值寄存器组成。
控制寄存器 CTMC0:主要控制定时器的时钟。计数器的使能。
控制寄存器 CTMC1:主要控制定时器工作模式。
计数寄存器 (CTMDH:CTMDL):只读寄存器。记载16位计数器的值。
CCRA匹配值寄存器(CTMAH:CTMAL):匹配值寄存器。计数器的值等于该值就会发生匹配中断。
CTMRP匹配值寄存器(CTMRP):匹配值寄存器。计数器的值等于该值就会发生匹配中断。
CCRA匹配与CCRP匹配说明:
CTM定时器可以通过CTMC1寄存器选择匹配方式。当选择CCRA匹配 计数器的值与(CTMAH:CTMAL)相等会发生匹配中断;当选择CCRP匹配 计数器的值与(CTMRP)*256相等会发生匹配中断(CTMRP=0,计数器与65535匹配)。
即定时器定时时间 = 定时器计数周期*(CTMAH:CTMAL)或 = (CTMRP)*256。
定时器匹配中断配置流程2mS(500Hz)
1、设置定时器的时钟和配置计数器使能
_ctmc0 = 0x38; //Fctm = 16MHz/64=250K
2、设置定时器的模式为计数模式,并选择匹配方式
_ctmc1 = 0xc1; //选择计数模式,CCRA匹配
3、设置匹配值(注意:低位寄存器在前)
_ctmal = 0xF4; //500Hz = 250K/500
_ctmah = 0x01;
4、开启定时器中断
_ctmae = 1; //使能CTM中断
5、使能外设中断
_mf1e = 1; //使能外设中断
6、开启总中断
_emi = 1; //使能总中断
以上6步完成了CTM的初始化并开启了中断。中断服务函数如下
//CTM中断服务函数
void __attribute((interrupt(0x10))) CTM_ISR(void)
{
if(_ctmaf) //判断ctm A匹配标志位
{
_ctmaf = 0; //清除标志位
_500mscnt ++;
if(_500mscnt >= 250)
{
_500mscnt = 0;
if(_500msflag)_500msflag = 0;
else _500msflag = 1;
}
}
}
主函数调用
//LED1 每1秒闪烁1次
if(_500msflag)
{
LED1 = 1;
}else
{
LED1 = 0;
}
STM和PTM的配置也大致如此。CTM、STM、PTM的源码已上传:
合泰单片机HT66F3195定时器PWM例程资源-CSDN文库
代码在HT66F3195评估板上验证通过。有需要的可以自行购买: