S5PV210 PWM定时器

发布者:JoyfulJourney最新更新时间:2024-12-03 来源: cnblogs关键字:S5PV210  PWM  定时器 手机看文章 扫描二维码
随时随地手机看文章

第一节 S5PV210的PWM定时器
S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PSYS作为时钟源,相关知识可以查阅'初始化时钟',相关的结构图如下:

image

第二节 程序相关讲解
完整代码见目录见详细代码下载链接。
1. main.c
核心代码如下:
int main(void)
{
// 初始化串口
uart_init();
// 中断相关初始化
system_initexception();
// 设置timer
timer_request();
while(1);
}
共4个步骤,其中第3步与定时器相关:
第一步 初始化串口;
第二步 中断相关初始化;
第三步 设置timer,函数timer_request()的定义位于timer.c中;
第四步 死循环,等待timer中断的发生;
2. timer.c
void timer_request(void)
{
printf('rn#############Timer test############rn');
// 禁止所有timer
pwm_stopall();
// 设置timer0中断的中断处理函数
intc_setvectaddr(NUM_TIMER0,irs_timer);
// 使能timer0中断
intc_enable(NUM_TIMER0);
// 设置timer0
timer_init(0,65,4,62500,0);
}
共3个步骤:
第一步 禁止所有timer,往寄存器TCON写0即可;
第二步 设置VIC,先设置timer0中断的中断处理函数为irs_timer(),然后使能timer0中断;
第三步 设置timer0,调用了函数timer_init(),其核心工作是:
1) 设置分频
首先设置分频系数,相关寄存器是TCFG0,如下:

image
然后设置为16分频,相关寄存器是TCFG1,如下:

image

经过上面的设置之后,就能确定timer的输入时钟了,计算方式如下:
Timer Input Clock Frequency = PCLK / ( {prescaler value + 1} ) / {divider value} = 66MHz/(65+1)/16=62500hz
2) 设置计数
设置寄存器TCNTB0=62500和TCMPB0=0,启动timer0后,TCNTB0会逐渐-1,直到等于TCMPB0时就产生一次中断,即1秒产生一次timer0中断。

image
3) 启动timer0
设置寄存器TCON,先设置手动更新位,然后清除手动更新位,使用自动装载,最后启动timer0。
4) 使能timer0中断
设置寄存器TINT_CSTAT,使能timer0中断。

image

最后再来分析timer0中断处理函数irs_timer(),共3个步骤:
第一步 清timer0的中断状态寄存器TINT_CSTAT;
第二步 打印timer0中断发生的次数,每产生一次timer0中断就打印一次。
第三步 VIC相关的中断清除,调用函数intc_clearvectaddr();
第三节 实验现象
终端会不断的打印数字1、2、3、4...,频率为每秒打印1次。


关键字:S5PV210  PWM  定时器 引用地址:S5PV210 PWM定时器

上一篇:S5PV210 NAND Flash
下一篇:Linux内核移植

推荐阅读最新更新时间:2026-03-25 12:28

S5PV210中的定时器
什么是定时器? 定时器是SoC中常见外设 定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数),因为计数器的技术时间周期是固定的,因此到了一定时间,只要用计数值乘以技术的时间周期就能得到一个时间段。这个时间段就是我们定的时间(这就是定时器了)。 定时器/计数器作为SoC的外设,主要用来实现定时执行代码功能,定时器相对于SoC来说,就好像闹钟相对于人来说意义一样 定时器有什么用? 定时器可以让SoC在执行主程序的同时,可以(通过定时器)具有计时功能,到了一定时间(计时结束)后,定时器会产生中断提醒CPU,CPU回去处理中断并执行定时器中断的isr从而去执行预先设定好的事件。 定时器就好像是CPU的秘书一样,这
[单片机]
s5pv210定时器
不废话了,下面从s5pv210 的定时器开始总结。 210有五个32位的定时器,其中0、1、2、3、4包含了脉冲宽度调制,有定时和计数的器 的功能。这里就不再赘述,相关资料随时都可以找到,这里直接上代码。 1、首先是定时器的初始化,主要设置定时器的输入时钟频率、定时器倒数计数初值和重载、占空比、使能定时器中断和开启等 int init_timer(void) { unsigned int temp0=0; //禁止timer TCON = 0x0; //使能timer0中断 TINT_CSTAT = 0x01; /* 设置时钟的工作频率为1M prescaler value = 65 divider value = 1 i
[单片机]
STM32定时器输出PWM的死区时间(DTR)计算详解
在 STM32F429(以及所有 STM32F4 “高级定时器”)中,死区时间由 TIMx_BDTR 寄存器的 8 位 “Dead‑Time Generator” 字段 DTG 来配置。其计算分三步: 计算死区时钟周期 tDTS TIM1 时钟源为 APB2 定时器时钟(PCLK2)。当 APB2 预分频≠1 时,定时器时钟 = PCLK2×2;否则 = PCLK2。 若系统时钟 168 MHz,APB2 预分频=2,则 PCLK2=84 MHz,TIM1 时钟 = 84 MHz×2 = 168 MHz, 不过,STM32F429芯片的TIM1时钟频率一般等于其系统频率:180MHz. 2. DTG 字段分区及死区时间公
[单片机]
STM32<font color='red'>定时器</font>输出<font color='red'>PWM</font>的死区时间(DTR)计算详解
STM32定时器PWM 4路输出 TIM3、TIM14
以STM32F030F4P6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。 程序运行后TIM3的CH1、CH2、CH4,TIM14的CH1输出PWM波形。 以下是main.c文件: #include stm32f0xx.h //转载请注明出处: https://www.cnblogs.com/beiyhs/p/11435583.html 北有寒山 void PWM_GPO_TIM(void) //PWM引脚时钟设置函数 { GPIO_InitTypeDef GPIO_InitStructure;
[单片机]
[smart210] 定时器PWM
平台:smart210 CPU:s5pv210 目标:学习如何配置定时器timer,实现PWM输出功能以及利用定时器产生中断 知识储备:s5pv210有5个定时器,其中定时器0,1,2,3具有PWM输出功能,均有专门的引脚作为输出。而定时器4是内部定时器,不具备输出引脚。 该CPU的定时器,所需要配置的寄存器并不多,主要有TCON(Timer Control),TCFG0(Timer Configuration 0),TCFG1(Timer Configuration 1),TCNTBn(Timer n Counter Buffer),TCMPB(Timer n Compare Buffer),TCNTOn(Timer n Cou
[单片机]
[smart210] <font color='red'>定时器</font>与<font color='red'>PWM</font>
STM32F103定时器PWM驱动步进电机加减速
背景 之前学习了定时器的一些基本知识,实现了1ms的定时,本次学习定时器的PWM功能,用定时器产生的PWM波作为步进电机的脉冲频率,实现步进电机转动控制,并实现电机S型曲线的加减速控制。 步进电机基本知识 步进电机根据接线关系分为双极性和单极性,单极性两组线圈中间有抽头,接电源;而双极性的线圈中间无抽头。本次实验采用双极性42步进电机,24V供电。 步进电机外观图 电机驱动原理图及控制接线关系 本次电机驱动芯片采用TOSHIBA的TB67S109AFTG芯片来驱动双极性步进电机,该芯片支持最大驱动电压为50V,最大驱动电流为5A,最大支持32细分。 驱动电机原理图 接线关系 细分控制引脚分配 DMODE0 -----
[单片机]
STM32F103<font color='red'>定时器</font><font color='red'>PWM</font>驱动步进电机加减速
如何利用定时器产生PWM
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用<font color='red'>定时器</font>产生<font color='red'>PWM</font>波
51单片机产生PWM软件延时和定时器产生两种方法
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是
[单片机]
51单片机产生<font color='red'>PWM</font>软件延时和<font color='red'>定时器</font>产生两种方法
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved