2440裸机编程之五 定时器

发布者:未来感觉最新更新时间:2019-11-11 来源: 51hei关键字:裸机编程  定时器 手机看文章 扫描二维码
随时随地手机看文章

S3C2440A 具有5 个16 位定时器,每个定时器可以按照中断模式或DMA 模式工作。定时器0,1,2,3 具有PWM 功能。定时器4 是一个内部定时器,不具有对外输出口线。定时器0 还具有死区发生器,通常用于大电流设备。


定时器特性总结如下。
● 5 个16 位定时器可以工作在中断模式或DMA 模式。
● 包括2 个8 位预分频器、2 个4 位分割器。
● 输出波形的占空比可用编程控制(即进行脉宽调制)。
● 具有自动重载模式或单次触发模式。
● 具有死区发生器。



与定时器相关的寄存器有:TCFG0、TCFG1、TCON、TCMPBn、TCNTBn、TCNTOn

定时器的频率由PCLK分频而来,即Ftimer = PCLK / (prescaler+1) / MUX
prescaler位于TCFG0,MUX位于TCFG1

TCON控制定时器的运行:是否自动装载定时器初值,是否手动装载,开始/停止 定时器。

TCNTBn放定时器n的初值,装载用
TCMPBn放定时器n的匹配值,用于调至PWM
TCNTOn,只读,用于观察定时器n的初值


编程方法如下:
定时器初始化()
{
设置预分频器prescaler (TCFG0)
设置MUX    (TCFG1)
赋初值TCNTB    TCNTB    =   (PCLK / (prescaler+1) / MUX) * 中断时间间隔(单位秒)

TCON: 手动跟新打开   
手动跟新关闭
自动装载(计时器循环计数) 
启动定时器  
}


中断初始化()
{

清除SRCPNF、INTPND中的相应中断标志位(可以调用ClearPending函数)
填入中断例程地址于中断向量表 pISR_EINTx
使能相应中断 rINTMSK
}


中断例程()  __irq
{
……中断程序……
清除SRCPNF、INTPND中的相应中断标志位
}


下面是定时器0试验程序:
//************************************************************************************************
void Main(void)
{     
    int i;
    ……硬件初始化……

int_time0_init();
time0_init();

while(1);
}

void int_time0_init(void)
{
Uart_Printf("Timer0中断实验n");
ClearPending(1<<10);     //清楚中断标志
pISR_TIMER0=(unsigned)timer0_ISR;  //填入中断例程地址于中断向量表
rINTMSK&=~(1<<10);       //TIME1开中断
}

void  time0_init(void)
{
rTCFG0 = rTCFG0 &(~0xFF) | 175;   //设置预分频器prescaler0 = 175
rTCFG1 = rTCFG1 &(~0xF) | 2;   //设置MUX0 = 1/8 
rTCNTB0 = PCLK/(175+1)/8;      //一秒,注意右值别溢出16位
rTCON |= 1<<1;       //开启手动更新,将TCNTB0的值载入定时器0
rTCON &= ~(1<<1);      //关闭手动更新(必须)
rTCON |= 1<<0 | 1<<3;     //开启定时器,自动装载模式

//关于中断时间的设定:    TCNTB =(PCLK / (prescaler+1) / MUX) *  中断时间间隔(单位秒)
}

void timer0_ISR(void)  __irq
{
n++;
Uart_Printf("Timer0 已经中断 %d 次n",n);
ClearPending(1<<10);     //清楚中断标志
}

//***********************************************************************************************************

运行结果如下:


关键字:裸机编程  定时器 引用地址:2440裸机编程之五 定时器

上一篇:LPC1778的IAP编程源码
下一篇:几乎是每个arm程序必备的启动代码

推荐阅读最新更新时间:2024-11-19 21:46

单片机定时器的应用与误差纠正
1 前言    定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性 。而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。随着定时要求的提高,在定时处理过程中所带来的误差需要校正 ,本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。 2 定时器工作方式与方式设置    MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式2是8位计数结构方式,计数器由TL8位组成,与其他方式不同
[单片机]
mini2440 简单touch screen驱动程序
模块加载后打印出水平和垂直方向的ad转换结果,没有做坐标的转换,只为学习一下touch screen接口的编程方法,代码记录如下: #include linux/errno.h #include linux/kernel.h #include linux/module.h #include linux/slab.h #include linux/input.h #include linux/init.h #include linux/serio.h #include linux/delay.h #include linux/platform_device.h #include linux/clk.h #in
[单片机]
17课:单片机定时器/计数器的方式控制字
从上一节我们已经得知,单片机中的定时/计数器都能有多种用途,那么我怎样才能让它们工作于我所需要的用途呢?这就要通过定时/计数器的方式控制字来设置。 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。 TMOD结构 从图1中我们能看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。 TCON结构 从图2中我们能看出,TCON也被分成两部份,高4位用于定时/计
[单片机]
ARM9_S3C2440学习(一)ARM体系的7种工作模式
一、ARM体系的CPU有以下7种工作模式: 1、用户模式(usr):正常的程序执行状态 2、快速中断模式(fiq): 3、中断模式(irq): 4、管理模式(svc):操作系统使用的保护模式 5、系统模式(sys):运行具有特权的操作系统任务 6、数据访问终止模式(abt):数据或指令预取终止时进入该模式 7、未定义指令终止模式(und):未定义的指令执行时进入该模式 注解: 可以通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式; 除用户模式外,其余6种工作模式都属于特权模式; 特权模式中除了系统模式以外的其余5种模式称为异常模式; 大多数程序运行于用户模式; 进入特权模式是为了处理中断、异常、或者访问
[单片机]
嵌入式stm32学习:系统定时器
bsp_SysTick.h #ifndef __SYSTICK_H #define __SYSTICK_H #include stm32f4xx.h void SysTick_Init(void); //定义初始化函数 void Delay_us(__IO u32 nTime); //单位10us //#define Delay_ms(x) Delay_us(100*x) //可自由配置中断时间,当前中断时间为1ms #endif /* __SYSTICK_H */ bsp_SysTick.c /** *********************************************
[单片机]
STM32学习笔记——利用通用定时器TIM2进行精确延时
1. 通用定时器概述及性能 1.1 概述 在作者所使用的stm32芯片上,共有TIM1 1个高级定时器以及TIM2、TIM3、TIM4共3个通用定时器。其中各通用定时器均由一个通过可编程预分频器驱动的16位自动装载计数器构成。适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。定时器是完全独立的,而且没有互相共享任何资源。它们可以一起同步操作。 1.2 性能 通用TIMx定时器特性包括: 16 位向上,向下,向上/向下自动装载计数器 16 位可编程预分频器,计数器时钟频率的分频
[单片机]
STM32学习笔记——利用通用<font color='red'>定时器</font>TIM2进行精确延时
Part8-不用内存怎么行_2440内存初始化lesson2
1、2440地址空间 先去找PCB原理图,看CPU引出的内存地址线和数据线的宽度。 说明内存的其实地址是0x30000000为起始地址。 初始化内存其实是去初始化存储器控制器,只有初始化好这个存储器控制器之后才能访问相应的芯片。 2、内存芯片的硬件连接 3、存储控制器 打开芯片手册,找到存储器控制器章节, 该寄存器分成了8个组,用于设置总线宽度和等待状态的寄存器,有8个组可控制8个BANK。 因为BANK7和BANK6用于接SDRAM的,因为原理图没有使用UB/LB,所以ST7位选择为0,WS7等待状态设置为0,DW7用于设置总线宽度,选择10为32位。BANK6的值与BANK的设置一样。 其他BANK不用保持默
[单片机]
Part8-不用内存怎么行_<font color='red'>2440</font>内存初始化lesson2
51单片机定时器中断程序
程序运行开始,A灯先亮5秒,然后灭了到B灯亮5秒,B再灭再到C灯亮5秒,C灭,程序结束,不再运行。这程序该怎么写?用定时器精确定时……晶振11.092MHZ。 #include REG52.H /* * */ sbit LED_A = P1^0; sbit LED_B = P1^1; sbit LED_C = P1^2; unsigned char TIME_BASE; unsigned char MACT_ENDB; unsigned char Rece_Errp; /* * 定时器初始化 */ void SystemInit(v
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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