十五、定时器原理介绍
1. 定时器基础知识
1.1 什么是定时器
定时器是单片机内部集成,可以通过编程控制。单片机的定时功能是通过计数来实现的,当单片机每一个机器周期产生一个脉冲时,计数器就加一。定时器的主要功能是用来计时,时间到达之后可以产生中断,提醒计时时间到,然后可以在中断函数中去执行功能。比如我们想让一个led灯1秒钟翻转一次,就可以使用定时器配置为1秒钟触发中断,然后在中断函数中执行led翻转的程序。
1.2 CW32定时器
CW32F030C8T6一共有8个定时器,包括1个高级控制定时器、4个通用定时器和3个基本定时器。
1.3 高级定时器(ATIM)
高级定时器 (ATIM) 由一个 16 位的自动重载计数器和 7 个比较单元组成,并由一个可编程的预分频器驱动。ATIM支持 6 个独立的捕获 / 比较通道,可实现 6 路独立 PWM 输出或 3 对互补 PWM 输出或对 6 路输入进行捕获。可用于基本的定时 / 计数、测量输入信号的脉冲宽度和周期、产生输出波形(PWM、单脉冲、插入死区时间的互补PWM 等)。
高级定时器的主要特性如图所示。
关于更多高级定时器的功能描述可以查看用户手册的第252页。
1.4 通用定时器(GTIM)
CW32x030 内部集成 4 个通用定时器 (GTIM),每个 GTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装载计数器并由一个可编程预分频器驱动。GTIM 支持定时器模式、计数器模式、触发启动模式和门控模式 4 种基本工作模式,每组带 4 路独立的捕获 / 比较通道,可以测量输入信号的脉冲宽度(输入捕获)或者产生输出波(输出比较和 PWM)。
主要特性如图所示。
关于更多通用定时器的功能描述可以查看用户手册的第216页。
1.5 基本定时器(BTIM)
CW32x030 内部集成 3 个基本定时器 (BTIM),每个 BTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装载计数器并由一个可编程预分频器驱动。BTIM 支持定时器模式、计数器模式、触发启动模式和门控模式 4 种工作模式,支持溢出事件触发中断请求和 DMA 请求。得益于对触发信号的精细处理设计,使得 BTIM 可以由硬件自动执行触发信号的滤波操作,还能令触发事件产生中断和 DMA 请求。
主要特性如图所示。
2. 定时器基本参数
2.1 预分频
预分频器可以将定时器的时钟(TIMER_CK)频率按1到65536之间的任意值分频,分频后的时钟PSC_CLK驱动计数器计数。分频系数受预分频器TIMERx_PSC控制。这个控制寄存器带有缓冲器,它能够在运行时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 分频器的分频公式为:PSC_CLK = TIMER_CK/ (TIMERx_PSC +1)
2.2 向上计数模式
计数器从0开始向上连续计数到自动加载值(定义在TIMERx寄存器中),一旦计数器计数到自动加载值,会重新从0开始向上计数并产生上溢事件。
2.3 更新事件
更新事件是当计数器上溢或者下溢而开始新的计数周期时触发的。更新事件可以触发DMA请求,以用于在下一个计数周期开始时及时更新定时器的运行参数,特别适合用于实时控制。
3. 定时器应用
如果项目中需要定时执行或者需要重复执行一定的工作, 定时器的使用尤为重要。在下一章将会介绍如何去配置定时器,定时1秒钟进入一次中断,然后在定时器中断服务函数中实现1秒钟led电平状态翻转1次。最后实现的效果就是led亮1秒钟灭1秒钟。