s3c2440的pwm输出

1.S3C2440有5个16位的定时器,其中0,1,2,3定时器都有一个输出引脚,通过定时器控制引脚周期性的输出高低电平(通过引进GPB0~GPB3输出,这是GPB引脚的第三功能),从而实现pwm功能。
 
2.定时器的时钟源是PCLK,太高,进过两次分频,第一级8位预分频(0~255),第二级4位分频,然后输出5种频率的时钟,2分频,4分频,8分频,16分频和外部时钟TCLK0和TCLK1。定时器的时钟频率=PCLK/(预分频值+1)/(分频值)【预分频值prescaler和分频值mux在寄存器TCFG0和TCFG1中设置】
 
3.电平反转的原理:当TCNTn的值和TCMPn的值相同时,定时器n有一个反转,会在出书引脚输出一个电平,然后TCNTn继续减1,直至为0,再发生一次反转,在引脚输出一个电平,这样就实现了高低电平的反转,减为0时会触发中断。
 
4.变相器开关决定了起始输出为高电平还是低电平,也就决定了pwm输出的形式(输出波形图的不同,当定时器停止工作后输出的是最后时刻的电平状态,这样也不一样,通过在开始的时候设置变相器开关的转台就保证了一些设备对电平的要求)
 
 
5.自动重载:自动重载在TCNTn的只为0时,将TCNTBn的值重装到TCNTn中,TCMPBn的值会重装到TCMPn中,可以从TCNTon读取TCNTn当前的值【定时器控制寄存器TCON设置】
 
6.在停止定时器的之前要停止自动重载,否则一直重装初值,TCNTn的值一直和TCMPn的值进行比较,在进行比较的时候TCMPn的值不变,而TCNTn的值不断减1,当TCNTn=TCMPn时,反转电平,然后TCNTn继续减1,到0时,再次反转电平,并触发一个中断,并且自动重装。
 
7.定时器初始化:1)定时器时钟频率初始化:(定时器频率:每秒会把计数器减去该频率,即每秒减去计数器值得个数叫定时器频率)
                           2)设置定时器计数值:看项目要求需要输出怎样的方波,譬如需要led灯每隔0.5s闪烁一次,则方波周期t=1s,假设比较值为0 ,则需要每隔0.5秒输出引脚反转一次,而定时器的频率假设为50mhz/(49+1)/16,分频后频率为62500hz,即每秒计数62500,就是说计数到62500个数后电平反转一次,而要求0.5秒反转一次,所以应该把计数初值设为625000/2
                          3)设置中断函数:用来处理具体的功能,譬如led的亮灭控制
 
8.寄存器

TCNTBn   :计数缓冲器,当定时器使能的时候,被加载到递减寄存器中的初始值(重载初值寄存器)

TCMPBn :比较缓冲器,加载到比较寄存器中与递减寄存器相比较的初值,决定占空比
TCNTn    :定时器计数器,递减计数器
TCMPn   :定时器比较器,在比较的过程中保持不变
TCNTOn :定时器监视寄存器,能读出TCNTNn和TCNTBn的值
TCFG0    :定时器配置寄存器,决定了各定时器的预分频值
TCFG1      :定时器配置寄存器,决定了各定时器的分频值   定时器的时钟频率=PCLK/(预分频值+1)/(分频值)
TCON       :定时器控制寄存器,决定了各定时器的加载方式,变相器开关,手动更新和定时器启动

 

博乐Bar
原文地址:https://www.cnblogs.com/huanzxj/p/3034625.html