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

来源:互联网 发布:matlab中对矩阵的提取 编辑:程序博客网 时间:2024/05/14 18:01

实验目的及要求:
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部件的编写,也对中断的产生和中断服务程序的具体编写有了更详细的了解,本次实验的输出使用了第八章的异步串行通信,这让我对第八章的知识更加的熟悉了。

原创粉丝点击