S5PV210 pwm定时器

本文介绍了S5PV210 SoC中的PWM定时器,包括其作用、重要组成部分和特性。详细阐述了PWM定时器的自动重载和双缓冲功能,以及如何生成PWM波形。通过一个具体的代码实例展示了如何初始化PWM定时器2以输出2KHz、50%占空比的PWM波形。主要编程步骤涉及设置GPIO、定时时间和占空比,以及启用相关功能。
摘要由CSDN通过智能技术生成

一.定时器概述

(1)定时器的作用
定时器可以让SoC在执行主程序的同时,可以(通过定时器)具有计时功能,到了一定时间(计时结束)后,定时器会产生中断提醒CPU,CPU会去处理中断并执行定时器中断的ISR。从而去执行预先设定好的事件。

(2)定时器的最重要组成
由于:定时时长 = 计数值×计数时间周期
所以定时器最重要的就是:分频器 --> 计数时间周期
TCNT–> 计数值

二.S5PV210中的定时器

PWM定时器:特点能用于生成PWM波。系统定时器,特点生成的定时(TCNT*时钟周期)是用来作为系统固定的时间间隔的,称systick。
看门狗定时器:特点能产生复位信号。
实时时钟RTC(real time clock):特点关注的是时间点(xx年x月x日x时x分x秒星期x)。

三.PWM定时器

1.210中PWM定时器的特点
(1)有5个PWM定时器,其中0,1,2,3有GPIO,可以用于生成PWM波,timer4只能用来产生内部中断信号。
(2)clock是通过PCLK_PSYS经过两次分频产生。

2.重要寄存器
TCNT&TCMP、TCNTB&TCMPB、TCNTO
TCNT&TCMP是用来计数和生成占空比的,但不可读写。
程序员只能通过写其buffer寄存器,也就是TCNTB&TCMPB来写值,通过TCNTO来读TCNT的值。
在这里插入图片描述

3. 自动重载和双缓冲(auto-reload and double buffering)

定时器的工作是单次的,当TCNT的值减到0,就会发出中断,并且定时结束,从前如果需要连续多次定时,isr就需要重新设置TCNT,210中对此进行了改进,如果开启自动重加载,那么TCNT到0后生成中断,并且TCNTB被自动加载进TCNT,开始下一次定时。

4.PWM波
占空比是通过TCNT和TCMP可到的,而PWM的周期也就是定时器的定时时间(TCNT*时间周期)。
在这里插入图片描述
5.电平翻转
由于PWM定时器可以规定当( inverter is off):当TCNT<=TCMP时为高电平,当TCNT>TCMPB时为低电平

6.实践代码

// 初始化PWM timer2,使其输出PWM波形:频率是2KHz、duty为50%
void timer2_pwm_init(void)
{
    // 设置GPD0_2引脚,将其配置为XpwmTOUT_2
    rGPD0CON &= ~(0xf<<8);
    rGPD0CON |= (2<<8);
    
    // 设置PWM定时器的一干寄存器,使其工作
    rTCFG0 &= ~(0xff<<8);
    rTCFG0 |= (65<<8);      // prescaler1 = 65, 预分频后频率为1MHz
    
    rTCFG1 &= ~(0x0f<<8);
    rTCFG1 |= (1<<8);       // MUX2设置为1/2,分频后时钟周期为500KHz
    // 时钟设置好,我们的时钟频率是500KHz,对应的时钟周期是2us。也就是说每隔2us
    // 计一次数。如果要定的时间是x,则TCNTB中应该写入x/2us
    
    rCON |= (1<<15);       // 使能auto-reload,反复定时才能发出PWM波形
    //rTCNTB2 = 250;       // 0.5ms/2us = 500us/2us = 250
    //rTCMPB2 = 125;       // duty = 50%
    
    rTCNTB2 = 50;			
    rTCMPB2 = 25;	
    
    // 第一次需要手工将TCNTB中的值刷新到TCNT中去,以后就可以auto-reload了
    rCON |= (1<<13);       // 打开手动刷新功能
    rCON &= ~(1<<13);       // 关闭手动刷新功能
    
    rCON |= (1<<12);       // 开timer2定时器。要先把其他都设置好才能开定时器
}

总结:

对于PWM的基本编程,主要为三点:
(1)设置GPIO为TOUT.
(2)设置定时时长(TCNT*时钟周期),占空比(TCNT和TCMP)。
(3)一些功能的选择(如自动加载等),并启动时钟.

需要注意的是:第一次加载buffer的值需要手动加载。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值