ARM9基础教程lessen2—定时器

发布者:CelestialSoul最新更新时间:2015-11-16 来源: eefocus关键字:ARM9  定时器 手机看文章 扫描二维码
随时随地手机看文章
    上篇I/O控制文章中,程序需要延时时,我们是利用循环语句来实现。这种方法的延时简单,但不是很精确。当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。在这里,我们就介绍一下s3c2440定时器。

► S3C2440的时钟源
    在讲解之前,先介绍一下s3c2440时钟系统。一般来说,MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。
    UPLL是给USB提供48MHz。在这里,我们主要介绍MPLL。外部时钟源经过MPLL处理后能够得到三个不同的系统时钟:FCLK、HCLK和PCLK。
    ♥ FCLK是主频时钟,用于ARM920T内核;
    ♥ HCLK用于AHB总线设备,如ARM920T,内存控制,中断控制,LCD控制,DMA以及USB主模块;
    ♥ PCLK用于APB总线设备,如外围设备的看门狗,IIS,I2C,PWM,MMC接口,ADC,UART,GPIO,RTC以及SPI。
    这三个系统时钟(FCLK、HCLK和PCLK)是有一定的比例关系,这种关系是通过寄存器CLKDIVN中的HDIVN位和PDIVN位来控制的,因此我们只要知道了FCLK,再通过这两位的控制,就能确定HCLK和PCLK。
    而FCLK是如何得到的呢?它是通过输入时钟(即外部时钟源)的频率,经过一个计算公式(具体公式请查阅数据手册)得到的,这个计算公式还需要三个参数(MDIV、PDIV、SDIV),而这三个参数是经过寄存器MPLLCON配置得到的。
    最后,我们用最清晰的线路来绘制一下时钟的产生过程:
    外部时钟源→通过寄存器MPLLCON得到FCLK→再通过寄存器CLKDIVN得到HCLK和PCLK。
    这个配置过程在启动文件中就已完成。例如,外部晶振为12MHz,进过MPLL倍频以后得到400MHz的FCLK,而FCLK、HCLK、PCLK之间的比例关系为1:4:8,因此HCLK为100MHz,PCLK为50MHz。

► S3C2440的定时器特性
    S3C2440有5个16位的定时器,定时器0~3有脉宽调制功能(PWM)。定时器4没有输出引脚的内部定时器。定时器0有一个用于大电流设备的死区生成器。S3C2440定时器0和1共享一个8位的预分频器,定时器2、3、4共享另一个8位预分频器。每个定时器有一个时钟分频器,其中以生成5种不同的分频信号。
    每个定时器有一个自己的由定时器时钟驱动16位递减计数器,当递减计数器为零时,定时器中断请求生成通知CPU定时器操作完成。
    S3C2440定时器特性如下:
    ◎ 5个16位定时器
    ◎ 两个8位预分频器和2个4位分频器
    ◎ 输出波形的可编程任务控制
    ◎ 自动重载模式或单脉冲模式
    ◎ 死区生成器

► S3C2440的定时器寄存器
    S3C2440定时器:
    ● 定时器配置寄存器(TCFGn);
    ● 定时器控制寄存器(TCON);
    ● 定时器n计数缓存寄存器(TCNTBn),定时器n比较缓存寄存器(TCMPBn);
    ● 定时器计数观察计数器。
    定时器寄存器具体说明请查阅S3C2440芯片手册。

    ♥ 定时器配置寄存器(TCFGn)
    定时器配置寄存器用于配置两个8位预分频器值,该寄存器复位值为0,定时器输出时钟频率计算如下:
    定时器输出时钟频率 = PCLK / (预分频器值+1) / 分频值

    ● TCFG0配置寄存器:[0-7]配置定时器0,1的预分频值;[8-15]配置定时器2,3,4的预分频值。
    ● TCFG1配置寄存器:[0-3]配置定时器0分频值;[4-7]配置定时器1分频值;[8-11]配置定时器2分频值;[12-15]配置定时器3分频值;[16-149]配置定时器4分频值;

    ♥定时器控制寄存器(TCON)
    TCON寄存器用于控制定时器0~4,寄存器复位值为0。

 

TCON寄存器 描述
0~3 控制定时器0:使能[0]、手动更新[1]、匹配输出[2]、自动重载[3]
4 死区使能
8~11 控制定时器1:使能[8]、手动更新[9]、匹配输出[10]、自动重载[11]
12~15 控制定时器2:使能[12]、手动更新[13]、匹配输出[14]、自动重载[15]
1516~19 控制定时器3:使能[16]、手动更新[17]、匹配输出[18]、自动重载19]
20~22 控制定时器4:使能[20]、手动更新[21]、自动重载[23]

 



    ♥ 定时器n计数缓存寄存器(TCNTBn),定时器n比较缓存寄存器(TCMPBn)
    定时器计数与比较缓存寄存器用于缓存用户所给的定时值,当配置TCON寄存器定时器n使能“手动更新”时,该值将在下一个定时启动时装载到TCMPn与TCNTn中,重新进行定时。例如,定时器0内部结构如图所示:

    TCMP0与TCNT0不能直接对其操作。[page]

    ♥ 定时器计数观察计数器(TCNTOn)
    定时器计数观察计数器保存定时器计数器值(只读)。

► S3C2440定时器操作
    定时器启动后,TCNTn开始减一计数,当TCNTn 等于TCMPn时,TOUTn 反转,TCNTn继续减数。当TCNTn= 0 时,TOUTn 再次反转,并触发中断(中断已经使能)。若TCON 设为自动加载,TNCTn/TCMPNn 的值被重装。

    图中步骤如下:
    1、使能自动重载功能。设置TCNTBn为160,TCMPBn为110。设置手动更新位且配置反相器位(开/关)。手动更行位将TCNTBn和TCMPBn的值分别给TCNTn和TCMPn寄存器,然后设置TCNTBn=80和TCMPBn=40,决定下一个重载值;
    2、设置开始位,手动更新位为0,手动更新关闭且自动重载开启,定时器开始倒数计数;
    3、当TCNTn的值和TCMPn的值相同,TOUTn的逻辑电平从低变高;
    4、当TCNTn为0,中断请求生成且TCNTBn的值装载到一个临时寄存器中。在下一个定时器周期,TCNTn会用该临时寄存器的值重载;
    5、在中断服务程序中,TCNTBn和TCMPBn为下一个周期分别设置为80和60;
    6、当TCNTn的值和TCMPn的值相同,TOUTn的逻辑电平从低变高;
    7、当TCNTn为0,TCNTn用TCNTBn的值自动重载,并触发中断请求;
    8、在中断服务程序中,自动重载和自动请求被设无效以停止定时器;
    10、就算TCNTn为0,因为自动重载被设为无效,TCNTn不再重载且定时器停止;
    11、没有其他的自动请求生成。

► S3C2440定时器初始化
    以定时器0为例,启动定时器操作步骤大致如下:
    1、设置TCMPB0和TCNTB0寄存器;
    2、设置TCON寄存器,计数值进行装载;
    3、启动定时器;
    4、计数器重新被装载。
  1. void Timer0_init()
  2. {
  3.         TCFG0 = 119;                        //配置定时器0,1的预分频值
  4.         TCFG1 = 0x03;                        //配置定时器0分频值
  5.         TCNTB0 = 3125;                        //计数缓存寄存器
  6.         TCMPB0 = 0;                        //比较缓存寄存器
  7.         TCON |= (1<<1);                        //手动更新位且配置反相器位(开/关)(手动更行位将TCNTBn和TCMPBn的值分别给TCNTn和TCMPn寄存器)
  8.         TCON = 0x09;                        //定时器使能并自动重载
  9. }
复制代码
► 定时器报警实验
    ♥ 实验设备
    硬件:        PC机                                        一台
    YX-AIO嵌入式综合创新设计平台                        一台
    ARM9核心板                                        一块
    软件:        Windows操作系统,ADS1.2集成开发环境,H-JTAG下载环境

    ♥ 实验内容
    使用定时器延时方式控制YX-AIO嵌入式综合创新设计平台上的蜂鸣器报警。

    ♥ 实验步骤
    ① 在ADS开发环境中使用ARM9_S3C2440工程模版创建一个工程,并将程序代码添加到该工程;
    ② 在ADS开发环境中编译链接并生成目标文件;
    ③ 将JTAG下载器连接YX-AIO嵌入式综合创新设计平台,并将该平台通电;
    ④ 开启H-JTAG软件检测处理器与NOR-Flash;
    ⑤ 使用H-JTAG软件将目标文件(.bin)下载到YX-AIO嵌入式综合创新设计平台上;
    ⑥ 复位平台。

    源代码:
  1.  
  2. void  DelayMS(U32  dly)
  3. {
  4.         U32        time_val;
  5.  
  6.         rTCFG0 = 3;                        //配置定时器0,1的预分频值
  7.         rTCFG1 = 0<<4;                  //配置定时器1分频值
  8.  
  9.         time_val = PCLK/ (3+1) / 2 / 1000 - 1;     // 1ms = PCLK / prescaler / divider / 1000
  10.         
  11.         rTCNTB1 = time_val;            //计数缓存寄存器
  12.         rTCMPB1 = time_val>>1;      // 50%
  13.         
  14.         rTCON &= ~(0xf<<8);          //手动更新位且配置反相器位(开/关)
  15.         rTCON |= 0xb<<8;              //定时器使能并自动重载
  16.         rTCON &= ~(2<<8);             //clear manual update bit
  17.         
  18.         while(dly--)
  19.         {
  20.                 while(rTCNTO1>=time_val>>1);
  21.                 while(rTCNTO1>1);
  22.         }
  23. }
  24.  
  25. void Main(void)
  26. {
  27.         //----------------添加自己的代码-------------------
  28.         rGPACON &= ~(1<<16);
  29.         
  30.         while (1)
  31.         {
  32.                 rGPADAT |= (1<<16);
  33.                 DelayMS(1000);
  34.                 rGPADAT &= ~(1<<16);
  35.                 DelayMS(500);
  36.         }

关键字:ARM9  定时器 引用地址:ARM9基础教程lessen2—定时器

上一篇:系统时钟和定时器;MPLL和定时器
下一篇:与FCLK有关的软件延时思路

推荐阅读最新更新时间:2024-03-16 14:39

51单片机:定时器与中断系统的运用
#include regx52.h void Delay(int time) { while(time--) //while循环一次需要10us { } } void Timer0Init(void) //1毫秒@11.0592MHz { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x66; //设置定时初值 TH0 = 0xFC; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; EA = 1;
[单片机]
51单片机:<font color='red'>定时器</font>与中断系统的运用
MSP430F5438 定时器总结
1.MSP430F5438有三个定时器 TA0 TA1和TB,定时器的功能略有区别。 2.对于定时器TA1而言,有两个中断向量地址,其中比较匹配通道0具有单独的中断向量 3.MSP430中断向量的名称和TA0 TA1很难对应起来,需要通过中断向量地址来确认。 #define TIMER1_A1_VECTOR (48 * 2u) /* 0xFFE0 Timer1_A3 CC1-2, TA1 */ #define TIMER1_A0_VECTOR (49 * 2u) /* 0xFFE2 Timer1_A3 CC0 */ #define TIMER0_A1_VECTOR (53 * 2u) /* 0xFFEA T
[单片机]
MSP430F5438 <font color='red'>定时器</font>总结
采用NE555定时器环境湿度测试仪系统电路设计
  随着科技的发展,社会需要能够自动控制的监测设备,环境湿度测试仪就是一种用于环境湿度自动监测控制的设备。本文介绍基于计数器CC4060等构成的环境湿度测试仪,电路简单,调试方便,监测准确,精度高。湿度监测部分采用高分子薄膜式湿敏电容HS1100,具有不需校准的完全互换性,能瞬时退饱和。相对湿度在0%~100%RH范围内,电容量由162pF变到200pF,其误差不大于±2%RH,响应时间小于5 s,在55%RH、25℃、10 kHz条件下,其典型标称电容为180pF,供电电压一般选5 V,工作温度-40℃~100℃。HS1101用做湿度传感器时,测量电路有两种设计方案,一种是线性电压输出式,比例系数为正值;另一种是线性频率输出式,
[电源管理]
采用NE555<font color='red'>定时器</font>环境湿度测试仪系统电路设计
C51/C52的定时器计数器与中断
一、定时器/计数器简介 设置等待时间,到达等待时间之后执行指定的硬件操作。 定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,如果将定时器和IO结合起来就可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以产生PWM方波,定时器产生PWM控制电机状态是工业控制的普通。 ----------------------------------------------------------------------------------------------------------------------------------------------------------- 二、定时器/计数
[单片机]
C51/C52的<font color='red'>定时器</font>计数器与中断
ARM9学习笔记之——汇编
ARM系列芯片与PC系列(可能我说法不太准确)芯片在指令设计上就有本质的区别。ARM中每条指令是精简指令集要么是32位,要么是16位。而PC的指令是复杂指令集,一条指令可以由多个字节组成。 在写ARM汇编程序时,发现ARM的指令非常的灵活,同样一个功能可以使用多种方式实现。给开发者更多DIY的地方。以下是一些小总结,如有不正确的地方欢迎指正。 1. 关于函数调用方法 在ARM汇编中,函数调用非常灵活。 (1)BL指令 bl initmem ;调用 mem .... mov pc , lr ;返回 BL指令在编译时,是以当前指令地址为基准相对跳转
[单片机]
基于ARM9嵌入式平台的多标签多协议RFID读写器设计
1 RFID系统结构原理 无线射频识别技术是一种非接触的自动识别技术,常称为感应式电子晶片或近接卡、感应卡、非接触卡、电子标签、电子条码等。完整的RFID阅读系统是由读写器(Reacler)、应答器(Transponder)、天线(Antenna)三部分组成。其动作原理为Reader通过Antenna发射特定频率的无线电波能量给Transponder,用以驱动Transponder电路将内部ID Code送出,此时ReaGler便接收此IDCode。由于此ID Code的唯一性,所以RFID读写器可以实现对物体或商品的自动识别。RFID系统框图如图1所示。系统由中间件、读写器、应答器等部分组成。 射频识别系统的基本工
[单片机]
基于<font color='red'>ARM9</font>嵌入式平台的多标签多协议RFID读写器设计
stm32定时器TIM2的PWM输出PB3
弄了好久,查了很多文章,最后解决了,用的是PB3 引脚配置 void GPIO_TimPWM(void) {  GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); GPIO_InitStructure.GPIO_Mod
[单片机]
基于ARM9的SD/MMC卡控制器的ASIC设计
引言   如今多媒体数码产品的迅猛发展,其中,各种音频视频等功能的不断增强,使得系统对于存储介质的性能,容量,安全等方面的要求与日俱增。MMC卡和SD卡均是基于flash的存储设备,近年来,它们以高存储容量,快速的数据传输速率,加上极大的移动灵活性和更高的安全性已经成为闪存市场的标准,其广泛应用于手机,MP3,MP4,掌上电脑等各种产品中。可见,其已经成为面向便携式数码电子产品的SOC芯片中通用的功能接口。   文章设计的SD/MMC控制器基于一款3G手机基带芯片,其内核采用ARM926EJ,系统总线架构为AMBA,控制器连接到APB总线上。通过分析SD卡和MMC卡的规范,利用Verilog HDL实现了符合该规范的SD/MM
[工业控制]
基于<font color='red'>ARM9</font>的SD/MMC卡控制器的ASIC设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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