资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二十二讲,PWM,与定时器,河南大学,计算机与信息工程学院,授课人:金勇,联系电话,:,13598785920,Email,:,jy,计算机专业核心课程之一,S3C2410,内部的,PWM,定时器,PWM,周期恒定,,高电平宽度(占空比)可调,的方波脉冲(,Pulse Width Modulation,),5,个,16,位定时器,;,定时器,0,定时器,3,具有输出,PWM,(脉宽调制)脉冲信号的功能,;,定时器,0,内部有,“,死区,”,产生器,,可用于驱动大电流设备,;,所谓利用,“,死区,”,驱动大电流设备,是指需要交替开、关两台设备时,能保证前一台设备关掉后,经过一段时间间隙、即所谓,“,死区,”,后,再开通后一台设备,保证不会出现两台设备同时打开,哪怕是瞬间的同时打开,。,每个定时器按,减计数方式,工作,当减到,0,时,可选择自动重装模式,也可选择单次触发模式。,S3C2410,内部的,PWM,定时器,内部结构,时钟信号的选择,时钟源,PCLK,的分频处理,PCLK,主时钟信号作为定时器原始的时钟信号,分别经过两个,8,位预分频器,(预分频器,0,和预分频器,1,)进行分频,分频值的取值范围为:,1,256,。有两个时钟信号除法器,分别称为除法器,0,和除法器,1,。除法器,0,接收预分频器,0,的输出信号,除法器,1,接收预分频器,1,的输出信号。两个除法器各自输出,4,种信号,分别是对预分频器输出信号的,2,、,4,、,8,、,16,分频信号,。,每个定时器前端有一个,5,选,1,的多路开关,,分别称为时钟多路器,0,、时钟多路器,1,、时钟多路器,2,、时钟多路器,3,、时钟多路器,4,。,时钟多路器,0,与时钟多路器,1,可选择接通,5,种信号(除法器,0,输出的,4,种分频信号和,TCLK0,信号)之一分别作为定时器,0,与定时器,1,的输入时钟信号;,时钟多路器,2,、时钟多路器,3,与时钟多路器,4,可选择接通,5,种信号(除法器,1,输出的,4,种分频信号和,TCLK1,信号)之一分别作为定时器,2,、定时器,3,与定时器,4,的输入时钟信号。,时钟信号的选择,时钟信号分频处理与选择的实现,两个分频器中的分频值通过配置寄存器,TCFG0,实现,每个时钟多路器选择哪一种输入时钟信号,通过配置寄存器,TCFG1,实现。,时钟信号的选择,输出,PWM,波形,(,1,),16,位计数器,TCNTn,(,n=0,、,1,、,2,、,3,、,4,),减法计数器,从某初值开始减计数,减到,0,时,可以重装初值。,(,2,),计数缓冲寄存器,TCNTBn,(,n=0,、,1,、,2,、,3,),TCNTn,的重装值,当,TCNTn,减计数到,0,时,,TCNTBn,TCNTn,(,3,),比较寄存器,TCMPn,(,n=0,、,1,、,2,、,3,),用于控制,PWM,波形的高电平宽度,TCNTn,TCMPn,,定时器输出低电平;,TCNTn,TCMPn,,定时器输出高电平;,在定时器输出,可以选择,接,反,相,器,,此时,,输出电平的控制刚好相反:,TCNTn,TCMPn,,定时器输出高电平;,TCNTn,TCMPn,,定时器输出低电平;,输出,PWM,波形,比较寄存器,TCMPn,(,4,),比较缓冲寄存器,TCMPBn,(,n=0,、,1,、,2,、,3,),用于加载,TCMPn,当,TCNTn,减计数到,0,时,:,TCNTBn,TCNTn,TCMPBn,TCMPn,TCMPn,中的数值确定了定时器输出,PWM,波形的高(或低电平)的宽度。,TCMPn,器中的数值由,TCMPBn,的数值加载,因此,,TCMPBn,的数值用于,PWM,(脉宽调制),。,输出,PWM,波形,当需要通过定时器的输出引脚向外输出,PWM,波形时,必须在定时器控制器,TCON,中设置允许,自动重装,、设置,TCNTBn,TCMPBn,,当定时器的计数器减计数到,0,时,,TCNTBn,中的数值加载到,TCNTn,中作为计数初值,,TCMPBn,中的数值加载到,TCMPn,中,同时,定时器引脚为,低电平,(假设输出未接反向器)。,计数器开始减计数,当减到,TCNTn=TCMPn,时,定时器输出引脚翻转为,高电平,。计数器继续减计数,当减到,0,时,,TCNTBn,中的数值重新加载到,TCNTn,中、,TCMPBn,的数值重新加载到,TCMPn,中、定时器输出引脚重新翻转为低电平开始新的计数器周期。由此在输出引脚产生,PWM,波形,。,(5)PWM,输出实现,输出,PWM,波形,PWM,波形的,周期,由,TCNTBn,中的数值确定,;,PWM,波形的,高电平宽度,由,TCMPBn,中的数值确定。,输出,PWM,波形,中断请求或,DMA,请求,(,1,)中断请求,每个定时器在硬件结构上都是按,减计数方式,工作的,16,位计数器,由时钟信号驱动计数,当减计数到,0,时,产生,中断,请求,通知,CPU,定时器工作完毕,同时,,自动,将,TCNTBn,中的,数值加载,到,TCNTn,中继续进行下一次操作。,PWM,定时器能在每个特定时间产生,DMA,请求,,产生,DMA,请求时,保持请求信号为低电平直到接收到应答信号,ACK,为止。当定时器接收到,ACK,信号时,置请求信号无效。,5,个定时器的每一个都能产生,DMA,请求。通过设置,TCFG1,寄存器中的,DMA,模式位来确定哪一个定时器产生,DMA,请求。如果一个定时器被配置为,DMA,模式,将不会产生中断请求,其他的定时器正常产生中断请求。,(,2,),DMA,请求,中断请求或,DMA,请求,DMA,模式配置和,DMA/,中断操作,DMA,请求时序图,双缓冲特性,定时器,0,定时器,3,中有,计数器,TCNTn,和,计数缓冲寄存器,TCNTBn,,用于控制,PWM,输出波形的有,比较寄存器,TCMPn,和,比较缓冲寄存器,TCMPBn,,当修改,TCNTBn,和,TCMPBn,中的数值时,新的数值只有当前计数周期结束,既计数器,TCNTn,减计数到,0,时才会分别加载到计数器,TCNTn,中和比较寄存器,TCMPn,中,。,这种,双缓冲区特性,使得当定时器输出频率和占空比改变时,保证定时器输出的最后一个脉冲波形为前一时刻,TCNTBn,和,TCMPBn,中设定数值所确定的波形。,读取计数器,TCNTn,中的数值,计数器,TCNTn,在工作过程中,可以通过计数观察寄存器,TCNTOn,读取当前的计数值。,参数配置,输入时钟频率的配置,其中,,预分频值,=0,255,,通过配置定时器配置寄存器,TCFG0,实现。,除数,=2,,或,4,,或,8,,或,16,,通过配置定时器配置寄存器,TCFG1,实现。,定时器配置寄存器,TCFG0,定时器配置寄存器,TCFG1,定时器配置寄存器,TCFG1,当系统主时钟信号,PCLK=66.5MHz,时,通过配置,TCFG0,、,TCFG1,可以获得的最小时钟周期,/,频率、最大时钟周期,/,频率、最大定时时间间隔。,参数配置,【,例,】,:系统时钟,PCLK=60MHz,,要求,T0,T4,的计数时钟频率依次为,200KHz,、,100KHz,、,50KHz,、,25KHz,、,TCLK1,,不选择死区输出形式,不产生,DMA,请求。,根据题意,需要配置,TCGF0,和,TCGF1,两个寄存器实现要求,若两个预分频器的,预分频值取,14,,计数器输入时钟频率分别等于,200KHz,、,100KHz,、,50KHz,、,25KHz,,将,这,两个条件带入,下式:,可以得到,T0,T3,的除数值分别为,2,、,4,、,8,、,16,,即多路器,0,选择,2,分频;多路器,1,选择,4,分频;多路器,2,选择,8,分频;多路器,3,选择,16,分频;多路器,4,选择,TCLK1,。据此配置,TCFG0,和,TCFG1,:,TCFG031:24=0 x00,;,保留位,TCFG023:16=0 x00,;,死区长度,TCFG015:8=,14,=0 x0E,;,预分频值取,14,TCFG07:0=,14,=0 x0E,;,预分频值取,14,整个,TCFG0,配置为:,TCFG031:0=0 x0E0E,【,例,】,:系统时钟,PCLK=60MHz,,要求,T0,T4,的计数时钟频率依次为,200KHz,、,100KHz,、,50KHz,、,25KHz,、,TCLK1,,不选择死区输出形式,不产生,DMA,请求。,TCFG131:24=0 x00,;,保留位,TCFG123:20=0 x0,;,DMA,模式,TCFG119:16=0100B=0 x4,;,外部,TCLK1,TCFG115:12=0011B=0 x3,;,16,分频,TCFG111:8=0010B=0 x2,;,8,分频,TCFG17:4=0001B=0 x1,;,4,分频,TCFG13:0=0000B=0 x0,;,2,分频,整个,TCFG1,配置为:,TCFG131:0=0 x43210,【,例,】,:系统时钟,PCLK=60MHz,,要求,T0,T4,的计数时钟频率依次为,200KHz,、,100KHz,、,50KHz,、,25KHz,、,TCLK1,,不选择死区输出形式,不产生,DMA,请求。,编程配置:,TCFG0 EQU 0 x51000000,TCFG1 EQU 0 x51000004,LDRR0,=TCFG0,LDRR1,=0 xE0E,STRR1,R0,LDRR0,=TCFG1,LDRR1,=0 x43210,STRR1,R0,PWM,输出占空比配置,通过配置,TCNTBn,来确定定时器,输出频率,,通过配置,TCMPBn,来确定定时器,PWM,输出波形的,占空比,。,5,个定时器都有,TCNTBn,,定时器,0,定时器,3,有,TCMPBn,。,【,例,】,:,T0,T3,通过各自输出引脚向外输出脉冲波形,占空比分别为,80%,、,60%,、,40%,和,20%,,脉冲周期均为,1000,个输入时钟周期。,根据题意。,TCNTB0,TCNTB3,均设置为,:,(TCNTB0,TCNTB3)=,1000,(,0 x3E8),;输出频率,TCMPB0=,800,(0 x320),;占空比,80%,TCMPB1=,600,(0 x258),;。,60%,TCMPB2=,400,(0 x190),;。,40%,TCMPB3=,200(,0 xC8),;。,20%,编程确定:,TCNTB0EQU0 x5100000C,TCNTB1EQU0 x51000018,TCNTB2EQU0 x51000024,TCNTB3EQU0 x51000030,TCMPB0EQU0 x51000010,TCMPB1EQU0 x5100001C,TCMPB2EQU0 x51000028,TCMPB3EQU0 x51000034,LDRR0,=TCNTB0,LDRR1,=0 x3E8,;输出频率,MOVR2,#0 x4,;,TCNTB0,TCNTB3,设置,L1,STRR1,R0,12,SUBSR2,R2,#1,BNEL1,LDRR0,=TCMPB0,LDRR1,=0 x320,;占空比,80%,STRR1,R0,LDRR0,=TCMPB1,LDRR1,=0 x258,;占空比,60%,STRR1,R0,LDRR0,=TCMPB2,LDRR1,=0 x190,;占空比,40%,STRR1,R0,LDRR0,=TCMPB3,LDRR1,=0 xC8,;占空比,20%,STRR1,R0,定时器操作的控制,定时器的控制通过,定时器控制寄存器,TCON,实现。,(1),计数值自动重装控制,在定时器控制寄存器,TCON,中,每个定时器都有自动重装控制位,如果将该位置,1,,就设置了允许自动重装使能,当,TCNTn,减计数到,0,时,自动将,TCNTBn,中的数值重装到,TCNTn,中。如果自动重装控制位置,0,,则禁止自动重装。,(,2,)手动更新控制,在定时器控制寄存器,TCON,中,每个定时器都有手动更新控制位,如果将该位置,1,,就实现了手动更新操作。手动更新操作分别实现将,TCNTBn,中的数值加载到,TCNTn,中、将,TCMPBn,中的数值加载到,TCMPn,中,不用等到,TCNTn,中的数值减计数到,0,。手动更新用于首次启动定时器,直接通过,TCNTBn,和,TCMPBn,加载,TCNTn,和,TCMPn,。,(,3,)启动,/,停止控制,在定时器控制寄存器,TCON,中,每个定时器都有启动,/,停止控制位,如果将该位置,1,,定时器开始工作;如果将该位置,0,,定时器停止工作。,定时器操作的控制,(,4,)输出电平控制,定时器,0,定时器,3,的输出可以选择不接反相器或接反相器,接或不接其输出电平的相位刚好相反。在定时器控制寄存器,TCON,中,有接,/,不接控制位,置,0,该位为不接;置,1,该位为接。,定时器操作的控制,定时器操作,双缓冲与自动重装操作,S3C2410A,的,PWM,定时器具有双缓冲特性,这使得改变重装值时只会影响下一次定时器的操作,并不会停止当前的定时器操作。因此,尽管设置了新的定时器计数值,当前定时器计数器仍会按原有的计数初值减计数到,0,完成。,定时器的计数初值写入,计数缓冲寄存器,TCNTBn,中,当前的计数值可以从,计数观察寄存器,TCNTOn,中读出。如果读计数缓冲寄存器,TCNTBn,,读出的并不是当前的计数值而是定时器下一次计数的重装初始值。,(,1,),TCNTBn=150,时,设置自动重装使能,启动计数,,TCNTn,从初始值,150,开始减计数,;,定时器操作,(,2,),TCNTn,还没有减到,0,时,设置了,TCNTBn=100,,由于此时,TCNTn,0,,所以,TCNTBn=100,这个新的重装值不能立即加载到,TCNTn,,,TCNTn,仍会从初始值,150,减计数,直至减到,0,,完成第一个计数周期,;,(,3,),第一个计数周期结束时,此时重装值,TCNTBn=100,,所以在第二个计数周期里,,TCNTn,完成,100,个减计数,;,(,4,),第二个计数周期结束时,重装值,TCNTBn=100,,所以在第三个计数周期里,,TCNTn,仍然完成,100,个减计数,;,(,5,),在第三个计数周期结束时,由于重装值,TCNTBn,已经设置为,TCNTBn=200,,所以在第四个计数周期里,,TCNTn,完成,200,个减计数,。,每当,TCNTn,减计数到,0,时,都会产生中断请求。,初始化定时器时进行手动更新操作和配置反相器,初始化定时器时要进行手动更新操作和配置好反相器,按减计数方式工作的计数器减到,0,时将发生自动重装操作,但首次重装发生之前,TCNTn,的初始值还未定义过,在这种情况下,要通过设置手动更新位的方法将,TCNTBn,中的初始值加载到,TCNTn,中。,启动定时器的顺序如下,:,(,1,)将初始值写入到,TCNTBn,和,TCMPBn,中。,(,2,)将定时器的手动更新位设置为,1,,建议同时配置好反相器位。,(,3,)将定时器的启动位设置为,1,启动定时器,同时,将手动更新位清,0,。,如果定时器被强制停止,,TCNTn,中仍然保存着原来的计数值,而没有从,TCNTBn,中重装。如果要,TCNTBn,加载一个新的计数值,那么也要采用手动更新的方式。,注意,,无论何时,无论定时器是否处于工作状态,反向器开关状态的改变将直接导致定时器输出,TOUTn,的逻辑电平的改变,因此最好反向器的开关位用手动更新的方式配置。,初始化定时器时进行手动更新操作和配置反相器,【,例,】,定时器,2,的基本操作控制,定时器,2,基本操作举例示意图,上图,说明了对定时器,2,进行自动重装控制、手动更新控制、启动控制时对,TCNT2,、,TCMP2,、,TOUT2,及中断请求状态的影响。,(1),命令,1,设置:,TCNTB2=3,、,TCMPB2=1,、自动重装使能、不接反相器、进行手动更新,不启动,;,【,例,】,定时器,2,的基本操作控制,编程:,TCONEQU0 x51000008,CMD1EQU0 x0000A000,;定时器,2,自动重装使能、不接反相器、进行手动更新、不启动,TCNTB2 EQU0 x51000024,TCMPB2 EQU0 x51000028,LDRR0,=TCNTB2,MOVR1,#0 x3,STRR1,R0,LDRR0,=TCMPB2,MOVR1,#0 x1,STRR1,R0,【,例,】,定时器,2,的基本操作控制,MOVR0,=TCON,MOVR1,CMD1,STRR1,R0,由于命令一进行了手动更新,,TCNTB2,立即加载到,TCNT2,中,使,TCNT2=3,;,TCMPB2,立即加载到,TCMP2,中,使,TCMP2=1,。由于没有启动定时器,2,,定时器输出没有接反相器,输出,TOUT2,保持为高电平状态。,【,例,】,定时器,2,的基本操作控制,CMD2 EQU 0 x00009000,;启动定时器,2,,置,0,手动更新位,MOVR0,=TCON,MOVR1,CMD2,STRR1,R0,定时器,2,启动后,经过一个时钟周期的延迟,,TCNT2,将从,3,开始减计数。,(2),命令,2,启动定时器,对应的指令:,【,例,】,定时器,2,的基本操作控制,(,3,)命令,3,设置:,TCNTB2=2,、,TCMPB2=0,,对应的指令:,LDRR0,=TCNTB2,MOVR1,#0 x2,STRR1,R0,LDRR0,=TCMPB2,MOVR1,#0 x0,STRR1,R0,由于命令三发出时,定时器,2,已经启动,所以,只有,TCNT2,减计数到,0,时,才会用,TCNTB2,加载,TCNT2,、用,TCMPB2,加载,TCMP2,。,【,例,】,定时器,2,的基本操作控制,TCNT2,从,3,开始减计数,当减到,1,时,,TCNT2=TCMP2,,输出,TOUT2,从低电平翻转到高电平。,TCNT2,继续减计数,当减到,0,时,产生中断请求。,TCNT2=0,持续一个时钟周期,开始重装,TCNT2,和,TCMP2,,根据命令,3,的设置,重装后,,TCNT2=1,、,TCMP2=0,,由于此时,TCNT2,TCMP2,,输出,TOUT2,翻转为低电平,开始新的一个计数周期。,【,例,】,定时器,2,的基本操作控制,(,4,)命令,4,置,0,自动重装位,对应的指令:,CMD4 EQU 0 x00001000,;启动定时器,2,,置,0,手动更新位,置,0,自动重装位,MOVR0,=TCON,MOVR1,CMD4,STRR1,R0,当,TCNT2,减计数到,0,时,由于,TCNT2=TCMP2,,输出,TOUT2,翻转为高电平,同时产生中断请求。由于此时禁止了自动重装,定时器,2,停止了计数,维持,TCMP2=0,、,TCNT2=0,、,TOUT2,为高电平。,【,例,】,定时器,2,的基本操作控制,【,例,】,定时器操作,过程,(,1,)设置自动重装,允许,,设置,TCNTBn,为,160,(,50,110,)和,TCMPBn,为,110,,设置手动更新位和反相器位。通过手动更新位的设置分别使得,TCNTBn,中的数值加载到,TCNTn,中,,TCMPBn,中的数值加载到,TCMPn,中。,然后,再分别设置,TCNTBn,为,80,(,40,40,),,TCMPBn,为,40,,作为下一个周期的重装值。,(,2,)置,1,启动位、清,0,手动更新位、置,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,)没有中断请求产生。,56,课后思考,1,),S3C2410,的,Watchdog,与,RTC,基本工作原理及应用,2,),PWM,的应用,
展开阅读全文