您的位置:首页 > 其它

实验3 RTC定时器的应用及中断机制

2017-05-29 10:01 183 查看
实验目的及要求:

1、熟悉并掌握S3C2440的RTC部件功能,了解BCD码的使用;

2、熟悉并掌握RTC部件的相关寄存器格式;

3、熟悉并掌握RTC部件寄存器的初始化编程;

4、熟悉并掌握RTC部件的日期、时间的读写程序编写。

5、熟悉ARM9微处理器核的中断处理机制;

6、了解S3C2440芯片的中断控制结构及相关中断控制寄存器;

7、熟悉并掌握中断初始化程序编写;

8、熟悉并掌握S3C2440芯片中断源识别的编程;

9、熟悉并掌握中断服务程序编写

1、 RTC部件初始化

U8 Y,MO,D,W,H,MI,S;
//初始化RTC相关寄存器
year=17;
month=5;
day=16;
wkday=1;
hour=11;
minute=01;
second=56;
if(year>1999)year=year-2000;
Y=(U8)(year/10*16+year%10);
MO=(U8)(month/10*16+month%10);
D=(U8)(day/10*16+day%10);
W=(U8)(wkday);
H=(U8)(hour/10*16+hour%10);
MI=(U8)(minute/10*16+minute%10);
S=(U8)(second/10*16+second%10);

rRTCCON = (U8)(rRTCCON |0x01);             //进行RTC读写
rBCDYEAR=Y;             //对年数据寄存器进行复赋值
rBCDMON=MO;            //对月数据寄存器进行复赋值
rBCDDATE=D;             //对日数据寄存器进行复赋值
rBCDHOUR=H;            //对时数据寄存器进行复赋值
rBCDMIN=MI;             //对分数据寄存器进行复赋值
rBCDSEC=S;               //对秒数据寄存器进行复赋值
rRTCCON = (U8)(rRTCCON &0xfe);


对RTC相关数据寄存器进行赋值

实验结果:



2、 数据输出问题

本次实验采用了S3C2440异步串行通讯,使用了GPIO的H端口进行发送。

//初始化端口H的引脚功能为串口功能(UART0的功能引脚)
rGPHCON = (rGPHCON | 0x000000aa) & 0xffffffaa;
if (com==0)                     //com==0表示UART0
{
while((rUTRSTAT0&0x4)!=0x4);
WrUTXH0(data);
}


3、 关于中断产生问题

rTICINT = 0xbf;


设置RTC时间片计时器开中断,并且每0.5秒产生一个中断

实验结果:



4、中断服务程序设定问题:

由于RTC产生的是IRQ中断,所以为IRQ中断设置服务程序为RTC_TICK_ISR,本程序的作用为输出年月日时分秒,由于每0.5秒产生一个中断,所以产生了问题3的效果。

INTS_OFF();
SetISR_Interrupt(IRQ_NUM, RTC_TICK_ISR, NULL);
INTS_ON();


5、 关于为什么要用到while(1)程序

while(1)
{

}


这段程序主要是为了防止整个程序结束,利用本程序去等待中断的产生。保证了程序可以持续的执行。

总结:

本次实验熟悉了RTC部件的编写,也对中断的产生和中断服务程序的具体编写有了更详细的了解,本次实验的输出使用了第八章的异步串行通信,这让我对第八章的知识更加的熟悉了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: