定时器原理(包含软定时器设计)_第1页
定时器原理(包含软定时器设计)_第2页
定时器原理(包含软定时器设计)_第3页
定时器原理(包含软定时器设计)_第4页
定时器原理(包含软定时器设计)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章定时器PWM定时器本章目标2440PWM定时器的基本操作定时器中断操作软定时器的封装特性–五个16位定时器–两个8位预分频器和两个4位分频器–可编程输出波形的占空比控制(PWM)–自动重载模式或单脉冲模式–死区发生什么是定时器定时器的本质就是一个递减的计数器,根据触发条件在计数器的值达到触发条件的时候,触发事件的发生。特性概述S3C2440A有5个16位定时器。其中定时器0、1、2和3具有脉宽调制(PWM)功能。定时器4是一个无输出引脚的内部定时器。定时器0还包含用于大电流驱动的死区发生器。定时器0和1共用一个8位预分频器,定时器2、3和4共用另外的8位预分频器。每个定时器都有一个可以生成5种不同分频信号(1/2,1/4,1/8,1/16和TCLK)的时钟分频器。每个定时器模块从相应8位预分频器得到时钟的时钟分频器中得到其自己的时钟信号。8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK。功能框图定时器0定时器1定时器2定时器3定时器4比定时器4多了具有脉宽调制(PWM)功能无输出引脚内部定时器比定时器1多了死区发生器步骤1:配置预分频器和分频值(TCFG0,TCFG1)目的产生一定的定时器时钟周期时钟频率计算公式:定时器输入时钟频率=PCLK/{预分频值+1}/{分频值}TCFGn定时器配制寄存器0(TCFG0)位[7:0]、位[15:8]分别用于控制预分频器0、1,范围0~255。经过预分频器出来的始终频率:PCLK/{预分频值+1}定时器配制寄存器1(TCFG1)经过预分频器的始终将被2、4、8、16分频

示例:假设PCLK=50M,预分频值=249,分频值=8 时钟频率=50M/(249+1)/8=25Khz时钟周期=1/25KHZ=40usTCFG0定时器配制寄存器0(TCFG0)TCFG1定时器配制寄存器1(TCFG1)步骤2:配置计数初始值(TCNTBn)目的产生一个计数初始值(注意:这里暂没有设置比较值,不产生PWM脉冲控制)初始值计算公式:初始值=定时时间/时钟周期问:假设时钟周期已设置40us,若要定时500ms产生一次中断,初始值等于多少?初始值=500ms/40us=12500TCNTBn、TCMPBn定时器计数寄存器和比较寄存器(TCNTB0/TCMPB0)步骤3:把初始值装载进内部TCNTn过程:设置TCON寄存器的手动更新位,当给TCON寄存器的手动更新位置1,即将TCNTB0寄存器的值装入内部寄存器TCNT0(注意:第一次要手动更新)TCON功能位设置手动更新10:无用1:将TCNTB0/TCMPB0寄存器的值装入内部寄存器TCNT0/TCMP0步骤4:设置自动装载,并清除手动更新目的:第一次手动更新后,TCNTn有计数值,但是当计数到0时,没有再给TCNTBn赋值就不会再计数,所以设置自动装载(注意:设置自动装载后,要把手动更新清除)自动重载S3C2440APWM定时器包含双缓冲功能,允许在不停止当前定时器操作的情况下为下次定时器操作改变重载值。所以即使设置了新的定时器值,当前定时器操作仍然顺利的被完成。定时器值可以被写入到定时器计数缓冲寄存器(TCNTBn)中并且可以从定时器计数监视寄存器(TCNTOn)中读取当前定时器的计数值。如果读取TCNTBn,读出的值不是指示当前计数器的状态而是下次定时器持续时间的重载值。自动重载操作在TCNTn到达0时复制TCNTBn到TCNTn。如果需要改变TCNTBn,需执行手动更新。TCNTBn的值,只有在TCNTn到达0并且使能了自动重载时才被加载到TCNTn。如果TCNTn变为0并且自动重载位为0,TCNTn不会进一步任何操作。TCON功能位设置开启/停止00:停止定时器1:开启定时器手动更新10:无用1:将TCNTB0/TCMPB0寄存器的值装入内部寄存器TCNT0/TCMP0自动加载30:不自动加载1:在定时器0计数达到0时,将TCNTB0/TCMPB0寄存器的值自动装入内部寄存器TCNT0/TCMP0步骤5:注册定时器中断服务函数并开启定时器中断

步骤6:开启定时器功能位设置开启/停止00:停止定时器1:开启定时器要使用PWM脉宽调试的方法在原来的步骤2(配置计数初始值--TCNTBn)时,同时配置TCMPBn,并设置TCON的输出反转PWMTCON功能位设置开启/停止00:停止定时器1:开启定时器手动更新10:无用1:将TCNTB0/TCMPB0寄存器的值装入内部寄存器TCNT0/TCMP0输出反转20:TOUT0不反转;1:TOUT0反转自动加载30:不自动加载1:在定时器0计数达到0时,将TCNTB0/TCMPB0寄存器的值自动装入内部寄存器TCNT0/TCMP0内部结构一个定时器(除了定时器4)包含TCNTBn,TCNTn,TCMPBn和TCMPn。(TCNTn和TCMPn是内部寄存器的名称。从TCNTOn寄存器中可以读取TCNTn)当定时器到达0时TCNTBn和TCMPBn被加载到TCNTn和TCMPn中。当TCNTn到达0时,如果中断为使能则将发生一个中断请求。内部工作流程定时器内部控制逻辑工作流程:程序初始化,设定TCMPBn、TCNTBn这两个寄存器,他们表示定时器n的比较值、初始计数值。随之设置TCON寄存器启动定时器n,这是TCMPBn、TCNTBn的值将被装入其内部寄存器TCMPn、TCNTn中。在定时器n的工作频率下,TCNTn开始计数,其值可以通过读取TCNTOn寄存器获得。当TCNTn的值等于TCMPn的值时,定时器n的输出管脚TOUTn反转;TCNTn继续减1计数。当TCNTn的值到达0时,其输出管脚TOUTn再次反转。并触发定时器的中断(假设中断使能)当TCNTn的值到达0时,如果TCON寄存器中将定时器n设为“自动加载”,则TCMPBn和TCNTBn寄存器的值被自动装入TCMPn和TCNTn中,下一个计数流程开始。PWM假设设置TCNTBn为150,设置TCMPBn为100。置位手动更新位并且配制变相位(开/关),开启自动装载,清除手动更新位后,开启定时器,则输出波形如下:工作原理定时计数缓冲寄存器(TCNTBn)包含了一个(当定时器被使能时)被加载到递减计数器中的初始值。定时比较缓冲寄存器(TCMPBn)包含了与递减计数器相比较的初始值。这种TCNTBn和TCMPBn的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。每个定时器有它自己的由定时器时钟驱动的16位递减计数器。当递减计数器到达零时,产生定时器中断请求通知CPU定时器操作已经完成。当定时器计数器到达零时,相应的TCNTBn的值将自动被加载到递减计数器以继续下一次操作。然而,如果定时器停止了,例如,在定时器运行模式期间清除TCONn的定时器使能位,TCNTBn的值将不会被重新加载到计数器中。TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定时器控制逻辑改变输出电平。因此,比较寄存器决定PWM输出的开启时间(或关闭时间)。过程分析1.使能自动重载功能。设置TCNTBn为160(50+110)并且设置TCMPBn为110。置位手动更新位并且配制变相位(开/关).手动更新位分别设置TCNTn和TCMPn到TCNTBn和TCMPBn的值中。然后分别设置TCNTBn和TCMPBn为80(40+40)和40,以决定下次重载值。2.设置启动位,预设手动更新位为0,变相位为关,自动重载位为开。定时器在定时器分辨率内的等待时间后启动递减计数。3.当TCNTn与TCMPn的值相同时,TOUTn的逻辑电平从低电平变为高电平。过程分析4.当TCNTn到达0时,发出中断请求并且TCNTBn的值加载到暂存器中。在下一个定时器标记时刻,重载TCNTn为暂存器(TCNTBn)的值。5.中断服务程序(ISR)中,为下一个持续时间分别设置TCNTBn和TCMPBn为80(20+60)和60。6.当TCNTn与TCMPn的值相同时,TOUTn的逻辑电平从低电平变为高电平。7.当当TCNTn到达0时,触发一个中断自动重载TCNTn为TCNTBn的值。8.中断服务程序(ISR)中,禁止自动重载和中断请求以停止定时器。9.当TCNTn与TCMPn的值相同时,TOUTn的逻辑电平从低电平变为高电平。10.尽管TCNTn到达0,但因为禁止了自动重载,所以TCNTn并不会再次重载并且定时器已经停止了。11.不再产生中断请求。配置定时器流程选择一个定时器(0,1,2,3,4)设置预分频值(TCFG0)设置分频值(TCFG1)设置计数初始值(TCNTBn)设置TCON(手动更新,自动加载)清除TCON的手动更新开启定时器开启定时器中断(定时器中断使能)注册定时器中断服务函数代码分析rTCFG0&=0xFF00FF;rTCFG0|=0xf900;//prescaler等于249rTCFG1&=~0xF0000;rTCFG1|=0x20000;//divider等于8,则设置定时器4的时钟频率为25kHzrTCNTB4=12500;//让定时器4每隔0.5秒中断一次

rTCON&=~0xF00000;rTCON|=0x700000;rTCON&=~0x200000;//定时器4开始工作硬件驱动硬件接口函数:1、intTIMER_Init(intnTimerID,intnDiv0,intnDiv1)//配置预分频比2、intTIMER_Create(......)//配置定时器3、intTIMER_Destory(intnTimerID)//注销定时器中断4、voidTIMER_Start(intnTimerID)//启动定时器5、voidTIMER_Stop(intnTimerID)//停止定时器软定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论