返回首页
当前位置: 主页 > Linux开发 > 嵌入式应用 >

嵌入式系统各个模块的基础实验

时间:2009-05-12 23:44来源:Linux Website 作者:admin 点击:
最近开始摸索GE01MB板子,从这篇文章开始,我将顺便记录各个模块的基础实验,同时也增加自己的熟练度。 实验一、实时时钟试验 一、实时时钟介绍 实时时钟(RealTimeClock)模块,主要
  最近开始摸索GE01MB板子,从这篇文章开始,我将顺便记录各个模块的基础实验,同时也增加自己的熟练度。
实验一、实时时钟试验
一、实时时钟介绍
    实时时钟(RealTimeClock)模块,主要提供系统实时时钟,产生连续中断和定时的功能,具有下列特点:
1)、提供年,月,日,分,时,秒计时;
2)、设置定时中断;
3)、提供看门狗功能(定时需要操作系统复位寄存器,否则产生中断或者复位);
4)、提供1/256秒~1秒软件可配置的连续中断;
5)、提供闰年判断机制;
6)、32.768KHz操作。
 
二、寄存器地址映射表以及各个寄存器说明
 
(1)、寄存器地址映射表
地址        寄存器名称    读/写  宽度      描述                  复位值
0x10002000 STA_YMOD     读/写  32       年、月、日计数寄存器     0x0000_0000
0x10002004 STA_HMS      读/写  32       小时、分钟、秒寄存器     0x0000_0000
0x10002008 ALARM_HM     读/写  32       定时小时、分寄存器       0x0000_0000
0x1000200c CTR          读/写  32       控制寄存器              0x0000_0001
0x10002010 INTREN       读/写  32       中断使能寄存器          0x0000_0010
0x10002014 INTRSTATUS   读     32       中断状态寄存器          0x0000_0000
0x10002018 SAMP         读/写  32       采样周期寄存器          0x0080_0080
0x1000201c WDCNT        读/写  32       Watch-Dog 计数值寄存器   0x8000_0080
0x10002020 WDSERVICE    写     32       Watch-Dog 服务寄存器     -
(2)、各个寄存器描述
 
1)、年、月、日计数寄存器(STA_YMOD)
Bits 31:27 ---- Reserved
STA_Y[10:0] ---- 年设定值
     用于设定RTC 时钟的年。取值范围0~2047。
Bits 15:12 ---- Reserved
STA_MO[3:0]---- 月设定值
     用于设定RTC 时钟的月。取值范围1~12
Bits 7:6 ---- Reserved
STA_D[5:0] ---- 日设定值
     用于设定RTC 时钟的日。取值范围1~31
 
注意:由于RTC 中两个时域的同步问题,此寄存器设置新值后不能立即读取到设置的新值。一般而言,经
过1~2 个CLK32 时钟周期之后才可以正确读取到更新的新值。
 
2)、小时、分、秒计数寄存器(STA_HMS)
Bits 31:29 ---- Reserved
STA_H[4:0] ---- 小时设定值
    设定RTC 时钟的小时。取值范围0~23。
Bits 23:22 ---- Reserved
STA_M[5:0] ---- 分设定值
    设定RTC 时钟的分钟。取值范围0~59。
Bits 15:6 ---- Reserved
STA_S[5:0] ---- 秒设定值
    设定RTC 时钟的秒。取值范围0~59。
 
注意:同年、月、日计数寄存器(STA_YMOD)。
 
3)、RTC Alarm 定时寄存器(ALARM_HM)
Bits 31:21 ---- Reserved
ALARM_H[4:0]---- 定时小时设定 设置定时器的小时。取值范围0~23。
Bits 15:6 ---- Reserved
ALARM_M[5:0]---- 定时分设定   设置定时器的分钟。取值范围0~59。
 
4)、RTC 控制寄存器(CTR)
Bits 31:2 ---- Reserved
WEN(1) ---- Watchdog Enable   Watchdog 使能控制位。
      0 = Watchdog disable
      1 = Watchdog enable
DIS(0) ---- RTC Disable       RTC使能控制位。控制TIMER 和SAMPLE 功能。
      0 = RTC enable
      1 = RTC disable
 
5)、RTC 中断使能寄存器(INTREN)
Bits 31:6 ---- Reserved
REN(5) ---- Reset Enable
        Watchdog 复位使能位。应用软件必须在RTC 的Watchdog 的计数器减到1 之前对Watchdog 进行访问,否则Watchdog 会产生复位信号(如果REN 位使能)。
           0 = Watchdog reset disable
           1 = Watchdog reset enable
WIE(4) ---- Watchdog Interrupt Enable
        Watchdog 中断使能位。RTC 的Watchdog 递减计数到1 时,如果中断使能则能够产生中断。
           0 = Watchdog interrupt disable
           1 = Watchdog interrupt enable
AIE(3) ---- Alarm Interrupt Enable
        RTC的Alarm 中断使能位。当RTC Alarm 定时寄存器和当前计时匹配时,如果此中断使能则可以产生中断。
           0 = Alarm interrupt disable
           1 = Alarm interrupt enable
MIE(2) ---- Minute Interrupt Enable
        RTC分钟中断使能位。如果此位使能,则每隔一分钟产生一次分中断。
           0 = Minute interrupt disable
           1 = Minute interrupt enable
SIE(1) ---- Second Interrupt Enable
        RTC秒中断使能位。如果此位使能,则每隔一秒产生一次秒中断。
          0 = Second interrupt disable
          1 = Second interrupt enable
SAE(0) ---- Sample Interrupt Enable
        RTC sample 中断使能位。如果RTC 使能,则RTC 通过sample 功能可以产生定时的中断信号。中断产生时间可以通过RTC 采样周期寄存器设置。
          0 = Sample interrupt disable
          1 = Sample interrupt enable
注、SAMPLE 功能可以设定一定间隔后产生中断。清除中断标志位后,经过相同的间隔后将再次产生中断。
 
6)、RTC 中断状态寄存器(INTRSTATUS)
Bits 31:5 ---- Reserved
WIF(4) ---- Watchdog Interrupt Flag
        Watchdog 中断标志位。当Watchdog 递减计数到1 且WIE 位使能,则此标志位置位。当向此位写“1”,可以清除该标志位。
         0 = No Watchdog interrupt occurred
         1 = Watchdog interrupt occurred
AIF(3) ---- Alarm Interrupt Flag
        Alarm中断标志位。当Alarm 定时寄存器的值和当前RTC 时间(小时和分)相匹配时且AIE 位使能,则此标志位置位。当向此位写“1”,可以清除该标志位。
         0 = No alarm interrupt occurred
         1 = Alarm interrupt occurred
MIF(2) ---- Minute Interrupt Flag
        Minute中断标志位。当RTC timer 每计时一分钟且MIE 位使能,则此标志位置位。当向此位写“1”,可以清除该标志位。
         0 = No minute interrupt occurred
         1 = Minute interrupt occurred
SIF(1) ---- Second Interrupt Flag
        Second中断标志位。当RTC timer 每计时一秒钟且SIE 位使能,则此标志位置位。当向此位写“1”,可以清除该标志位。
         0 = No second interrupt occurred
         1 = Second interrupt occurred
SAF(0) ---- Sample Interrupt Flag
        Sample中断标志位。当RTC sample 递减计数到1 且SAE 位使能,则此标志位置位。当向此位写“1”,可以清除该标志位。
         0 = No sample interrupt occurred
         1 = Sample interrupt occurred
7)、RTC 采样周期寄存器(SAMP)
SAMP[31:16] ---- Sample 值
        设置sample 模块中计数器的重新加载值。每次递减计数器计数到“1”(计数时间T)后,如果软件清除SAF 标志位则sample 模块的计数器使用SAMP[31:16]重新加载。
计数时间T = SAMP[31:16] / 32768 (秒)
当SAMP=0x80 时, T = 1/256 秒。
当SAMP=0x8000 时,T = 1 秒。
当SAMP=0x1 时, T = 0 秒。
SAMP=0x0和SAMP=0xffff 的T 值近似。

SYN_SAMP[15:0] ---- Synchronous Sample 值
        SYN_SAMP[15:0]位反映了sample 功能模块计数器的当前值。当其计数到“1”后,如果中断使能则产生中断。如果软件清除SAF 标志位则其加载SAMP[15:0]的值。也可以直接通过写操作改变当前计数器的值。
 
8)、Watchdog 计数值寄存器(WDCNT)
WDRELOAD[7:0] ---- Watchdog Relaod 值
        用于重新加载Watchdog 的计数器。当Watchdog 中断标志位WIF 被清除或者向Wathchdog 服务寄存器写0xAAAA 时,此值被加载到Watchdog 计数器中初始化计数器。

Bits 23:16 ---- Reserved
Bits 15:24 ---- Reserved

SYNC_WD[7:0] ---- Synchronous Watchdog 值
        当前Watchdog 计数器的值。当其递减计数到“1”时,如果WIE 位使能则可以产生中断;若REN 位使能则可以产生Watchdog 复位信号。当Watchdog中断标志位WIF 被清除或者向Wathchdog 服务寄存器写0xAAAA 时,WDRELOAD 的值被加载到其中。也可以直接通过写操作改变当前计数器的值。
 
9)、Watchdog 服务寄存器(WDSERVICE)
Bits 31:16 ---- Reserved
WDSERVICE(15:0) ---- Watchdog Service
        Watchdog服务位。当向这个地址写0xAAAA 时,WDRELOAD 的值被加载到Watchdog 的计数器中,阻止计数器递减到“1”,从而避免产生中断或复位。
 
三、实验代码流程
1)、时钟实验
    该实验主要是设计一个时钟显示器,用户可以在程序中定义当前的时间,从当前时间开始计时,每隔一分钟通过AXD 的Console 窗口可以打印出实际的时间。
2)、定时实验
    该实验主要是实现一个定时的功能,用户可以在程序中的set_alarm 函数中定义一个时间,等到当前时间与set_alarm 函数中的时间相等后可以通过AXD 的Console 打印出所定时的时间以实现闹铃功能。
 
第一部分、main函数之前的系统配置
可以参照GE01MB开发板的相关资料 中b __main之前的相关代码
 
第二部分、系统初始化(配置系统时钟、使能中断并屏蔽)、设置年月日时分秒、运行时钟和等待中断产生
代码流程:
ModuleRtc()---
--------------system_init()
------------------------------pmc_init()
------------------------------INT_INIT()
------------------------------serial_init()/*串行端口初始化*/
--------------unmask_irq()/* open rtc interrrupt mask */
--------------set_ymd()
--------------set_hms()
--------------set_alarm()
--------------run_rtc()/*设置相关控制寄存器*/
值得注意的是中断处理函数
通过在int_vec_handler.c中把相应的NULL改成自己定义的中断函数名就可以了。
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
发布者资料
admin 查看详细资料 发送留言 加为好友 用户等级:高级会员 注册时间:2009-04-02 15:04 最后登录:2010-05-27 14:05
推荐内容