欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    嵌入式系统原理及应用第9章ARM9定时器计数课件.ppt

    • 资源ID:1932460       资源大小:1.76MB        全文页数:74页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统原理及应用第9章ARM9定时器计数课件.ppt

    1,第9章 微处理器S3C2410A的定时/计数器,定时器部件在实时控制系统中起着举足轻重的作用,它可以实现对设备的周期性控制,同时使用定时器的PWM输出功能可以实现设备功率的控制,用于恒温控制系统等。S3C2410A芯片中的定时部件有多个,不同的定时部件有不同的用途。看门狗定时器(WATCHDOG)主要用来防止处理器的死机,需要在看门狗定时器规定的时间内喂狗,就是重新给看门狗定时器赋初值,否则时间到产生溢出复位信号,使ARM系统复位而重新启动;定时器(TIMER)主要用于定时或计数,还可用于脉宽调制PWM(Pulse Width Modulation)的控制;实时时钟RTC(Real Time Clock)主要用于为系统提供日历与实时钟信号。定时部件虽然种类较多,但它们的工作原理基本相同。本章主要介绍各自的原理与应用。,2,9.1 S3C2410A定时/计数器原理,定时器或计数器的逻辑电路是相同的,它们的主要区别在用途上。在应用时,定时器的输入信号来自于内部,是周期信号,从而通过计数实现了定时的功能;而计数器的输入信号一般来自于外部,是非周期信号,因而只能实现计数的功能。因此这样的逻辑电路被称为定时/计数器。图9-1是一般定时/计数器内部工作原理框图,它是以一个N位计数器(加1或减1)为核心,计数器的初值在编程时设置。计数器的输入脉冲分为2类:系统时钟和外部事件脉冲。微处理器S3C2410A使用的是具有减法功能的定时/计数器。,3,9.2 看门狗定时器(WATCHDOG),S3C2410A中看门狗定时器的作用是,当系统程序出现功能错乱,引起系统程序出现死循环时,是系统重新启动开始工作。嵌入式系统由于使用环境的复杂,即使用环境中有较强的干扰信号,或者系统程序本身的不完善,因而不能排除系统程序不会出现死循环现象。当系统使用看门狗部件时,如果系统出现了死循环,看门狗定时器将产生一个具有一定宽度的复位信号,强迫系统复位,恢复系统的正常运行。看门狗定时器必须在小于定时的时间周期内,对其重新赋初值(俗称“喂狗”) ,使看门狗定时器不会产生复位信号,系统正常运行。当系统程序出现死循环时,无法给看门狗定时器喂狗或者说不能执行喂狗函数,将会产生复位信号。,4,9.2.1 看门狗定时器的工作原理,S3C2410A看门狗定时器有2种工作模式: 带中断请求信号的常规时隙定时器。 产生内部复位信号的定时器,即当定时器的值为0时,产生一个宽度为128PCLK(系统时钟周期)的复位脉冲信号。图9-2是看门狗定时器的逻辑功能图。看门狗定时器一旦启动工作,看门狗定时器的计数常数寄存器(WTDAT)就无法自动地装载到计数寄存器(WTCNT)中。因此应该在看门狗定时器工作之前,通过初始化编程将计数常数寄存器(WTDAT)的值写入到计数寄存器(WTCNT)中。,5,9.2.2 看门狗特殊功能控制寄存器,S3C2410A芯片的看门狗定时器逻辑中有3个控制其操作的特殊功能寄存器:看门狗控制寄存器(WTCON);计数常数寄存器(WTDAT)和看门狗计数寄存器(WTCNT)。它们的属性如表9-1。,6,1. 看门狗控制寄存器(WTCON),7,2. 看门狗常数寄存器(WTDAT),看门狗常数寄存器WTDAT(Watchdog Timer Data Register)用来存储看门狗定时器的溢出时间间隔常数值。看门狗计数寄存器从此值开始做减法计数,直到变为0为时间间隔。计数公式如下: 计数常数=所需时间间隔/计数时钟周期T =所需时间间隔*(PCLK /(预分频值+1)/分割因子) WTDAT是可读写的,地址为0 x53000004,复位初值为0 x8000。其位功能如下表所示。,8,3. 看门狗计数寄存器(WTCNT),看门狗计数寄存器WTCNT(Watchdog Timer Counter Register)是一个实时动态变化的减法计数器,WTCNT工作时存储当前计数值。WTCNT是可读写的,地址为0 x53000008,复位后初值为0 x8000。看门狗计数寄存器的位功能描述如下表所示。,9,9.2.3 看门狗定时器应用示例1. Bootloader中的看门狗定时器编程,在系统启动引导的Bootloader程序中,由于这时ARM系统的部件初始化需要进行大量的工作,需要关闭看门狗定时器,就是设置看门狗控制寄存器WTCON的b5=0(看门狗定时器使能位无效),b0=0(禁止看门狗定时器的复位功能),与其它位无关,因此控制字可为0 x00,而且必须使用汇编语言编写程序。程序代码如下: WTDOG EQU 0 x53000000 ;定义WTCON的地址 LDR R0, =WTCON ; WTCON地址送R0 LDR R1, =0 x00 ;控制字0 x00送R1 STR R1, R0 ;控制字写入R0,2. 程序正常运行时的看门狗定时器编程 看门狗可以实现ARM系统的复位,不需要外围的控制电路。要实现看门狗的功能,需要对看门狗的特殊功能寄存器进行配置操作。编程流程如下: 看门狗定时器作为一般定时器使用时,需要设置看门狗的中断操作,因为这是看门狗作为一般定时器使用时的唯一用法。除包括ARM系统的各个中断寄存器的设置外,还要看门狗自身中断使能有效。如果作为ARM系统的看门狗使用,这一步不用设置。 设置看门狗控制寄存器WTCON,主要包括预分频值、分割因子,看门狗定时器复位信号输出使能b0=1(在看门狗定时器回0时复位信号有效)。 在预估的预分频值、分割因子的情况下,计算看门狗的定时常数。只要计算的结果不大于WTDAT的数值范围即2161均为有效数据。将定时常数赋给WTDAT寄存器和WTCNT寄存器。 启动看门狗定时器。使看门狗定时器使能位b5=1(使能有效电平信号)。,10,11,应用实例,使用看门狗功能时,必须事先进行初始化。初始化的主要工作就是设置WTCON寄存器和WTDAT寄存器。例如,实现S3C2410A芯片的看门狗功能,监测系统的周期不大于40us,PCKL=50Mhz。首先计算赋给WTDAT寄存器的初值。 初值40us*(PCKL/(预分频值+1)/分割系数) 注意:这里PCKL的单位是赫兹,预分频值和分割系数必须事先有一个固定的值。本例中预分频值=0,分割系数=16,即设置WTCON的值为0 x0021,允许看门狗定时器工作,允许看门狗复位信号有效。初值计算过程如下: 初值40*10-6*(50*106/(0+1)/16)=125=0 x7d 程序代码如下:,12,汇编语言代码段,WTCON EQU 0 x53000000WTDAT EQU 0 x53000004AREA Watchdog_Ini,CODE,READONLYENTRYCODE32 ldr r0,=WTDAT ;将WTDAT寄存器地址值赋给r0 ldr r1,=0 x7d ;将计数器初值0 x7d赋给r1 str r1,r0 ;将r1的内容写到以r0内容为地址的单元中 ldr r0,=WTCON ;将WTCON寄存器地址值赋给r0 ldr r1,=0 x0021 str r1,r0 END,C语言代码段,#define rWTCON=( *(volatile unsigned char*)0 x53000000)#define rWTDAT=( *(volatile unsigned char*)0 x53000004)#define rWTCNT=( *(volatile unsigned char*)0 x53000008)void watchdog40(void)rWTCON= (rWTCON /*设启动看门狗。看门狗复位使能、看门狗使能*/,13,14,9.3 具有脉宽调制(PWM)的定时器(TIMER),Timer部件主要用于提供定时功能,脉宽调制(PWM)功能,它的应用比较灵活,对于需要一定频率的脉冲信号,一定时间间隔定时信号的应用场合,都能提供支持。9.3.1 定时器Timer概述 S3C2410A芯片中有5个16位的Timer部件,其中Timer0 Timer3具有PWM功能, Timer4仅用于定时,不具有PWM功能,它没有输出引脚。 Timer0是一个同时具有死区(dead-zone)发生器,通常用于控制大电流设备。,15,9.3.2 TIMER部件的操作每个定时/计数器都是16位的减法计数器,是通过定时器自己的时钟驱动的。当计数器减到0时,可产生定时器中断请求信号,通知CPU定时器的操作已经完成了。此时定时/计数缓冲寄存器TCNTBn(Timer Counter Buffer Register n)的值将自动装载到递减计数器,开始下一轮的操作。但是,若定时器停止工作,则TCNTBn的值将不会重新装载到计数器中。定时器比较缓冲寄存器TCMPBn(Timer Compare Buffer Register n)的值用于脉宽调制。当计数器的值与比较寄存器的值相同时,定时器的逻辑将改变输出电平。因此TCMPBn确定脉宽调制信号输出的上升时间(或下降时间)。每个定时器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四种计数缓冲寄存器,其中定时器计数寄存器TCNTn(Timer Counter Register n)和定时器比较寄存器TCMPn(Timer Compare Register n)是内部寄存器(编程不可见),内部寄存器TCNTn的值可以通过计数观察寄存器读取。,16,17,9.3.2 TIMER部件操作(续),每个定时器读时都是16位的减法计数器,是通过定时器自己的时钟驱动的。当计数器减到0时,可产生定时器中断请求信号,通知CPU定时器的操作已经完成了。此时TCNTBn的值将自动装载到递减计数器,开始下一轮的操作。但是,若定时器停止工作,则TCNTBn的值将不会重新装载到计数器中。 TCMPBn的值用于脉宽调制。当计数器的值与比较寄存器的值相同时,定时器的逻辑将改变输出电平。因此TCMPBn确定脉宽调制信号输出的上升时间(或下降时间)。 每个定时器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四种计数缓冲寄存器,其中TCNTn和TCMPn是内部寄存器(编程不可见),内部寄存器TCNTn的值可以通过计数观察寄存器读取。,18,1. 自动重载和双缓冲器,S3C2410A处理器的定时器具有双缓冲功能,即在不停止当前定时器运行的情况下,重载下次定时器运行周期(或频率)的参数、PWM波形的占空比。主要是指向TCNTBn,TCMPBn寄存器赋值。装载新值之后,在按原参数运行完前周期后,在下一个新的周期,按新的设置参数运行。当内部寄存器TCNTn的值减到0时将自动装载TCNTBn的值到TCNTn中,并可重新开始进行减法计数,前提条件是自动重载允许。如果TCNTn0,但自动重载禁止,则定时器停止运行。,19,双缓冲功能编程图例,当内部寄存器TCNTn的值减到0时将自动装载TCNTBn的值到TCNTn中,并可重新开始进行减法计数,前提条件是自动装载功能允许。如果TCNTn0,但自动装载禁止,则定时器停止运行。,2. 复杂的定时器设置示例定时器初始化时,使用手动装载位和反转位。因为定时器的自动操作发生在减法计数器为0和TCNTBn没有预先赋值时。在这种情况下必须使用手动装载功能给TCNTBn赋初值。开启一个定时器的操作如下:向TCNTBn和TCMPBn中写入初值;定时器控制寄存器TCON(Timer Control Register)相关的手动装载位置1,不管是否需要反转位功能,都将反转位的开关打开;设置定时器控制寄存器TCON的相关启动位,同时清除其手动装载位;如果定时器被强行关闭,TCNTn就保持原有的计数值,且不从TCNTBn重新自动装载计数值。如果必须重新设置新值,则必须使用手动装载。定时器的操作示例如下,以图9-5进行叙述。,20,允许自动装载功能,给TCNTBn和TCMPBn赋值,这里控制TOUTn周期的TCNTBn=250,控制高电平持续时间的TCMPBn=150;使能手动装载功能,TCNTBn和TCMPBn的值将被复制到TCNTn和TCMPn寄存器中;最后设置在TCNTBn和TCMPBn的值分别为300和100,作为下一个周期定时器的工作参数。设置相应定时器的启动位为1,清除手动装载控制位为0,关闭反转开关,自动装载开始,定时器按照第一个设定的参数运行工作。当TCNTn的值等于TCMPBn的值时,TOUTn从低电平跳变到高电平。当TCNTn的值等于0时,定时器产生中断请求,同时TCNTBn=300和TCMPBn=100的值自动装载到TCNTn和TCMPn中,定时器使用这个参数将进行下一个周期的工作。在响应4)的中断服务程序中,对TCNTBn和TCMPBn重新赋值,这里分别是130和80,用于下一个周期的工作参数。当TCNTn的值等于TCMPBn的值时,TOUTn又从低电平跳变到高电平。重复4)的操作。在这个中断服务程序中,相应定时器的中断请求和自动装载功能被禁止,定时器将使用最后一个给定的参数工作完后,终止工作。同3)完成的操作相同。当TCNTn的值等于0时,由于自动装载被禁止,因此TCNTn将不再装载计数值,定时器停止工作。(11)不再产生中断请求,工作过程彻底结束。,21,22,3. 脉宽调制(PWM),PWM的频率由TCNTBn的值来确定,PWM的每个周期中高电平(或低电平)的持续时间由TCMPBn的值来确定。 如果TCON中某定时器的输出反转位置0(不反转),若要得到较高的PWM脉宽输出值(高电平持续时间),则需要增加TCMPBn的值;若要得到较低的PWM脉宽输出值,则需要减小TCMPBn的值。 如果TCON中某定时器的输出反转位置1(反转器被使能),若要得到较高的PWM脉宽输出值(高电平持续时间),则需要减小TCMPBn的值;若要得到较低的PWM脉宽输出值,则需要增加TCMPBn的值。 基于双缓冲器的功能,下一周期TCMPBn的值,可以在中断服务程序中,并且在当前的PWM周期内的任何时刻写入。,23,脉宽调制(PWM)设置图例,图中上面的波形是减法计数器的计数过程示意图,为画图方便,使用(216计数器值)。 两条横线代表TCMPB的取值,取值为(TCNTBnTCMPBn)。图例是在反转器关闭的情况下绘制的。,24,4. 输出电平控制,输出电平控制是通过定时器TCON中的输出反转位控制的。包括定时器输出TOUTn的初值及工作过程的波形。在定时器的反转器开关关闭(即反转位置0) ,可以控制TOUTn电平的高或低,方法如下。 关闭TCON自动重载位之后,TOUTn变为高电平,并且定时器在TCNTn=0时停止; 通过对定时器的启动/停止位清0停止定时器工作。如果TCNTn不大于TCMPn, TOUTn输出高电平;如果TCNTn大于TCMPn, TOUTn输出低电平; 通过对TCON中的输出反转位置1控制TOUTn输出反相。开关。反转位开关控制TOUTn的波形如下。,25,定时器反转位控制TOUTn图例,图例如下:,26,5. 死区(DZ Dead Zone)发生器,死区DZ(Dead Zone)是当定时器用于PWM,为大电流控制设备提供电能的时候,需要使用死区功能。这个功能允许在一个设备关闭和另一个设备开启之间插入一个时间间隔,可防止两个设备同时动作对电网及现场环境造成较大的危害。TOUT0是T0的PWM输出,nTOUT0是TOUT0的反相输出。如果允许死区功能,TOUT0和nTOUT0的输出波形就变为TOUT0_DZ和nTOUT0_DZ, nTOUT0_DZ在TOUT1引脚输出。定时器的死区功能使得TOUT0_DZ和nTOUT0_DZ不会同时发生变化。死区功能的波形图9-8所示。,27,死区功能允许波形图,死区允许波形图即在原波形图上将上升沿延迟一个死区间隔时间,而其下降沿的时间与原波形图相同。,6. DMA请求模式与中断,配置寄存器TCFG1中的DMA模式位可以用来控制定时器n产生DMA请求或中断使能,一个定时器只能在DMA方式或中断方式中选择其一,且最多只有一个定时器可以设置为DMA方式。现将TCFG1中的DMA方式位23:20设置如表9-5所示:,28,表9-5 DMA模式字对应表,29,30,9.3.3 TIMER部件内部功能寄存器,控制TIMER控件的操作,需要编程设置TIMER内部的许多功能寄存器。主要有: 定时器配置寄存器0(TCFG0); 定时器配置寄存器1(TCFG1) ; 定时器控制寄存器(TCON); TIMER0计数缓冲寄存器和比较缓冲寄存器(TCNTB0/TCMPB0); TIMER0计数观察寄存器(TCNTO0)。 以下分别予以介绍。,表9-6 定时器主要功能寄存器属性表,31,注意:表中的,对于不同的定时器取不同的数值,排列从定时器0开始到定时器3结束,按TCNTBn、TCMPBn、TCNTOn次序取值是0 x0C、0 x10、0 x14、0 x180 x30、0 x34、0 x38。说明数值序列是等差数列,等差为4。由于定时器4没有PWM功能输出,所以没有TCMPB4,它的TCNTB4、TCNTO4最后2位取值是0 x3C和0 x40。,32,1) 定时器配置寄存器0(TCFG0),TCFG0是可读写的,主要用来设置预分频系数的。其地址为0 x51000000,复位初值是0 x0。具体位定义如下:,33,2) 定时器配置寄存器1(TCFG1),TCFG1是可读写的,主要用来设置分割器值。其地址为0 x51000004,复位初值是0 x0。具体位定义如下:,34,2)TCFG1(Continue),35,TCFG0和TCFG1的联合作用,通过TCFG0和TCFG1的设置,可以确定各定时器预分频系数和分割器的值,最后通过以下公式计算定时器的输入时钟频率。 定时器输入时钟频率PCLK/(预分频值+1)/分割器值 预分频器系数范围0255 分割器取值域2,4,8,16,36,3. 定时器控制寄存器(TCON),定时器控制寄存器是可读写的,地址是0 x51000008,复位初值是0 x0。具体位定义如下表。,37,定时器控制寄存器(TCON)位定义(续),38,4. TIMERn的三个计数寄存器,TIMERn定时器的三个计数寄存器:有缓冲寄存器(TCNTBn)是可读写的;比较缓冲寄存器(TCMPBn)也是可读写的;和计数观察寄存器(TCNTOn),它是只读的。这里n=04,即指TIMER0 TIMER4。具体定义格式如下表。,39,4. TIMERn三个计数寄存器(续),从TIMER0-TIMER4它们的三个计数寄存器有相同的格式位定义,但是TIMER4没有比较计数寄存器。它们分别占用不同的物理地址,具体如下表。地址为。地址为。 Timer0的它们的复位初值均为0 x0。,9.3.4 定时器Timer应用示例,定时器的应用非常广泛,也很灵活,不同的应用需求,将决定定时器使用不同的编程方式。可归结为以下几种: 一种是作为定时器使用,需要根据定时时间和ARM系统提供的PCLK时钟,配置预分频值,分割器值计算数据缓冲寄存器的值等; 二种是作为计数器使用,分割器的值选TCLK0或TCLK1,将计数的初值赋给数据缓冲寄存器等,启动定时/计数器即可; 三种是作为周期脉冲信号的输出,即PWM输出,这时除需要一种的工作外,还要设置比较缓冲寄存器的数值,以决定在反转位=0时高电平的持续时间或反转位=1时低电平的持续时间。这一功能也可以用于恒温控制系统的功率调节(在一个周期内高电平的持续时间越长,直流分量越大,对应的平均功率越大),必要时可以使用死区这一功能。,40,1. 定时器的程序设计流程,1)设置配置寄存器0。内容是设置预分频器0或预分频器1的值,以及Timer0的死区宽度。 2)设置配置寄存器1。内容是各个定时器的分割器值,DMA方式或中断方式。 3)根据前2项的设置、PCLK的时钟,以及实际需要,计算计数缓冲寄存器TCNTBn和TCMPBn的初值并赋之。 4)设置定时器控制寄存器TCON。计数初值自动装载、手动装载位=1、设置反转位=1等。 5)重新设置定时器控制寄存器TCON。清除手动装载位、设置反转位=0,启动定时器。,41,42,2. 应用实例,实例需要产生一个500ms的PWM脉冲周期信号,高电平的持续时间占40%,系统的PCLK为66MHz。选用定时器TIMER0,要求从ARM的引脚TOUT0输出。编程叙述如下。1)根据需要的脉冲信号周期500ms及系统PCLK=66MHz,确定预分频系数和分割器值,并计算计数缓冲寄存器初值。本例预分频值取31,分割器值取16,则计数缓冲寄存器的初值计算如下: 初值定时间隔/(1/(PCLK/(预分频系数+1)/分割器值) =500ms*(66MHz/32/16)=500*10-3*(66*106/32/16) =64453=0 xfbc5 比较缓冲寄存器的初值=6445340%=0 x64b5,43,2)编写定时器程序:先设置TCFG0、TCFG1寄存器,再设置TCNTB0寄存器,最后设置TCON寄存器启动定时器工作。,3)编写程序#define rTCFG0 (*(volitale unsigned *)0 x51000000 /*定义定时器配置寄存器0地址*/#define rTCFG1 (*(volitale unsigned *)0 x51000004 /*定义定时器配置寄存器1地址*/#define rTCON (*(volitale unsigned *)0 x51000008 /*定义定时器控制寄存器地址*/#define rTCNTB0 (*(volitale unsigned *)0 x5100000C#define rTCOMB0 (*(volitale unsigned *)0 x51000010#define rGPBCON (*(volitale unsigned *)0 x56000010 /*定义B端口控制寄存器地址*/#define rGPBDAT (*(volitale unsigned *)0 x56000014 /*定义B端口数据寄存器地址*/#define rGPBUP (*(volitale unsigned *)0 x56000018 /*定义B端口上拉电阻寄存器地址*/,void timer0(void)GPBCON= rGPBCON | (20); /*设置GPB0为第2功能TOUT0*/ rGPBUP= rGPBUP /*手动装载清0,自动装载置1,并启动*/,44,45,9.4 实时时钟(RTC),S3C2410A提供RTC(Real Time Clock)实时时钟单元,在系统掉电后由后备电池供电继续工作。RTC是用于提供年、月、日、时、分、秒、星期等实时时间信息的定时部件。它由外部时钟驱动工作,时钟频率为32.768khz。 以下主要介绍它的工作原理、功能控制寄存器和编程方法。,46,47,9.4.1 RTC概述,RTC部件可以将提供实时信息的8位数据以BCD码的格式输出,同时还具有各种报警功能。其主要特点有: 1. 年、月、日、时、分、秒、星期等实时时间信息采用BCD码表示; 2. 闰年发生器; 3. 具有报警功能,提供报警中断或者系统在节电模式下的唤醒; 4. 拥有独立的电源引脚(RTCVDD); 5. 支持RTOS内核时间片所需的毫秒计时中断; 6. 进位复位功能。,48,9.4.1 RTC概述(续1),RTC部件提供专门的电源引脚可以由备用电源供电。当系统电源关闭时,微处理器接口和RTC逻辑电路均是断开的,后备电池仅驱动RTC部件的振荡器和BCD码计数器,以使功耗降到最低。在节电模式或正常运行模式下,RTC可以在特定的时候触发蜂鸣器。在正常运行模式下,激活的是报警中断信号(ARMINT)。在节电模式下,激活的是电源管理器部件的唤醒信号(PMWKUP)并同时激活报警中断信号(ARMINT)。RTC内部的报警寄存器(RTCALM)可以设置报警工作状态的使能/不使能以及报警时间的条件。,49,9.4.1 RTC概述(续2),RTC的时间片计时器用于产生一个中断请求,TICNT寄存器有一个中断使能位,和计数器中的值一起用来控制中断。当计数器的值变为0时,引起时间片计时中断。中断信号的周期计算如下: 周期s=(n+1)/128 其中n是时间片计数器中的值,范围在0127之间。RTC的时间片计时器可以用来产生实时操作系统内核所需的时间片。进位复位功能可以由RTC的进位复位寄存器(RTCRST)来控制。秒的进位周期可以进行选择(30、40、50),在进位复位发生后,秒的数值又循回到0。例如当前时间是23:37:47,进位周期选为40秒,则当前时间将变为23:38:00。,50,9.4.2 实时时钟RTC控制寄存器,RTC的内部有许多用于控制操作的寄存器。通过程序对这些寄存器进行设置,用户就可控制RTC部件的工作。以下介绍这些寄存器的功能及位定义。,51,1. RTC控制寄存器(RTCCON),RTC控制寄存器(RTCCON)是可读/写的,地址为0 x57000040,初值是0 x0。该寄存器仅使用4位,RTCEN控制BCD码寄存器的读写使能,同时控制微处理器和RTC间的所有接口的使能。因此,在系统复位后需要对RTC进行操作时,RTCEN=1。而在其它时间,RTCEN应清0,以防数据无意地写入到RTC的寄存器中。,52,RTC控制寄存器RTCCON的位定义,53,2. 时间片计数器(TICNT),计数器TICNT是可/读写的,地址为0 x57000044,初值为0 x0。具体格式定义如下表。,54,3. 报警控制寄存器(RTCALM),报警控制寄存器(RTCALM)是可读/写的,地址为0 x57000050,初值是0 x0。RTCALM的组成格式如下所示。注意:在节电模式下,RTCALM寄存器通过ALMINT和PMWKUP来产生报警信号;而在正常操作模式下,只通过ALMINT产生报警信号。,55,4. 报警秒数据寄存器(ALMSEC),寄存器ALMSEC是可/读写的,地址为0 x57000054,初值为0 x0。具体格式定义如下表。,56,5. 报警分数据寄存器(ALMMIN),寄存器ALMMIN是可/读写的,地址为0 x57000058,初值为0 x0。具体格式定义如下表。,57,6. 报警时数据寄存器(ALMHOUR),寄存器ALMHOUR是可/读写的,地址为0 x5700005C,初值为0 x0。具体格式定义如下表。,58,7. 报警日数据寄存器(ALMDATE),寄存器ALMDATE是可/读写的,地址为0 x57000060,初值为0 x01。具体格式定义如下表。,59,8. 报警月数据寄存器(ALMMON),寄存器ALMMON是可/读写的,地址为0 x57000064,初值为0 x01。具体格式定义如下表。,60,9. 报警年数据寄存器(ALMYEAR),寄存器ALMYEAR是可/读写的,地址为0 x57000068,初值为0 x0。具体格式定义如下表。,61,10. 循环复位寄存器(RTCRST),寄存器RTCRST是可/读写的,地址为0 x5700006C,初值为0 x0。具体格式定义如下表。,62,11. 秒数据寄存器(BCDSEC),寄存器BCDSEC是可/读写的,用来存储当前时间的秒数据,即合并的BCD码格式。地址为0 x57000070,初值不定。具体格式定义如下表。,63,12. 分数据寄存器(BCDMIN),寄存器BCDMIN是可/读写的,用来存储当前时间的分数据,即合并的BCD码格式。地址为0 x57000074,初值不定。具体格式定义如下表。,64,13. 时数据寄存器(BCDHOUR),寄存器BCDHOUR是可/读写的,用来存储当前时间的时数据,即合并的BCD码格式。地址为0 x57000078,初值不定。具体格式定义如下表。,65,14. 日数据寄存器(BCDDATE),寄存器BCDDATE是可/读写的,用来存储当前日期的日数据,即合并的BCD码格式。地址为0 x5700007C,初值不定。具体格式定义如下表。,66,15. 星期数据寄存器(BCDDAY),寄存器BCDDAY是可/读写的,用来存储当前日期对应的星期数据,即合并的BCD码格式。地址为0 x57000080,初值不定。具体格式定义如下表。,67,16. 月数据寄存器(BCDMON),寄存器BCDMON是可/读写的,用来存储当前日期的月数据,即合并的BCD码格式。地址为0 x57000084,初值不定。具体格式定义如下表。,68,17. 年数据寄存器(BCDYEAR),寄存器BCDYEAR是可/读写的,用来存储当前日期对应的年数据,即合并的BCD码格式。地址为0 x57000088,初值不定。具体格式定义如下表。,69,9.4.3 RTC编程举例(应用C语言编程),#define rRTCCON (*(volitale unsigned *)0 x57000040#define rTICNT (*(volitale unsigned *)0 x57000044#define rRTCALM (*(volitale unsigned *)0 x57000050#define rRTCRST (*(volitale unsigned *)0 x5700006C #define uint8 unsigned char uint8 year,month,day,wkday,hour,minute,second,flag;/*RTC初始化函数. 函数名:RTC_Init(void); 功能:初始化RTC,同时设置RTC的当前日期和时间*/void RTC_Init(void) year=14; /2014 month=11; day=18; wkday=4; /Thursday,70,9.4.3 RTC编程举例(续1),hour=11,minute=18,second=00; rRTCCON=(uint8)(rRTCCON|0 x01); /使能RTC读写操作 rRTCALM= (uint8)0 x0; /关闭所有的报警 rRTCRST=(uint8)0 x0; /关闭复位操作 rTICNT= (uint8)0 x0; /关闭时间片中断 rRTCCON=(uint8)(rRTCCON|0 xfe); /关闭RTC读写操作/*RTC写函数。函数名RTC_Write(void); 功能:完成将初始化函数中设置的日期与时间参数写到RTC中*/void RTC_Write(void) uint8 Y,MO,D,W,H,MI,S; /*以下完成将数据转换为BCD码*/ if(year1999)year=year-2000; Y=uint8(year/10*16+year%10);,71,9.4.3 RTC编程举例(续2),MO=uint8(month/10*16+month%10); D=uint8(day/10*16+day%10); W=uint8(wkday/10*16+wkday%10); H=uint8(hour/10*16+hour%10); MI=uint8(minute/10*16+minute%10); S=uint8(second/10*16+second%10); rRTCCON=(uint8)(rRTCCON|0 x01); /*使能RTC读写操作*/*将当前日期与时间参数写入各自的数据寄存器中*/ rBCDYEAR=Y, rBCDMON=MO, rBCDDATE=D, rBCDDAY=W; rBCDHOUR=H, rBCDMIN=MI, rBCDSEC=S; rRTCCON=(uint8)(rRTCCON|0 xfe); /关闭RTC读写操作,72,9.4.3 RTC编程举例(续3),/*RTC读函数。函数名RTC_Read(void); 功能:完成将RTC日期与时间的BCD码参数值读出*/void RTC_Read (void) uint8 Y,MO,D,W,H,MI,S; /*以下完成读RTC各数据寄存器BCD码*/ rRTCCON=(uint8)(rRTCCON|0 x01); /*使能RTC读写操作*/ Y=rBCDYEAR, MO=rBCDMON,D=rBCDDATE, W=rBCDDAY; H=rBCDHOUR, MI=rBCDMIN, S=rBCDSEC; rRTCCON=(uint8)(rRTCCON|0 xfe); /*关闭RTC读写操作*/ /*以下是将合并的BCD码转换为十进制数,放入对应的变量中*/,73,9.4.3 RTC编程举例(续4),Year=Y,74,第8章 习题,9-1 何为定时/计数器?定时与计数有什么区别?9-2 试述看门狗定时器的功能和主要控制寄存器的作用。9-3 看门狗定时器的主要作用是什么?在程序的编写工作中需要做什么工作?9-4 S3C2410A的看门狗有那些工作方式。设计一个监测系统程序周期不大于50us,在PCLK=100Mhz时的看门狗程序。9-5 试述S3C2410A的TIMER部件组成及主要功能。9-6 试述S3C2410A的TIMER部件的控制寄存器及主要功能。9-7 使用TIMER部件的TIMER1定时/计数器,设计产生一个周期为1000ms,占空比为1/2的脉冲信号。已知系统的PCLK=66Mhz,编写初始化程序。9-8 论述S3C2410A芯片中RTC部件的主要功能、主要控制寄存器的作用。9-9 编写使用RTC部件的初始化程序、设置当前日期与时间程序和读取RTC的当前日期和时间数据。,

    注意事项

    本文(嵌入式系统原理及应用第9章ARM9定时器计数课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开