版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章第八章 定时定时/ /计数器接口设计计数器接口设计2基于ARM的嵌入式系统接口技术本章学习目标与要求本章学习目标与要求1. 1. 掌握定时掌握定时/ /计数器的基本计数器的基本原理原理。2. 2. 掌握实时时钟掌握实时时钟RTCRTC的编程方法。的编程方法。3. 3. 掌握掌握看门狗定时器看门狗定时器的设计方法。的设计方法。4. 4. 掌握掌握ticktick中断中断的设计方法。的设计方法。5. 5. 掌握掌握PWMPWM的设计方法。的设计方法。3基于ARM的嵌入式系统接口技术定时控制部件定时控制部件定时部件是嵌入式系统中常用的部件,其主要定时部件是嵌入式系统中常用的部件,其主要用作定时
2、功能或计数功能。不同的定时部件在用作定时功能或计数功能。不同的定时部件在使用上有所差异,但它们的逻辑原理是相同的。使用上有所差异,但它们的逻辑原理是相同的。 S3C2410芯片中的定时部件有多个,不同的定芯片中的定时部件有多个,不同的定时部件有不同的应用。这里主要介绍其中的看时部件有不同的应用。这里主要介绍其中的看门狗定时器、门狗定时器、RTC部件和部件和Timer部件的控制原部件的控制原理及应用。理及应用。 8.1 8.1 工作场景导入工作场景导入5基于ARM的嵌入式系统接口技术8.1.1 工作场景一工作场景一设计一个简单的电子钟设计一个简单的电子钟可以在超级终端上显示实时时间的年月日时分秒
3、,可以在超级终端上显示实时时间的年月日时分秒,时间实时更新,即每秒钟更新;通常电子时钟校时间实时更新,即每秒钟更新;通常电子时钟校准时间只能校准时分,该闹钟可以实现秒校准;准时间只能校准时分,该闹钟可以实现秒校准;另外,可以设置在重要的时间点的报时功能。具另外,可以设置在重要的时间点的报时功能。具体功能如下。体功能如下。(1) 给系统设置一个起始时间,如给系统设置一个起始时间,如2010/12/25 09:35:00,星期六,要求时间每隔一秒更新显示,星期六,要求时间每隔一秒更新显示,即可以看到时间在一秒一秒变化(时间显示通过即可以看到时间在一秒一秒变化(时间显示通过串口通信在超级终端上显示)
4、。串口通信在超级终端上显示)。6基于ARM的嵌入式系统接口技术8.1.1 工作场景一工作场景一(2) 具有小范围校准秒时间的功能:当显示的时间有具有小范围校准秒时间的功能:当显示的时间有误差时,可以通过按键误差时,可以通过按键2(接外部中断(接外部中断EINT2),),在实时时间秒数大于在实时时间秒数大于40秒时,进位到整秒时间;秒时,进位到整秒时间;实时时间秒数小于实时时间秒数小于40秒时,退到秒时,退到00秒(如在秒(如在09:36:47时,按下按键时,按下按键2则变成则变成09:37:00;如在;如在09:36:37时,按下按键时,按下按键2则变成则变成09:36:00)实现时)实现时间
5、校准。间校准。(3) 设置电子钟的报时功能,在设置电子钟的报时功能,在2010/12/25 09:38:05时报时,报时时四只发光二极管时报时,报时时四只发光二极管闪烁三闪烁三次。次。7基于ARM的嵌入式系统接口技术引导问题引导问题 (1)如何设置实时时间?)如何设置实时时间?(2)如何使显示的时间每秒钟更新一次?)如何使显示的时间每秒钟更新一次?(3)通常的电子钟在校准时间时都只有小时和)通常的电子钟在校准时间时都只有小时和分钟的调整,而没有秒调整,那么如何得到准分钟的调整,而没有秒调整,那么如何得到准备到秒的时间?备到秒的时间?(4)如何设置电子钟报时的功能?)如何设置电子钟报时的功能?8
6、基于ARM的嵌入式系统接口技术8.1.2 工作场景二工作场景二带看门狗功能的电子钟带看门狗功能的电子钟如果在工作场景一中所制作的电子钟放在城市的如果在工作场景一中所制作的电子钟放在城市的马路上使用,由于无人职守,并且环境条件不好,马路上使用,由于无人职守,并且环境条件不好,可能会出现死机、程序跑飞(时间显示不正确)可能会出现死机、程序跑飞(时间显示不正确)等状况。要解决这个问题,需要增加看门狗的功等状况。要解决这个问题,需要增加看门狗的功能,当出现上述状况时,能够自动重启(假设内能,当出现上述状况时,能够自动重启(假设内部时钟正常,重新启动后会显示正确的时间)。部时钟正常,重新启动后会显示正确
7、的时间)。在实验环境中,通常程序不会出现问题,因此实在实验环境中,通常程序不会出现问题,因此实验中采用的方法是:加入看门狗后,定时喂狗则验中采用的方法是:加入看门狗后,定时喂狗则程序正常执行;如果人为修改程序不喂狗,则会程序正常执行;如果人为修改程序不喂狗,则会使实验箱重新启动。使实验箱重新启动。9基于ARM的嵌入式系统接口技术引导问题引导问题 (1)看门狗在程序中起什么作用?)看门狗在程序中起什么作用?(2)如何初始化看门狗?如何启动看门狗工作?)如何初始化看门狗?如何启动看门狗工作?(3)看门狗的定时时间间隔如何计算?)看门狗的定时时间间隔如何计算?10基于ARM的嵌入式系统接口技术8.1
8、.3 工作场景三工作场景三用蜂鸣器作闹铃声用蜂鸣器作闹铃声闹钟在报警时可以发出各种不同的显示效果。在闹钟在报警时可以发出各种不同的显示效果。在工作场景一工作场景一(3)中为简化程序使用的报警方法是让中为简化程序使用的报警方法是让发光二极管发光,通常闹钟报警时应该是发出声发光二极管发光,通常闹钟报警时应该是发出声音。因此我们给闹钟增加声音报警功能:修改工音。因此我们给闹钟增加声音报警功能:修改工作场景一作场景一(3)中的报警方法,改为当报警时间到时中的报警方法,改为当报警时间到时蜂鸣器响,并且用蜂鸣器响,并且用PWM控制蜂鸣器。控制蜂鸣器。11基于ARM的嵌入式系统接口技术引导问题引导问题 (1
9、)ARM中的定时部件有什么作用?中的定时部件有什么作用?(2)什么是)什么是PWM?(3)如何通过)如何通过PWM控制蜂鸣器发出不同的声音?控制蜂鸣器发出不同的声音?8.2 8.2 定时定时/ /计数器原理计数器原理13基于ARM的嵌入式系统接口技术8.2.1 定时定时/计数器计数器如果将定时器定时到如果将定时器定时到1分钟,那么秒针计数到分钟,那么秒针计数到60次后,时钟闹铃就会响。这里有个计数和定次后,时钟闹铃就会响。这里有个计数和定时之间的概念转化,时间表示为秒针计数值,时之间的概念转化,时间表示为秒针计数值,即秒针每一次走动的时间正好是即秒针每一次走动的时间正好是1s,走,走60次即次
10、即计数计数60次为次为1分钟。分钟。 14基于ARM的嵌入式系统接口技术定时部件的一般性原理定时部件的一般性原理定时定时/计数器内部工作原理图是以一个计数器内部工作原理图是以一个N位的加位的加1或减或减1计数器为核心,计数器的初始值由初始计数器为核心,计数器的初始值由初始化编程设置,计数脉冲的来源有两类:系统时化编程设置,计数脉冲的来源有两类:系统时钟和外部事件脉冲。钟和外部事件脉冲。 系统时钟M分频外部事件脉冲N位计数器=0回0信号初始值15基于ARM的嵌入式系统接口技术定时部件的一般性原理定时部件的一般性原理定时器或计数器的逻辑电路本质上是相同的,它们之间定时器或计数器的逻辑电路本质上是相
11、同的,它们之间的区别主要在用途上。它们都是主要由带有保存当前值的区别主要在用途上。它们都是主要由带有保存当前值的寄存器和当前寄存器值加的寄存器和当前寄存器值加1或减或减1逻辑组成。逻辑组成。定时器的计数信号定时器的计数信号是由内部的、周期性的时钟信号承担,是由内部的、周期性的时钟信号承担,以便产生具有固定时间间隔的脉冲信号,实现定时的功以便产生具有固定时间间隔的脉冲信号,实现定时的功能。能。计数器的计数信号计数器的计数信号是由非周期性的信号承担,通常是外是由非周期性的信号承担,通常是外部事件产生的脉冲信号,以便对外部事件发生的次数进部事件产生的脉冲信号,以便对外部事件发生的次数进行计数。因为同
12、样的逻辑电路可用于这两个目的,所以行计数。因为同样的逻辑电路可用于这两个目的,所以该功能部件通常被称为该功能部件通常被称为“定时定时/计数器计数器”。 16基于ARM的嵌入式系统接口技术定时部件的一般性原理定时部件的一般性原理若编程设置定时若编程设置定时/ /计数器为计数器为定时工作方式定时工作方式时,则时,则N N位计数器的计数脉冲来源于内部系统时钟,并经位计数器的计数脉冲来源于内部系统时钟,并经过过M M分频。每个计数脉冲使计数器加分频。每个计数脉冲使计数器加1 1或减或减1 1,当,当N N位计数器里的数加到位计数器里的数加到0 0或减到或减到0 0时,则会产生一个时,则会产生一个“回回
13、0 0信号信号”,该信号有效时表示,该信号有效时表示N N位计数器里的位计数器里的当前值是当前值是0 0。因为系统时钟的频率是固定的,其。因为系统时钟的频率是固定的,其M M分频后所得到的计数脉冲频率也就是固定的,因分频后所得到的计数脉冲频率也就是固定的,因此通过对该频率脉冲的计数就转换为定时,实现此通过对该频率脉冲的计数就转换为定时,实现了定时功能。了定时功能。 17基于ARM的嵌入式系统接口技术定时部件的一般性原理定时部件的一般性原理若编程设置定时若编程设置定时/计数器为计数器为计数方式计数方式时,则时,则N位计位计数器的计数脉冲来源于外部事件产生的脉冲信号。数器的计数脉冲来源于外部事件产
14、生的脉冲信号。有一个外部事件脉冲,计数器加有一个外部事件脉冲,计数器加1或减或减1,直到,直到N位计数器中的值为位计数器中的值为0,产生,产生“回回0信号信号”。N N位计数器里初始值的计算,在不同的定时部件位计数器里初始值的计算,在不同的定时部件中其具体的计算公式是不同的。中其具体的计算公式是不同的。 18基于ARM的嵌入式系统接口技术8.2.2 看门狗定时器看门狗定时器如果你养了一只狗,让狗看家护院,那么你必须如果你养了一只狗,让狗看家护院,那么你必须及时喂它,否则它可能不会给你看门,甚至可能及时喂它,否则它可能不会给你看门,甚至可能会咬你。会咬你。嵌入式系统经常工作在恶劣的环境下,或者需
15、要嵌入式系统经常工作在恶劣的环境下,或者需要在无人状态下连续工作,可能常常会受到来自外在无人状态下连续工作,可能常常会受到来自外界的各种干扰,造成程序紊乱(俗称程序跑飞),界的各种干扰,造成程序紊乱(俗称程序跑飞),而陷入死循环:程序的正常运行被打断,系统无而陷入死循环:程序的正常运行被打断,系统无法继续工作,造成整个系统陷入停滞状态,发生法继续工作,造成整个系统陷入停滞状态,发生不可预料的后果。不可预料的后果。19基于ARM的嵌入式系统接口技术8.2.2 看门狗定时器看门狗定时器对于嵌入式系统,人们想到在系统中设置一种能对于嵌入式系统,人们想到在系统中设置一种能够实时监测系统运行状态的功能,
16、当系统程序出够实时监测系统运行状态的功能,当系统程序出现功能错乱、引起系统程序死循环或无法运行下现功能错乱、引起系统程序死循环或无法运行下去时,这个功能能中断该系统程序的不正常运行,去时,这个功能能中断该系统程序的不正常运行,恢复系统程序的正常运行。恢复系统程序的正常运行。Watchdog timer,中文名称叫做,中文名称叫做“看门狗定时看门狗定时器器”,就是完成这种功能的部件。,就是完成这种功能的部件。看门狗定时器计时超时时也会引起事件的发生,看门狗定时器计时超时时也会引起事件的发生,只是这个事件除了可以是系统中断外,也可以是只是这个事件除了可以是系统中断外,也可以是一个系统重起信号一个系
17、统重起信号(Reset Signal),即能发送系,即能发送系统重起信号的定时器就是统重起信号的定时器就是watchdog。20基于ARM的嵌入式系统接口技术8.2.3 Timer部件部件Timer部件是主要用于提供定时功能的部件,能部件是主要用于提供定时功能的部件,能够满足人们控制时间的需求。够满足人们控制时间的需求。Timer部件作为定部件作为定时器,可以得到一定时间间隔的定时信号、一定时器,可以得到一定时间间隔的定时信号、一定频率的脉冲信号,充分显示了频率的脉冲信号,充分显示了“定时定时”的功能,的功能,而计时的功能是次要的。即而计时的功能是次要的。即Timer定时器通常用定时器通常用于
18、不带计时功能的定时,如于不带计时功能的定时,如“看门狗看门狗”就是一种就是一种定时器。定时器。21基于ARM的嵌入式系统接口技术8.2.3 Timer部件部件Timer部件的典型应用是脉宽调制部件的典型应用是脉宽调制(PWM)功能,功能,脉宽调制脉宽调制(PWM)是生成占空比可变、频率可变、是生成占空比可变、频率可变、相位可变的方波的设计方法。相位可变的方波的设计方法。PWM是利用微处是利用微处理器的数字输出来对模拟电路进行控制的一种非理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。制与变换等许多
19、领域。PWM的一个优点是从处的一个优点是从处理器到被控系统信号都是数字信号,无需进行数理器到被控系统信号都是数字信号,无需进行数模转换,数字信号可将噪声影响降到最小。模转换,数字信号可将噪声影响降到最小。8.3 实时时钟实时时钟23基于ARM的嵌入式系统接口技术8.3.1 RTC部件部件实时时钟部件实时时钟部件RTC是用于提供年、月、日、时、是用于提供年、月、日、时、分、秒、星期等实时时间信息的定时部件。分、秒、星期等实时时间信息的定时部件。 RTC部件可以将年、月、日、时、分、秒、星期部件可以将年、月、日、时、分、秒、星期等信息的等信息的8 8位数据以位数据以BCDBCD码格式输出。它由外部
20、时码格式输出。它由外部时钟驱动工作,外部时钟频率为钟驱动工作,外部时钟频率为32.768 kHz32.768 kHz晶体。晶体。同时同时RTCRTC部件还可以具有报警功能。部件还可以具有报警功能。 24基于ARM的嵌入式系统接口技术实时时钟在嵌入式系统中的作用实时时钟在嵌入式系统中的作用在一个嵌入式系统中,实时时钟单元可以其提在一个嵌入式系统中,实时时钟单元可以其提供可靠的时钟,包括时分秒和年月日;即使在供可靠的时钟,包括时分秒和年月日;即使在系统处于关机状态下它也能够正常工作(通常系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多采用后备电池供电),它的外围也不
21、需要太多的辅助电路,典型的就是只需要一个高精度的的辅助电路,典型的就是只需要一个高精度的晶振晶振25基于ARM的嵌入式系统接口技术S3C2410内部内部RTC模块结构框图模块结构框图 PMWKUP215时钟分频秒闰年发生器重置寄存器ALMINTRTCALMXTlrtc时钟滴答分时日期星期月控制寄存器年报警发生器XTortc时钟滴答发生器1Hz26基于ARM的嵌入式系统接口技术8.3.2 S3C2410 RTC的主要特点的主要特点年、月、日、时、分、秒、星期等信息采用年、月、日、时、分、秒、星期等信息采用BCDBCD码表示。码表示。闰年发生器,简单以判断最后两位为闰年发生器,简单以判断最后两位为
22、0000时为闰时为闰年,年,21002100年会出错。年会出错。具有报警功能,能提供报警中断或者系统在节具有报警功能,能提供报警中断或者系统在节电模式下的唤醒。电模式下的唤醒。拥有独立的电源引脚(拥有独立的电源引脚(RTCVDDRTCVDD)。)。支持支持RTOSRTOS内核时间片所需的内核时间片所需的毫秒计时中断。毫秒计时中断。进位复位功能。进位复位功能。 27基于ARM的嵌入式系统接口技术BCD码码BCD码是用码是用4位二进制数来表示位二进制数来表示1位十进制数中位十进制数中的的09这这10个数码,这种编码形式利用了四个个数码,这种编码形式利用了四个位元来储存一个十进制的数码。位元来储存一
23、个十进制的数码。RTC部件能将部件能将8位数据转换为位数据转换为BCD码的格式传送给码的格式传送给CPU。使。使用用BCD码存储各个时间值,码存储各个时间值,BCD码在二进制和码在二进制和十进制之间可以很容易的转换,因此使设置变十进制之间可以很容易的转换,因此使设置变得很简单。得很简单。28基于ARM的嵌入式系统接口技术8.3.2 S3C2410 RTC的主要特点的主要特点RTCRTC的时间片计时器用于产生一个中断请求,的时间片计时器用于产生一个中断请求,TICNT TICNT 寄存器有一个中断使能位,和计数器中的寄存器有一个中断使能位,和计数器中的值一起用来控制中断。当计数器的值变为值一起用
24、来控制中断。当计数器的值变为0 0时,时,引起时间片计时中断。中断信号的周期用下列公引起时间片计时中断。中断信号的周期用下列公式计算:式计算:周期周期=( n + 1 )/128s=( n + 1 )/128s n:时间片计数器的值,范围为时间片计数器的值,范围为1-1271-127RTCRTC的时间片计时器可以用来产生实时操作系统的时间片计时器可以用来产生实时操作系统内核所需要的时间片。内核所需要的时间片。29基于ARM的嵌入式系统接口技术8.3.3 S3C2410 RTC的基本操作的基本操作时钟产生寄存器时钟产生寄存器时间计数器组时间计数器组报警寄存器组报警寄存器组中断相关寄存器组中断相关
25、寄存器组30基于ARM的嵌入式系统接口技术RTC的基本操作的基本操作RTC的主要功能是的主要功能是提供时间信息提供时间信息和和产生与时间产生与时间相关的中断相关的中断。对对RTC的操作分为两部分:的操作分为两部分:RTC初始化初始化读读RTC时间或产生中断时间或产生中断31基于ARM的嵌入式系统接口技术RTC的初始化的初始化初始化初始化RTC时钟值时钟值中断设置中断设置启动启动RTC32基于ARM的嵌入式系统接口技术初始化初始化RTC时钟值时钟值初始化初始化RTC时钟值是通过设置时间计数器组完时钟值是通过设置时间计数器组完成的,时间计数器组包括成的,时间计数器组包括8个寄存器。一般设个寄存器。
26、一般设置其中七个:置其中七个:如:设置如:设置RTC时间为时间为“2009-11-23,星期一,星期一,10:30:02”33基于ARM的嵌入式系统接口技术1. RTC控制寄存器(控制寄存器(RTCCON)注意:读写注意:读写RTC寄存器前需要先将寄存器前需要先将RTCEN位置位置1,修改完各数据寄存器,修改完各数据寄存器后后,为防止无意修改为防止无意修改,设置设置RTCEN不使能,即不使能,即RTCEN位置位置0。另外还有一。另外还有一点需要注意的是点需要注意的是CNTSEL位,位,RTC默认是使用默认是使用BCD编码,这样对编码,这样对BCD时时钟寄存器的读写就变得非常方便。钟寄存器的读写
27、就变得非常方便。rRTCCON = 0 x01;/读写使能读写使能/设置各个时间计数器的值或者读出各个时间计数器的值设置各个时间计数器的值或者读出各个时间计数器的值rRTCCON = 0 x00;/禁止读写使能禁止读写使能符号位描述初始CLKRST3 实时时钟计数器复位0:不复位 1:复位0CNTSEL2 BCD计数选择,将计数器设置为BCD模式0:选择BCD模式 1:保留0CLKSEL1 BCD时钟选择0:将输入时钟进行1/223分频 1:保留0RTCEN0 RTC读写使能0:禁止 1:使能034基于ARM的嵌入式系统接口技术2. 时间计数器组时间计数器组35基于ARM的嵌入式系统接口技术秒
28、数据寄存器秒数据寄存器(BCDSEC)符号位描述初始状态SECDATA6:4 秒数据十位的BCD码值,范围为05-3:0 秒数据个位的BCD码值,范围为09如设置当前时间如设置当前时间2010年年9月月1日日9时时32分分00秒,星期三,其中秒数是秒,星期三,其中秒数是00秒,则可以设置如下。秒,则可以设置如下。要想获得当前实时时间的秒数,即读取秒数据寄存器的值,则编写要想获得当前实时时间的秒数,即读取秒数据寄存器的值,则编写如下的程序段。如下的程序段。/设置各个时间计数器的值,设置秒数据寄存器的值rBCDSEC = 0 x00;/rBCDSEC是BCDSEC寄存器的名字/读出秒数据寄存器的值
29、,放在已声明的变量sec中sec = rBCDSEC;/sec已声明的变量36基于ARM的嵌入式系统接口技术分数据寄存器分数据寄存器(BCDMIN)符号位描述初始状态MINDATA6:4 分数据十位的BCD码值,范围为05-3:0 分数据个位的BCD码值,范围为09如设置当前时间如设置当前时间2010年年9月月1日日9时时32分分00秒,星期三,其中分钟是秒,星期三,其中分钟是32分,则可以设置如下。分,则可以设置如下。要想获得当前实时时间的分钟数,则可以编写如下的程序段。要想获得当前实时时间的分钟数,则可以编写如下的程序段。/设置各个时间计数器的值,设置分钟数据寄存器的值rBCDMIN =
30、0 x32;/读出分钟数据寄存器的值,放在已声明的变量min中min = rBCDMIN; 37基于ARM的嵌入式系统接口技术时数据寄存器时数据寄存器(BCDHOUR)符号位描述初始状态reserved7:6保留HOURDATA5:4时数据十位的BCD码值,范围为02-3:0时数据个位的BCD码值,范围为09如设置当前时间如设置当前时间2010年年9月月1日日9时时32分分00秒,星期三,其中小时数秒,星期三,其中小时数是是09时,则可以设置如下。时,则可以设置如下。要想获得当前实时时间的小时数,则可以编写如下的程序段。要想获得当前实时时间的小时数,则可以编写如下的程序段。/设置各个时间计数器
31、的值,设置时数据寄存器的值rBCDHOUR = 0 x09;/读出时数据寄存器的值,放在已声明的变量hour中hour = rBCDHOUR;38基于ARM的嵌入式系统接口技术日数据寄存器日数据寄存器(BCDDATE)符号位描述初始状态reserved7:6保留DATEDATA5:4日数据十位的BCD码值,范围为03-3:0日数据个位的BCD码值,范围为09如设置当前时间如设置当前时间2010年年9月月1日日9时时32分分00秒,星期三,其中日期是秒,星期三,其中日期是1日,则可以设置如下。日,则可以设置如下。要想获得当前实时时间的日期值,则可以编写如下的程序段。要想获得当前实时时间的日期值,
32、则可以编写如下的程序段。/设置各个时间计数器的值,设置日期数据寄存器的值rBCDDATE = 0 x01;/读出日期数据寄存器的值,放在已声明的变量date中date = rBCDDATE;39基于ARM的嵌入式系统接口技术星期数据寄存器星期数据寄存器(BCDDAY)符号位描述初始状态reserved7:3保留-DAYDATA2:0星期数据的BCD码值,范围为17其余略其余略40基于ARM的嵌入式系统接口技术因为时间计数器组的各个寄存器都是定义为因为时间计数器组的各个寄存器都是定义为unsigned char类型,因此,类型,因此,rBCDYEAR寄存寄存器中也只能存放年份的最后两位,因此设置
33、时器中也只能存放年份的最后两位,因此设置时虽然设置的是四位十进制数,但保存的只是后虽然设置的是四位十进制数,但保存的只是后面的两位,而取出其中值的时候需要加上前两面的两位,而取出其中值的时候需要加上前两位值。位值。41基于ARM的嵌入式系统接口技术例例设置设置RTC时间为时间为“2009-11-23,星期一,星期一,10:30:02” rRTCCON = 0 x01; /读写使能rBCDSEC = 0 x02;rBCDMIN = 0 x30;rBCDHOUR = 0 x10;rBCDDAY = 0 x23;rBCDDATE = 0 x01;rBCDMON = 0 x11;rBCDYEAR =
34、0 x2009;rRTCCON = 0 x00;42基于ARM的嵌入式系统接口技术获取实时时间,即获取实时时钟当前时间、日期获取实时时间,即获取实时时钟当前时间、日期 rRTCCON = 0 x01;sec = rBCDSEC;min = rBCDMIN;hour = rBCDHOUR;day = rBCDDAY;date = rBCDDATE;mon = rBCDMON;year = 0 x2000 + rBCDYEAR;rRTCCON = 0 x00;43基于ARM的嵌入式系统接口技术8.3.3.2 报警中断报警中断可以在可以在RTC中设定在某个时间产生中断,该功中设定在某个时间产生中断,
35、该功能可通过报警中断来实现:能可通过报警中断来实现:当未屏蔽的报警时间寄存器和对应的时间计数当未屏蔽的报警时间寄存器和对应的时间计数器计数值都相匹配时,就产生报警中断,且输器计数值都相匹配时,就产生报警中断,且输出一个约为出一个约为1.8V的报警输出信号。的报警输出信号。通过设置报警控制寄存器即可设定报警中断的通过设置报警控制寄存器即可设定报警中断的产生时刻。产生时刻。例如:设置秒时钟告警,则设置:例如:设置秒时钟告警,则设置:rRTCALM = 0 x41;/0 x41表示使能表示使能RTC告警,以及使能秒时钟告警告警,以及使能秒时钟告警44基于ARM的嵌入式系统接口技术报警控制寄存器报警控
36、制寄存器(RTCALM) 符号位描述初始状态保留7保留0ALMEN6时钟告警总使能/禁止 0:禁止 1:使能0YEAREN5年时钟告警使能/禁止 0:禁止 1:使能0MONREN4月时钟告警使能/禁止 0:禁止 1:使能0DAYEN3日时钟告警使能/禁止 0:禁止 1:使能0HOUREN2时时钟告警使能/禁止 0:禁止 1:使能0MINEN1分时钟告警使能/禁止 0:禁止 1:使能0SECEN0秒时钟告警使能/禁止 0:禁止 1:使能045基于ARM的嵌入式系统接口技术日数据寄存器日数据寄存器(BCDDATE)报警控制寄存器(报警控制寄存器(RTCALM)用来确定报警功能是否使)用来确定报警功
37、能是否使能以及各报警时间寄存器是否使能(被屏蔽)。能以及各报警时间寄存器是否使能(被屏蔽)。RTCALM寄存器是可读寄存器是可读/写的写的如设置秒时钟告警,则需要使能总告警位和秒时钟告警如设置秒时钟告警,则需要使能总告警位和秒时钟告警位。位。 要设置报警时间为每天的要设置报警时间为每天的9时时35分分05秒,即相应的时分秒,即相应的时分秒各位都要匹配时报警,应该如下设置。秒各位都要匹配时报警,应该如下设置。/先设置报警时间,即设置相应的报警数据寄存器的值rRTCALM = 0 x41;/0 x41表示告警总使能bit6和使能秒时钟告警bit0/先设置报警时间,即设置相应的报警数据寄存器的值rR
38、TCALM = 0 x47;/0 x47表示告警总使能bit6=1并使能bit2:0=11146基于ARM的嵌入式系统接口技术报警时间数据寄存器报警时间数据寄存器47基于ARM的嵌入式系统接口技术报警秒数据寄存器报警秒数据寄存器(ALMSEC)(其余略其余略)符号位描述初始状态reserved7保留0SECDATA6:4 报警定时器秒数据的十位数BCD码值,范围为050003:0 报警定时器秒数据的个位BCD码值,范围为090000如设置报警时间为每天的如设置报警时间为每天的9时时35分分05秒,其中秒报警时间为秒,其中秒报警时间为05秒,秒,则可以如下设置。则可以如下设置。rALMSEC =
39、 0 x05;48基于ARM的嵌入式系统接口技术例例设置报警时间为每天的设置报警时间为每天的9时时35分分05秒,可以如秒,可以如下设置。下设置。 rRTCCON = 0 x01; /读写使能/以下六行设置各个报警数据寄存器的值rALMSEC = 0 x05;rALMMIN = 0 x35;rALMHOUR = 0 x09;rALMDATE = 0 x01;rALMMON = 0 x09;rALMYEAR = 0 x2010;rRTCALM = 0 x47;/报警总使能、时、分、秒报警使能rRTCCON = 0 x00;/禁止读写使能49基于ARM的嵌入式系统接口技术8.3.3.2 报警中断报
40、警中断若要在报警时间到时产生报警中断,还需要进行中断若要在报警时间到时产生报警中断,还需要进行中断设置,利用第六章的中断处理函数,可以如下设置设置,利用第六章的中断处理函数,可以如下设置 void _irq rtc_int_isr(void);/放在函数外,声明中断处理函数Irq_Request(IRQ_RTC, rtc_int_isr);/请求中断,IRQ_RTC为中断号/此处加入设置报警时间及方式的语句或函数调用Irq_Enable(IRQ_RTC);/使能中断/在中断处理函数里清除中断Irq_Clear(IRQ_RTC);50基于ARM的嵌入式系统接口技术8.3.3.2 报警中断报警中断
41、ALMEN使能,对应使能,对应RTCALM都相应使能。设都相应使能。设置相应告警时分秒寄存器。当置相应告警时分秒寄存器。当RTC时钟运行到时钟运行到跟我们设定的告警时钟值相等瞬间发生一次告跟我们设定的告警时钟值相等瞬间发生一次告警中断,警中断,RTC时钟跟告警时钟比较时,只是按时钟跟告警时钟比较时,只是按照照RTCALM中设定的使能的年月日时分秒顺序中设定的使能的年月日时分秒顺序比较,均想等时才发生,如果其中的比较,均想等时才发生,如果其中的RTCALM中的某位设为禁止,则不对此位作比即可。中的某位设为禁止,则不对此位作比即可。 51基于ARM的嵌入式系统接口技术8.3.3.3 进位复位功能进
42、位复位功能在在S3C2410的的RTC单元中有一个循环复位寄存单元中有一个循环复位寄存器器(RTCRST),具有进位复位的功能,即可以,具有进位复位的功能,即可以把实时时间直接调整到整分钟值,把秒置为把实时时间直接调整到整分钟值,把秒置为00。更具体地说,秒的进位周期可以选择,进位周更具体地说,秒的进位周期可以选择,进位周期可以设置为期可以设置为30、40、50。有两种调整方式:。有两种调整方式:大于设定的进位周期时,分钟数据加大于设定的进位周期时,分钟数据加1,秒置,秒置为为00;小于设定的进位周期时,分钟数据不变,;小于设定的进位周期时,分钟数据不变,秒置秒置00。这个功能类似于数学上。这
43、个功能类似于数学上“四舍五入四舍五入”的计算方法。的计算方法。52基于ARM的嵌入式系统接口技术8.3.3.3 进位复位功能进位复位功能例如,当进位周期选为例如,当进位周期选为40秒,若当前时间是秒,若当前时间是09:36:47,通过使能循环复位位,则当前时间,通过使能循环复位位,则当前时间将变为将变为09:37:00;若当前时间是;若当前时间是09:36:37,通,通过使能循环复位位,则当前时间将变为过使能循环复位位,则当前时间将变为09:36:00。进位复位功能是通过循环复位寄存器进位复位功能是通过循环复位寄存器(RTCRST)完成的。)完成的。 53基于ARM的嵌入式系统接口技术循环复位
44、寄存器循环复位寄存器(RTCRST)符号位描述初始状态SRSTEN3秒循环复位使能位1:使能 0:不使能0SCCR2:0 确定秒循环进位的周期011 = 超过30秒100 = 超过40秒101 = 超过50秒000秒的进位周期可以进行选择(30、40、50),在进位复位发生后秒,秒的数值又循回到0。例如,当前时间是23:37:47,进位周期选为40秒,则当前时间将变为23:38:00。54基于ARM的嵌入式系统接口技术8.3.3.4 时钟节拍中断时钟节拍中断RTC的时间片计时器即时钟节拍用于中断请求,的时间片计时器即时钟节拍用于中断请求,可以用来产生实时操作系统内核所需的时间片。可以用来产生实
45、时操作系统内核所需的时间片。在在TICNT寄存器中有一个时间片计数器,该寄寄存器中有一个时间片计数器,该寄存器共有八位,有一位中断使能位和一个计数存器共有八位,有一位中断使能位和一个计数数值数值n(n占占7位,因此位,因此n的取值范围为的取值范围为1127 (27-1=127),该计数器是减,该计数器是减1计数器,启动计计数器,启动计数后,当计数器的值减到数后,当计数器的值减到0后,则产生一个毫后,则产生一个毫秒级中断,叫做时间片计时中断或时钟节拍中秒级中断,叫做时间片计时中断或时钟节拍中断。断。55基于ARM的嵌入式系统接口技术实时时钟计数器实时时钟计数器(时间片计数器时间片计数器)TICN
46、T符号位描述初始状态TICK INT ENABLE7中断使能/禁止0:禁止 1:使能0TICK TIME COUNT 6:0 实时时钟计数器0000000当计数值减少到当计数值减少到0则产生时间片计时则产生时间片计时(时钟节拍时钟节拍)中断。中断。那么中断周期就是:那么中断周期就是:周期周期 = (n + 1)/128sec其中其中n为时间片计数器中的值为时间片计数器中的值(Tick time count value ),范围是,范围是1-127。56基于ARM的嵌入式系统接口技术8.3.3.4 时钟节拍中断时钟节拍中断例如,程序中设置每秒钟引发一次中断例如,程序中设置每秒钟引发一次中断 rR
47、TCCON = 0 x0;/禁止RTC寄存器读写使能rTICNT = 0 x7f | 0 x80;/TICK 中断使能,周期为(1+127)/128秒/0 x80即设置此寄存器的位7为1,使能时间片计数中断8.4 回到工作场景一回到工作场景一58基于ARM的嵌入式系统接口技术工作过程一工作过程一 1) 通过超级终端显示实时时间的时、分、秒通过超级终端显示实时时间的时、分、秒首先设置实时时间,然后读取实时时间值,并在首先设置实时时间,然后读取实时时间值,并在超级终端上打印出来。超级终端上打印出来。建立一个工程建立一个工程打开打开CodeWarrior IDE,新建一个工程,输入工,新建一个工程,
48、输入工程名程名rtc,存放在,存放在D:testrtc目录下;目录下;新建一个新建一个C语言源文件,输入文件名语言源文件,输入文件名rtctest.c,存,存放在放在D:testrtc目录下并加入到工程目录下并加入到工程rtc中。中。59基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序首先包含寄存器地址定义的头文件。首先包含寄存器地址定义的头文件。/* 包含文件 */#include 2410addr.h/*在此头文件中有对RTC中用到的寄存器的定义,例如#define rRTCCON(*(volatile unsigned char *)0 x57000
49、040) /RTC control#define rTICNT(*(volatile unsigned char *)0 x57000044) /Tick time count#define rRTCALM(*(volatile unsigned char *)0 x57000050) /RTC alarm control#define rALMSEC(*(volatile unsigned char *)0 x57000054) /Alarm second*/60基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序在程序中,定义一个函数在程序中,定义一个函数
50、rtcset(),用来设置当前,用来设置当前时间,函数的参数为要设置的时间,用数组(年时间,函数的参数为要设置的时间,用数组(年只存储后面两位)或结构体(可以表示不同的数只存储后面两位)或结构体(可以表示不同的数据类型)来定义此参数更加方便。假设设置的时据类型)来定义此参数更加方便。假设设置的时间为间为2010/12/25 09:35:00,星期六。,星期六。 定义一个结构体类型定义一个结构体类型rtc_date。typedef struct ST_DATE/定义结构体类型,该类型命名为rtc_dateshort year; / 年,定义为short类型,可以存储4位的年份charmon;/
51、月charday;/ 日charweek;/ 星期charhour;/ 时charmin;/ 分charsec;/ 秒 rtc_date;/用typedef定义结构体类型的别名为rtc_date61基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序 定义函数定义函数rtcset(rtc_date* p_date),用于设置系,用于设置系统的实时时间,其中统的实时时间,其中p_date是是rtc_date类型的结类型的结构体变量。构体变量。rtcset(rtc_date* p_date)rRTCCON = 0 x01; /读写使能rBCDSEC = p_dat
52、e-sec;/以下使用结构体成员赋值,rBCDMIN = p_date-min;/用指针取成员时用-运算符rBCDHOUR = p_date-hour;rBCDDAY = p_date-week;rBCDDATE = p_date-day;rBCDMON = p_date-mon;rBCDYEAR = p_date-year;rRTCCON = 0 x00;/禁止读写62基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序再定义一个获取时间的函数再定义一个获取时间的函数rtcget(rtc_date* p_date),用于取出实时时间。,用于取出实时时间。rt
53、cget(rtc_date* p_date)rRTCCON = 0 x01; /读写使能p_date-sec = rBCDSEC; /以下取出时间计数器组的值赋给结构体成员p_date-min = rBCDMIN;p_date-hour = rBCDHOUR;p_date-week = rBCDDAY;p_date-day = rBCDDATE;p_date-mon = rBCDMON;p_date-year = rBCDYEAR;rRTCCON = 0 x00;/禁止读写63基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序 实时时间要通过串口在超级终端上
54、显示,因此在实时时间要通过串口在超级终端上显示,因此在主函数中,首先要初始化时钟和串口,参见第十主函数中,首先要初始化时钟和串口,参见第十章,在这里仍然直接调用已有的函数设置。章,在这里仍然直接调用已有的函数设置。 void Main(void)SetClockDivider(1,1);SetMPllValue(0 xa1,0 x3,0 x1);Isr_Init();Port_Init();uart0_init();/下面是具体的对RTC的操作64基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序 因为要求每隔一秒更新显示时间,所以在这里利因为要求每隔一秒更
55、新显示时间,所以在这里利用秒中断,每秒中断一次,重新显示实时时间,用秒中断,每秒中断一次,重新显示实时时间,秒中断的设置也定义为函数,把相应的中断请求秒中断的设置也定义为函数,把相应的中断请求和中断使能都在函数中实现。和中断使能都在函数中实现。#include interrupt.h/包含处理中断相关的头文件void _irq rtctick_isr(void); /在主函数前声明中断处理函数rtc_tickset(char tick)pISR_TICK = (unsigned)rtctick_isr; /请求中断 rRTCCON = 0 x0;/设置前禁止对数据寄存器读写 rTICNT =
56、(tick&0 x7f)|0 x80;/bit7=1, 使能TICK中断,周期为(1+tick)/128秒 Irq_Enable(IRQ_TICK); /使能中断,在中断处理函数中清除65基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序 调用上面的两个函数进行实时时间的设置,再取调用上面的两个函数进行实时时间的设置,再取出实时时间,并设置一个全局变量,标识是否需出实时时间,并设置一个全局变量,标识是否需要更新显示的内容,最后把实时时间通过串口显要更新显示的内容,最后把实时时间通过串口显示在超级终端里。示在超级终端里。(程序清单见书上。)(程序清单见书上。)
57、上述写法,每隔一秒钟重新获取时间,再更新超上述写法,每隔一秒钟重新获取时间,再更新超级终端的显示。如果不用秒中断而直接在级终端的显示。如果不用秒中断而直接在while(1)循环中显示实时时间,如下面的写法,虽然也可循环中显示实时时间,如下面的写法,虽然也可以实时更新显示,但这样的写法,程序一直在取以实时更新显示,但这样的写法,程序一直在取时间并显示,浪费资源。时间并显示,浪费资源。66基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序while(1)rtcget(&m_date);Uart_Printf (“bbbbbbbb%02x:%02x:%02x”,m
58、_date.hour,m_date.min,m_date.sec);67基于ARM的嵌入式系统接口技术工作过程二工作过程二 编写编写rtctest.c程序程序 只要设置好了时间片中断计数器,到时间就会产只要设置好了时间片中断计数器,到时间就会产生中断,时间片中断的中断处理函数很简单,只生中断,时间片中断的中断处理函数很简单,只要更改一下标识,保证每秒钟重新到时间计数器要更改一下标识,保证每秒钟重新到时间计数器组取实时时间值。组取实时时间值。void rtctick_isr(void) Irq_Clear(IRQ_TICK); /清除TICK中断 flag+;/使flag=flag+168基于A
59、RM的嵌入式系统接口技术工作过程三工作过程三设置工程并编译工程设置工程并编译工程 加入需要的启动文件和其他需要的文件。加入需要的启动文件和其他需要的文件。加入加入2410init.s和和2410slib.s;加入加入2410lib.c,interrupt.c(从提供的光盘资料(从提供的光盘资料中拷贝到中拷贝到D:test目录),并在工程窗口的目录),并在工程窗口的Link Order标签页设置把它们放在主程序前面;标签页设置把它们放在主程序前面; 在工程属性对话框中的在工程属性对话框中的TargetAccess Paths设设置包含的头文件路径,对工程的置包含的头文件路径,对工程的ARM Li
60、nker进行进行设置,同前。设置,同前。 编译工程。编译工程。69基于ARM的嵌入式系统接口技术工作过程四、五工作过程四、五下载程序下载程序打开打开AXD Debugger,选择,选择File|Load Image命令,命令,加载要调试的文件加载要调试的文件D:testrtc rtc_DataDebugRelrtc.axf,将程序下载到目标系,将程序下载到目标系统。统。调试、运行调试、运行打开超级终端,下载完成后调试运行,可以在超级打开超级终端,下载完成后调试运行,可以在超级终端上看到实时时间年月日时分秒的显示。终端上看到实时时间年月日时分秒的显示。此工作场景是在超级终端上显示实时时间,也可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国热塑性聚烯烃(TPO)膜产业发展格局及需求趋势预测研究报告
- 2024-2030年中国沥青搅拌设备发展机遇与投资策略分析研究报告
- 2024-2030年中国染发剂行业销售状况及消费动态分析研究报告
- 2024-2030年中国散射通信设备市场深度调研与销售模式分析研究报告
- 2024-2030年中国多光束侧扫声纳行业发展方向及前景规划研究报告
- 2024-2030年中国不粘涂料行业应用动态及投资发展潜力研究报告
- 食品工程及设备课程设计
- 皮影校本课程设计
- 特种设备事故责任追究制度
- 科技公司加盟合同常见条款
- 2023年江门市基层公共就业创业服务岗位招聘考试真题
- 图解《黑神话悟空》微课件
- 矿石交易居间合同模板
- 2025届【九省联考】全国高三10月联考数学试题
- 第1-4单元测试卷(单元测试)-2024-2025学年四年级上册数学人教版
- 多功能板带材复合轧机的设计思路与控制方案
- 城市轨道交通车辆构造习题答案
- 2024年深圳市福田区选用机关事业单位辅助人员和社区专职工作者365人高频难、易错点500题模拟试题附带答案详解
- T-CECS120-2021套接紧定式钢导管施工及验收规程
- 人教版八年级上册数学期中考试试题含答案详解
- 美国实时总统大选报告
评论
0/150
提交评论