首页 理论教育 嵌入式技术及应用:定时功能与双缓冲特性详解

嵌入式技术及应用:定时功能与双缓冲特性详解

时间:2023-11-08 理论教育 版权反馈
【摘要】:定时器输入时钟频率=PCLK/{预分频值+1}/{分频值}(7-1)S3C2410A的定时器有一个双缓冲功能,这个功能可以在不停止定时器工作的前提下为下一次定时操作装载初始值。2)为相应的定时器设置手动更新位。图7-2 定时器操作实例的输出信号波形1)使能自动重装载功能。5)在中断服务程序中,TCNTBn和TCMPBn的值被分别设置为80和60,这两个值是下一个定时技术周期的值。

嵌入式技术及应用:定时功能与双缓冲特性详解

定时器的定时时钟频率由式(7-1)来确定。其中PCLK如何确定在第6章时钟与电源管理部分有具体描述,预分频值和分频值分别由寄存器TCFG0和TCFG1来确定。

定时器使用之前需要进行初始化。首先根据需要定时的时间设定寄存器TCNTBn和TC- MPBn的值。然后置位寄存器TCON中的手动更新位,将TCNTBn和TCMPBn的值复制到内部寄存器TCNTn和TCMPn中。上述配置结束后,置位相应定时器的启动位启动定时器,并清零手动更新位。如果定时器中断被允许,当TCNTn的值为0时,定时器向CPU发出中断请求。

定时器输入时钟频率=PCLK/{预分频值+1}/{分频值}(7-1)

S3C2410A的定时器有一个双缓冲功能,这个功能可以在不停止定时器工作的前提下为下一次定时操作装载初始值。新的定时值可以写入到定时计数缓冲寄存器(TCNTBn)中,当前定时器的计数值可以从定时器观察寄存器(TCNTOn)中读出。如果去读寄存器TCNT- Bn,得到的值是下一次定时器的计数值,而不是当前定时器的计数状态。自动重装载操作在TCNTn=0时,将TCNTBn的值复制到TCNTn中。写入到TCNTBn中的值,仅当TCNTn=0且自动重装载功能是使能状态时,才会被复制到寄存器TCNTn中。

下面给出定时器初始化的具体操作。

当定时计数器的值为0时进行自动重装载操作。所以,TCNTn的初始值应由用户在初始时给予定义。在这种情况下,新的计数值由手动更新比特位来进行装载。以下为开始一个定时器操作的具体步骤。

1)为寄存器TCNTBn和TCMPBn写初始值。

2)为相应的定时器设置手动更新位。无论使不使用反转控制位,建议用户要对这一位进行设置。

3)置位定时器开始位并清零手动更新位启动定时器。

举一个实例来说明定时器的操作。图7-2给出了定时器操作实例的输出信号波形。

978-7-111-41590-9-Chapter07-2.jpg

图7-2 定时器操作实例的输出信号波形(www.xing528.com)

1)使能自动重装载功能。设置TCNTBn的值为160(50+110),并且设置TCMPBn的值为110。置位手动更新位并设置反转控制位。置位手动更新位后,TCNTn=TCNTBn、TC- MPn=TCMPBn。接下来,设置TCNTBn的值为80(40+40),TCMPBn的值为40,这两个值为下一个定时周期的值。

2)置位启动位,清零手动更新位,将反转控制位关闭,自动重在功能打开。在一定的延迟之后定时器开始进行减技术操作。

3)当TCNTn的值和TCMPn的值相同时,TOUT的逻辑电平值就会从低电平变为高电平

4)当TCNTn的值变为0值时,定时器发出中断请求且TCNTBn的值被装载到一个临时的寄存器中。在下一个定时操作周期中,TCNTn的值用临时寄存器的值(TCNTBn)来装载。

5)在中断服务程序中,TCNTBn和TCMPBn的值被分别设置为80(20+60)和60,这两个值是下一个定时技术周期的值。

6)当TCNTn的值与TCMPn的值相同时,TOUT的逻辑电平值会从低电平变为高电平。

7)当TCNTn的值为0时,TCNTn自动用TCNTBn的值来装载并且产生一个中断请求。

8)在中断服务函数中,自动重装载和中断请求都被屏蔽而关闭定时器。

9)当TCNTn和TCMPn的值相同时,TOUT的逻辑电平值从低电平变为高电平。

10)即使TCNTn的值变为0,TCNTn也不会再次重装载并且定时器已经停止。

11)没有中断请求会再次产生。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈