S3C2410PWM定时器.ppt
回 顾,S3C2410时钟信号及用途:FCLK、PCLK、HCLK、UCLKS3C2410片内的总线:AHB、APBS3C2410的看门狗控制器编程步骤初始化看门狗控制器时钟设置、输出类型设置:给WTCON相应位赋值;计数器初始值设定:给WTCNT相应位赋值;数据寄存器赋值:给WTDAT相应位赋值;如果把看门狗作为一个普通的定时器使用,还必须把看门狗定时中断处理程序填入中断向量表中,并把相关的中断控制寄存器初始化;使能看门狗控制寄存器:给WTCON相应位赋值;,S3C2410 PWM定时器,S3C2410 PWM定时器概述;S3C2410 PWM定时器的操作;S3C2410 PWM定时器相关的寄存器;S3C2410 PWM定时器的应用编程。,教学要求,了解PWM及死区的作用掌握S3C2410 PWM Timer工作原理掌握利用S3C2410 PWM Timer输出PWM波形的操作方法与编程步骤,PWM脉冲的作用,现在有这样个问题:让你设计一个电路能够任意调节灯泡的亮度,该怎样做呢?,脉冲宽度调制(PWM),脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。,S3C2410 Timer部件概述,S3C2410芯片内部拥有5个16位的Timer部件Timer0、Timer1、Timer2、Timer3具有脉宽调制(pwm)功能,具有PWM脉冲输出引脚;Timer4仅作定时器用,不具有PWM功能,没有输出引脚;Timer0有一个死区(dead zone)发生器。每个Timer部件所需的计数时钟信号均需系统提供的pclk时钟两次“变速”(预分频和再分频)所得。Timer0、Timer1共享一个8位的预分频器,共享一个4位的再分频器;Timer2、Timer3、Timer4共享另一个8位预分频器,共享另外一个4位的再分频器;详见S3C2410 datasheet,S3C2410 Timer部件概述,5个Time部件最核心的东西仍然是一个脉冲减一计数器:,n=0,1,2,3,黄颜色部分为Timer4的模块,因为其没有脉冲输出,仅仅是一个普通的定时器而已,定时中断,S3C2410 Timer部件的操作,Time4因为没有脉冲输出,所以其操作比较简单:减一计数器TCNT4溢出时产生定时中断,同时TCNTB4中的值会复制到TCNT4中开始下一轮计数。,初始化;while(1)脉冲计数;if(TCNTn=TCMPn)Toutn=Toutn;if(TCNTn=0)发定时中断请求;if(TCNT=-1)Toutn=Toutn;TCNTn=TCNTBn;TCMPn=TCMPBn;,n=0,1,2,3,右图为工作原理的伪代码描述,S3C2410 Timer部件的操作,下图:为s3c2410定时器的操作图(Figure 10.2 Timer operations)“开始位=1”表示启动定时器开始计数;“手动更新位=1”表示将计数缓冲寄存器TCNTBn中的内容复制到计数寄存器TCNTn,比较缓冲寄存器TCMPBn中的内容复制到比较寄存器TCMPn“自动重载=1”表示计数器溢出时会自动将计数缓冲寄存器TCNTBn中的内容复制到计数寄存器TCNTn,比较缓冲寄存器TCMPBn中的内容复制到比较寄存器TCMPn,S3C2410 Timer部件的操作,S3C2410 Timer部件的操作,注意:程序不能直接对TCNTn进行读写,若但一定要读其中的数据,可以读TCNTOn在程序中,TCNTn和TCMPn的值可以在初始化时(定时器开启前)手动更新(手动更新位置1);在溢出时自动重载(自动重载位置1)反转器位关闭时,Toutn的初始电平为高电平;反之则反之。,反转位一旦变化,TOUT电平立即发生变化,S3C2410 Timer部件的操作,Timer0死区功能开启时的效果是Tout0和nTout0不会同时出现高电平,如果Tout0和nTout0用于控制两个不能同时开关器件,则这两个电器不会同时开闭。,Timer 寄存器共有6种、17个寄存器,TCNTBn-Timern计数初值寄存器(计数缓冲寄存器),16位TCMPBn-Timern比较寄存器(比较缓冲寄存器),16位TCNTOn-Timern计数读出寄存器,16位,S3C2410 Timer相关的寄存器,Dead zone length-死区宽度设置位其值N为:0255,以timer0的工作时钟为单位死区宽度为:(N+1)timer0的1次计数时间Prescaler1-timer2、3、4的预分频值其值N为:0255输出频率为:PCLK(N+1)Prescaler0-timer0、1的预分频值其值N为:0255输出频率为:PCLK(N+1),TCFG0-预分频器配置寄存器,TCFG1-DMA模式与分频选择寄存器,DMA mode-DMA通道选择设置位0000:不使用DMA方式,所有通道都用中断方式0001:选择timer00010:选择timer10011:选择timer20100:选择timer30101:选择timer4011X:保留MUX4 MUX0-timer4timer0分频值选择0000:1/20001:1/40010:1/8 0011:1/1601XX:选择外部TCLK0、1(对timer0、1是选TCLK0,对timer4、3、2是选TCLK1),TL4TL0-计数初值自动重装控制位 0:单次计数1:计数器值减到0时,自动重新装入初值连续计数。TUP4TUP0-计数初值手动装载控制位。0:不操作1:立即将TCNTBn中的计数初值装载到计数寄存器TCNTn中。说明:如果没有执行手动装载初值,则计数器启动时无初值。,TCON-定时器控制寄存器,TR4TR0-TIMER4TIMER0运行控制位0:停止1:启动对应的TIMERTO3TO0-TIMER4TIMER0输出控制位0:正相输出1:反相输出DZE-TIMER0死区操作控制位0:禁止死区操作1:使能死区操作,TCON定时器控制寄存器(续),(1)按照前面初始化定时器;设置TCNTBn=160(50+110),TCMPBn=110;手动装入初值后,又重设TCNTBn=80,TCMPBn=40,自动重装初值开启;(2)启动定时器,按第一个初值计数;(3)与第一个比较值相同,输出取反;(4)第一次计数结束,自动重装初值80、40;(5)在第一次中断处理程序又重设TCMPBn=60;(6)与第二个比较值相同,输出取反;(7)第二次计数结束,自动重装初值80、60;(8)在第二次中断处理程序禁止自动重装初值,准备结束计数;(9)与第三个比较值相同,输出取反;(10)第三次计数结束,不再计数。,50 110 40 40 20 60,1 2 3 4 6 7 9 10,5,TOUTn,8,定时器产生PWM操作例子,S3C2410的定时器控制器编程举例,例:编写一程序,利用S3C2410定时器产生PWM信号,驱动实验板上蜂鸣器鸣叫。设S3C2410的PCLK为50MHz。见参考代码 PWMTIMER,20,小 结,(1)写TCFG0,设置计数时钟的预分频值和Timer0死区宽度;(2)写TCFG1,选择各个定时器的分频值和DMA、中断服务;(3)对TCNTBn和TCMPBn分别写入计数初值和比较值(4)写TCON,设置计数初值自动重装和手动装载(5)再写TCON,清除手动装载初值位、设置输出反转位、启动计数。,PWM定时器初始化方法,思考题,1.PWM及死区的作用?2.S3C2410定时器工作原理?3.S3C2410定时器计数器和比较器,是由哪个寄存器实现重载?以及重载的方法有哪些?,本周小课预习内容,如何使用单片机凑音乐,自我网上学习音乐简谱知识,什么是音符、音长及相关符号的含义,能基本会看简谱?实验板上蜂鸣器控制端口对应的是哪个定时器的PWM信号输出?S3C2410 PWM定时器如何开启(即回答哪个位让它开始定时计数),自动更新位和手动更新位是哪个寄存器的第几位以及他们作用是什么?S3C2410 PWM定时器计数器和比较器的重载寄存器分别是?设PCLK为50MHz,则如何设置可使S3C2410的PWM定时器工作时钟频率约为MH?在此时钟频率下让PWM定时器产生987Hz的PWM信号,又如何设置呢?,下周大课预习内容,S3C2410 实时时钟RTC(REAL TIME CLOCK)数据手册S3C2410.PDF第17章RTC,