您好,欢迎访问三七文档
LOGO1第七章定时部件LOGO7定时部件定时器或计数器的逻辑电路本质上是相同的,它们之间的区别主要在用途上。定时器的计数信号是由内部的、周期性的时钟信号承担,以便产生具有固定时间间隔的脉冲信号,实现定时的功能。计数器的计数信号是由非周期性的信号承担,通常是外部事件产生的脉冲信号,以便对外部事件发生的次数进行计数。系统时钟M分频外部事件脉冲N位计数器=0定时器和计数器都是主要由带有保存当前值的寄存器和当前寄存器值加1或减1逻辑组成。LOGO7.2看门狗定时器S3C2440芯片看门狗定时器的作用:当系统程序出现功能错乱,引起系统程序死循环时,能中断该系统程序的不正常运行,恢复系统程序的正常运行。嵌入式系统由于运行环境的复杂,既所处环境中有较强的干扰信号,或者系统底层程序本身的不完善,因而,不能排除系统程序不会出现死循环现象。LOGOS3C2440芯片的看门狗定时器有2种工作模式:·带中断请求信号的常规时隙定时器。·产生内部复位信号的定时器,即当定时器中的计数器值变为0时,产生一个宽度为128个PCLK(系统时钟周期)的复位脉冲信号。看门狗定时器逻辑功能框图如下:LOGOS3C2440芯片的看门狗定时器逻辑中含有3个控制其操作的专用寄存器:看门狗控制寄存器(WTCON)计数常数寄存器(WTDAT)看门狗计数器寄存器(WTCNT)LOGO(1)看门狗控制寄存器(WTCON)用来控制看门狗定时器是否允许工作。其内容是可读/写的LOGO(2)计数常数寄存器(WTDAT)计数常数寄存器用来存储看门狗定时器的溢出时间间隔值,既从定时器的计数器开始工作,到计数器值变为0的时间间隔。计数常数通过下面公式计算求得:计数常数=所需时间间隔/计数时钟周期=所需时间间隔×(PCLK/(预分频器值+1)/分割因子)LOGO(3)看门狗计数器寄存器(WTCNT)看门狗计数器寄存器正常情况下用作减1计数器,它对计数时钟信号进行减1计数,既每来一个计数时钟脉冲,计数器内的值减1。WTCNT寄存器在看门狗定时器工作时存储当前计数值。LOGO示例7-1若一个采用S3C2440芯片为核心开发的嵌入式系统需要看门狗功能,监测系统程序的周期不大于40us,PCLK=50MHz。那么,我们需要使用下面一段程序来完成初始化看门狗:ldrr0,=WTDAT;WTDAT寄存器对应的地址赋给R0ldrr1,=0x7d;计数器初始值strr1,[r0]ldrr0,=WTCON;WTCON寄存器对应的地址赋给R0ldrr1,=0x0021;使能看门狗及其复位功能,分割器值设为16strr1,[r0]LOGO7.3RTC部件实时时钟部件RTC是用于提供年、月、日、时、分、秒、星期等实时时间信息的定时部件。它通常在系统电源关闭后,由后备电池供电。RTC部件的主要特点有:·年、月、日、时、分、秒、星期等信息采用BCD码表示。·闰年发生器。·具有报警功能,能提供报警中断或者系统在节电模式下的唤醒。·拥有独立的电源引脚(RTCVDD)。·支持RTOS内核时间片所需的毫秒计时中断。·进位复位功能。LOGOLOGORTC的时间片计时器用于产生一个中断请求,TICNT寄存器有一个中断使能位,和计数器中的值一起用来控制中断。当计数器的值变为0时,引起时间片计时中断。中断信号的周期用下列公司计算:周期=(n+1)/128s上式中,n代表时间片计数器中的值,范围是1~127。RTC的时间片计时器可以用来产生实时操作系统内核所需的时间片。LOGORTC部件内部有许多用于控制其操作的寄存器。通过编程对这些寄存器进行设定,用户就可以控制RTC部件的工作。(1)RTC控制寄存器(RTCCON)【0x57000040】LOGO(2)时间片计数器(TICNT)时间片计数器中的值计算公式:n=周期×128s–1n值的范围是:1~127除了上述的寄存器,还有年、月、日等数值寄存器,其格式请参考教材。LOGO应用示例RTC部件的主要功能是产生实时时间,提供年、月、日、时、分、秒等信息。在使用RTC部件之前,需要对其进行初始化。并完成对RTC内部寄存器读取/写入操作。具体的应用程序代码示例请参考教材的7.3.3节。LOGO7.4Timer部件Timer部件主要是用于提供定时功能、脉宽调制(PWM)功能的部件,它的应用比较灵活,对于需要一定频率的脉冲信号、一定时间间隔的定时信号的应用场合,它都能提供应用支持。S3C2440芯片内部拥有5个16位的Timer部件:Timer0,Timer1,Timer2,Timer3具有脉宽调制(PWM)功能。Timer4仅作定时器用,不具有PWM功能。LOGOTimer部件内部功能框图:LOGO定时器结构图预分频器8位分频器1/21/41/81/16TCLK0/1计数器观察寄存器比较寄存器PCLK五选一开关初值寄存器控制逻辑TOUT中断LOGO2、工作原理(1)定时器工作过程装入初值、启动计数,计数结束产生中断请求,并且可以重装初值连续计数。如下图所示。LOGO(2)初值自动重装、手动装载和双缓冲初值自动重装功能:5个定时器都具有此功能。当计数器中值减到0后,若设置了自动重装功能,则在下一计数周期开始前将初值装入计数器重新计数。初值手动装载功能:在启动计数前,必须使用手动装载功能将初值装入计数器,而初值自动重装仅是一次计数结束后重新装入初值。双缓冲功能:如果定时器正在工作,此时写入新的数据到TCNTBn、或者到TCMPBn,该写入的数据不影响本次定时器的操作。当定时器到达0后下一次运行定时器时,新写入的TCNTBn、或者TCMPBn才生效。LOGO(3)PWM输出寄存器TCMPB的作用:当计数器TCNT中的值减到与TCMPB的值相同时,TOUT的输出值取反。改变TCMPB的值,便改变了输出方波的占空比。TOUT的输出可以设置为反相输出,如下图所示。正向输出正向输出反相输出周期开始LOGO(4)死区产生器死区的概念:是一小段时间间隔,在这个时间间隔内,禁止两个开关同时处于开启状态。死区是在功率设备控制中常采用的一种技术,防止两个开关同时打开起反作用。S3C2410的timer0具有死区发生器功能,可用于控制大功率设备。死区发生器开启前后输出波形对比LOGO3、计数时钟和输出计算1)定时器输入时钟频率fTclk(即计数时钟频率):fTclk=[fpclk∕(Prescaler+1)]×分频值式中:Prescaler,预分频值,0---255;分频值为1/2、1/4、1/8、1/16。2)PWM输出时钟频率:PWM输出时钟频率=fTclk∕TCNTBn3)PWM输出信号占空比(即高电平持续时间所占信号周期的比例):PWM输出信号占空比=TCMPBn∕TCNTBnLOGO定时器专用寄存器共有6种、17个寄存器TCNTBn---Timern计数初值寄存器(计数缓冲寄存器),16位TCMPBn---Timern比较寄存器(比较缓冲寄存器),16位TCNTOn---Timern计数读出寄存器,16位RegisterAddressR/WDescriptionResetValueTCFG00x51000000R/W配置寄存器00x00000000TCFG10x51000004R/W配置寄存器10x00000000TCON0x51000008R/W控制寄存器0x00000000TCNTBn0x510000xxR/W计数初值寄存器(5个)0x0000TCMPBn0x510000xxR/W比较寄存器(4个)0x0000TCNTOn0x510000xxR观察寄存器(5个)0x0000LOGODeadzonelength---死区宽度设置位其值N为:0~255,以timer0的定时时间为单位死区宽度为:(N+1)×timer0的定时时间Prescaler1---timer2、3、4的预分频值其值N为:0~255输出频率为:PCLK÷(N+1)Prescaler0---timer0、1的预分频值其值N为:0~255输出频率为:PCLK÷(N+1)1、TCFG0---预分频器配置寄存器31……2423……1615……87……0保留(为0)DeadzonelengthPrescaler1Prescaler0LOGO2、TCFG1---DMA模式与分频选择寄存器DMAmode---DMA通道选择设置位0000:不使用DMA方式,所有通道都用中断方式0001:选择timer00010:选择timer10011:选择timer20100:选择timer30101:选择timer4011X:保留MUX4~MUX0---timer4~timer0分频值选择0000:1/20001:1/40010:1/80011:1/1601XX:选择外部TCLK0、1(对timer0、1是选TCLK0,对timer4、3、2是选TCLK1)31…2423…2019…1615…1211…87…43…0保留(为0)DMAmodeMUX4MUX3MUX2MUX1MUX0第14讲到此LOGOTL4~TL0---计数初值自动重装控制位0:单次计数1:计数器值减到0时,自动重新装入初值连续计数。TUP4~TUP0---计数初值手动装载控制位。0:不操作1:立即将TCNTBn中的计数初值装载到计数寄存器TCNTn中。说明:如果没有执行手动装载初值,则计数器启动时无初值。121110987…543210TR2TL1TO1TUP1TR1保留DZETL0TO0TUP0TR03、TCON---定时器控制寄存器31…2322212019181716151413保留TL4TUP4TR4TL3TO3TUP3TR3TL2TO2TUP2LOGOTR4~TR0---TIMER4~TIMER0运行控制位0:停止1:启动对应的TIMERTO3~TO0---TIMER4~TIMER0输出控制位0:正相输出1:反相输出DZE---TIMER0死区操作控制位0:禁止死区操作1:使能死区操作121110987…543210TR2TL1TO1TUP1TR1保留DZETL0TO0TUP0TR03、TCON---定时器控制寄存器(续)31…2322212019181716151413保留TL4TUP4TR4TL3TO3TUP3TR3TL2TO2TUP2LOGO四、定时器的使用1、定时器初始化方法(1)写TCFG0,设置计数时钟的预分频值和Timer0死区宽度;(2)写TCFG1,选择各个定时器的分频值和DMA、中断服务;(3)对TCNTBn和TCMPBn分别写入计数初值和比较初值;(4)写TCON,设置计数初值自动重装、手动装载初值、设置反相输出;(5)再写TCON,清除手动装载初值位、设置正相输出、启动计数。2、定时器停止运行方法写TCON,禁止计数初值自动重装。(一般不使用运行控制位停止运行)LOGO3、定时器操作例子(1)按照前面初始化定时器;设置TCNTBn=160(50+110),TCMPBn=110;手动装入初值后,又重设TCNTBn=80,TCMPBn=40;(2)启动定时器,按第一个初值计数;(3)与第一个比较值相同,输出取反;(4)第一次计数结束,自动重装初值80、40;(5)在第一次中断处理程序又重设TCMPBn=60;(8)在第二次中断处理程序禁止自动重装初值,准备结束计数;(10)第三次计数结束,不再计数。501104040206012346791058TOUTnLOGO定时器应用举例#defineBIT_TIMER0(0x110)intvariable0,variable1,variable2,variable3,variable4;void__irqTimer0Done(void){rSRCPND=BIT_TIMER0;//ClearpendingbitrINTPND=BIT_TIMER0;//Clearservebitvariable0++;}void__irqTimer1Done(void){
本文标题:第7章定时部件.
链接地址:https://www.777doc.com/doc-2154076 .html