基于S3C2440A定时器的正确使用方法

发布者:创新脑细胞最新更新时间:2020-02-07 来源: elecfans关键字:S3C2440A  定时器  使用方法 手机看文章 扫描二维码
随时随地手机看文章

S3C2440A有5个16位定时器。其中定时器0、1、2和3具有脉宽调制(PWM)功能。定时器4是一个无输出引脚的内部定时器。定时器0还包含用于大电流驱动的死区发生器


定时器0和1共用一个8位预分频器,定时器2、3和4共用另外的8位预分频器。每个定时器都有一个可以生成5种不同分频信号(1/2,1/4,1/8,1/16和TCLK)的时钟分频器。每个定时器模块从相应8位预分频器得到时钟的时钟分频器中得到其自己的时钟信号。8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK


每个定时器有它自己的由定时器时钟驱动的16位递减计数器。当递减计数器到达零时,产生定时器中断请求通知CPU定时器操作已经完成。当定时器计数器到达零时,相应的TCNTBn的值将自动被加载到递减计数器以继续下一次操作


对于定时器的使用有两种模式,第一是普通定时第二是PWM输出


先说普通定时,一般定时器的使用流程都会包含这几步

1.在低功耗寄存器里面启用相应的定时器外设

2.设置时钟分频比,获取定时器的计数时钟

3.设置定时器的定时值(重载值),配置中端,启动定时器

4.等待中断发生,中断处理函数中清除中断

依靠这几步,有以下寄存器我们需要注意

基于S3C2440A定时器的正确使用方法

首先,设置PCLK到定时器的分频比例,有两种时钟,分别是01定时器和234定时器

然后进行第二次分频


可选择1/2%201/4%201/8%201/16几种时钟,时钟源是从上一个寄存器分频来的


设置定时器的自动重载和启动定时器,注意在这个寄存器中,请用手动更新了之后必须再次清零,否则定时器无法运行

基于S3C2440A定时器的正确使用方法

我之前就遇到过这个问题

基于S3C2440A定时器的正确使用方法

设置定时器自动重载的值

再然后按照之前的设置中断的方式设置中断,定时器没有次级源,以time0为例

1.源挂起srcpend

基于S3C2440A定时器的正确使用方法

2.中断模式intmode

基于S3C2440A定时器的正确使用方法

3.中断屏蔽intmask

基于S3C2440A定时器的正确使用方法

4.中断挂起intpend

基于S3C2440A定时器的正确使用方法

使能中断之后定时器就可以正常使用了

具体代码如下:

TImer.c

#include“TImer.h”u8TImer0Up=0;void__irqTImer0(){rSRCPND“=(1《《10);//清除源挂起rINTPND|=(1《《10);//清除中断挂起timer0Up=1;}//定时器初始化//prescaler8为分频器值,0-255//mux定时器的选通输入01/211/421/831/16//定时器的重载值voidInitTimer0(u8prescaler,u8mux,u16count){rCLKCON|=(1《《8);//打开timer时钟rTCFG0&=~0xff;//清零分频器rTCFG0|=prescaler;//设置预分频器rTCFG1&=~(0x0f《《0);rTCFG1|=(mux《《0);//设置选通输入//设置定时器的计数值rTCMPB0=0x0;rTCNTB0=count;//设定初值//启动定时器rTCON|=(1《《1);//更新TCNTB0和TCMPB0rTCON|=(1《《3);//启动自动重载rTCON&=~(1《《1);//清零手动更新rSRCPND|=(1《《10);//清除源挂起rINTPND|=(1《《10);//清除中断挂起rINTMOD&=~(1《《10);//设置中断模式为IRQ模式rINTMSK&=~(1《《10);//使能定时器中断pISR_TIMER0=(unsigned)timer0;//设置中断地址rTCON|=(1《《0);//启动定时器0}

Timer.h

#ifndef__TIMER_H#define__TIMER_H#include”2440addr.h“#include”led.h“#include”uart0.h“externu8timer0Up;voidInitTimer0(u8prescaler,u8mux,u16count);#endif

PWM波形输出时需要注意几个别的寄存器

第一:PWM输出不需要开启中断,但是要设置相应的引脚复用功能为pwm功能,如图,TCLK

基于S3C2440A定时器的正确使用方法

第二,使用pwm功能必须要使能比较寄存器,也就是

基于S3C2440A定时器的正确使用方法

第三,根据需要看是否需要反向,何为反向呢

基于S3C2440A定时器的正确使用方法

就是TCNT

Pwm.c

#include”pwm.h“//compare比较寄存器的值voidTomer0PwmInit(u8prescaler,u8mux,u16count,u16compare){rGPBCON&=~3;rGPBCON”=2;//设置GPB0为OUT0rGPBUP=0x0;//使能上拉                 rCLKCON|=(1《《8);//打开timer时钟rTCFG0&=~0xff;//清零分频器rTCFG0|=prescaler;//设置预分频器rTCFG1&=~(0x0f《《0);rTCFG1|=(mux《《0);//设置选通输入//设置定时器的计数值             rTCMPB0=compare;//比较寄存器的值rTCNTB0=count;//设定初值//启动定时器rTCON|=(1《《1);//更新TCNTB0和TCMPB0rTCON|=(1《《3);//启动自动重载rTCON&=~(1《《1);//清零手动           更新rTCON|=(1《《0);//启动定时器0}

Pwm.h

#ifndef__PWM_H_#define__PWM_H_#include“2440addr.h”#include“def.h”//compare比较寄存器的值voidTomer0PwmInit(u8prescaler,u8mux,u16count,u16compare);#endif

关键字:S3C2440A  定时器  使用方法 引用地址:基于S3C2440A定时器的正确使用方法

上一篇:ARM4412裸板驱动LED灯.按键,蜂鸣器的驱动
下一篇:arm架构64位(AArch64)汇编优化总结

推荐阅读最新更新时间:2024-11-02 09:40

51单片机定时器量程的硬件扩展方式
51单片机工作模式2自动装载定时值,按教科书的描述定时能力显得相对精准,但是此时的为8位定时器:当晶振为12MHz时,只能定时0.256ms。 升个级,精准性不要了,使定时器工作在模式1,16位定时器:当晶振为12MHz时已经能定时到65.56ms,略微牛逼不少。如果还要定时更长的数,可能会用软件方式 来扩展计数范围。软件方式扩展的大概思路是:在定时器中断服务程序中对定时器中断请求进行计数,当中断请求的次数达到要求的值时才进行相应的处理。例如,某事件的处理周期为1s,但由于受到最大定时时间的限制,无法一次完成定时,此时可以将定时器的定时时间设为以10ms为一个单位,启动定时器后的每一次定时器溢出中断产生10ms的定时,进入
[单片机]
51单片机<font color='red'>定时器</font>量程的硬件扩展方式
数码管动态显示+定时器中断方式+Protues
1 仿真现象 2 程序设计 2.1 主程序 #include DisplaySmg.h #include Timer0.h sbit LED = P1^0; unsigned int SystemTimer=0; //系统时间 unsigned char SystemFlag=1; //初始状态 unsigned int NUM = 1983; //待显示数据 void disp_num(); void main() { Timer0Init(); //启动定时器T0 do //开机显示 { if(SystemTi
[单片机]
数码管动态显示+<font color='red'>定时器</font>中断方式+Protues
STM32F1系列基本定时器HAL库配置
时钟的概念了解完就趁热打铁进行定时器的简单讲解,定时器的操作是十分重要的,他不仅可以用于计数/定时(两者其实一个道理),还可以生成PWM,输入捕获等等,高级定时器可以用于工业电机上的有关操作。所以,我们专门讲解一波基本定时器,并用它做一个闪烁灯小实验。 定时器简介 在STM32F1上,常规定时器分为三种定时器:高级,通用,基本; 高级定时器的功能涵盖通用定时器,通用定时器功能涵盖基本定时器 以基本定时器实现计数功能,这里说的并不准确,应该说是定时功能, 定时是对周期固定的脉冲信号进行计数如APB(MCU的外设时钟APB),而计数是对周期不确定(可能固定也可能不固定)的脉冲信号进行计数。 更为深入的比喻:就是水杯中装水的
[单片机]
STM32F1系列基本<font color='red'>定时器</font>HAL库配置
STM32直接驱动RGB接口的TFT数字彩屏设计
引言     随着工业技术的不断发展,人机界面的开发及应用空前火热,为了具有比较友好的人机界面,TFT数字彩屏被广泛的应用,但是TFT彩屏通常都不带有控制器,所以现在驱动彩屏的方案大致有2种:     ①采用ARM9或者更高级别的平台,芯片上带有TFT控制器,可以直接挂接TFT数字屏。     ②采用低端CPU处理器平台,外加TFT控制器模块,再挂接TFT数字屏。     对于方案①来说,系统的复杂度会莫名地增加,再加上该类的平台中主MCU多为BGA封装,对于需求很多小量多样化产品的客户来说,较难以接受这样的方案;而 ②方案平白无故添加了一个LCD控制器。这两种方案无论哪一种都增加了硬件成本,本文提出了一种由STM32的FSMC总线
[嵌入式]
STM32开发笔记19: STM32CubeMX中定时器的配置方法
单片机型号:STM32L053R8T6 本文介绍在STM32CubeMX进行定时器的配置,产生固定时间中断的方法,以TIM2为例,步骤如下: 1、使能TIM2,指定时钟源。 2、查看数据手册,确定该定时器的内部数据总线,本文所引用的定时器内部数据总线为APB1。 3、在时钟配置中确认所选定时器的内部数据总线的时钟频率,我这里是32MHz。 4、在配置页中,选中相应的时钟,在Prescaler中输入预分频系数,在Counter Period中输入溢出系数。例如,本例中时钟为32MHz/32=1MHz,也就是一个周期为1us,我选择溢出系数为1000,则产生中断的时间为1ms。
[单片机]
STM32开发笔记19: STM32CubeMX中<font color='red'>定时器</font>的配置方法
STM32F103VCT6 高级定时器的PWM输出
要求得到下列 波形 ,死区时间1us,CH1和CH1之间的相位差事3us,频率50HZ。 1,To get TIM1 counter clock at 72MHz,the prescaler is computer as follows: Prescaler = (TIM1CLK / TIM1 counter clock) - 1 To objective is to genterate PWM signal at 50KHz: -TIM1_Priod = (SystemCoreClock / 50000) - 1 To get TIM1 output clock at 50KHz , the pe
[单片机]
STM32F103VCT6 高级<font color='red'>定时器</font>的PWM输出
ARM之定时器0(中断)
这也是一个很简单的程序,主要是应用ARM实现定时1秒中断的小程序,主要说明ARM7中中断的用法。 程序如下: #include LPC213x.H #define L5_Communicatin_Flag (1 28) //定义P0.28脚 /**************************************************************************** * 名称:IRQ_Time0() * 功能:定时器0中断服务程序,取反BEEPCON控制口。 * 入口参数:无 * 出口参数:无 ****************************************************
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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