网站导航: 首页 > 设计参考 > 正文 文章搜索
S3C2440 Windows CE的RTC模块驱动设计与实现[图]
 
文章编号:
081211150933
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3C2440,WinCE,RTC
文章来源:
网络,作者:田泽 曹庆年
摘 要:
本文首先对于S3C2440的硬件架构进行介绍,在此基础上对S3C2440的RTC功能模块的工作机理进行了分析,最后给出Windows CE.net下的RTC功能的驱动程序设计、实现...

    下面给出OEMGetRealTime()的源代码仅供参考。 

OEMGetRealTime(LPSYSTEMTIME lpst)
{
    volatile RTCreg *s2440RTC;
        s2440RTC = (RTCreg *)RTC_BASE;
    //RETAILMSG(1,(_T("OEMGetRealTime ")));
    //使能RTC
    s2440RTC->rRTCCON =0x1;
    lpst->wMilliseconds=0;
    lpst->wSecond= FROM_BCD(s2440RTC->rBCDSEC&0x7f);
    lpst->wMinute= FROM_BCD(s2440RTC->rBCDMIN&0x7f);
    lpst->wHour= FROM_BCD(s2440RTC->rBCDHOUR&0x3f);
    lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
    lpst->wDay= FROM_BCD(s2440RTC->rBCDDAY&0x3f);
    lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON&0x1f);
    //lpst->wYear=(2000+s2440RTC->rBCDYEAR);
    lpst->wYear=FROM_BCD(s2440RTC->rBCDYEAR)+2000;
    if(lpst->wSecond==0)
    {
        lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC&0x7f);
        lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN&0x7f);
        lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR&0x3f);
        lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
        lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY&0x3f);
        lpst->wMonth=FROM_BCD(s240RTC->rBCDMON&0x1f);
        lpst->wYear=(2000+s240RTC->rBCDYEAR);
    }
    //禁止RTC
    s2440RTC->rRTCCON=0;
    return TRUE;
}
3.3 系统I/O
  OAL代码层提供了与内核交互的函数,通过它内核可以获得硬件平台的信息 。在OAL层中,完成此功能的函数为OEMIOcontrol()。其函数原型如下:
 

Bool OEMIoContol(……)
{
    switch(dwIoContro1)
    {
        case IOCTL_HAL_INIT_RTC;
    if(nInBufSize>= sizeof(SYSTEMTIME))
        return OEMSetRealTime((LPSYSTEMTIME)lpInBuf);
    else
        return FALSE;
    break;
    ……
    defaultreturn FALSE;
}
 

    WinCE每次启动时都会由KernelIoContrl()函数调用OEMIOcontrol(),完成底层硬件信息的读取,其中参数dwIoControl为内核与OAL通信的控制代码,通过它可以完成硬件信息的读取。控制代码一般都是微软定义好的,其中RTC模块定义的控制代码为IOCTL_HAL_INIT_RTC,通过它内核可以完成底层RTC模块的初始化。
    nInBufSize是由lpInBuf(指针)指向的缓冲区的大小,缓冲区是按字节大小计算的。SYSTEMTIME是WinCE内部定义的一个表示时间的结构体,LPSYSTEMTIME为指向此结构体的指针。SYSTEMTIME结构体原型如下,原型中定义了字格式的年、月、星期、日、时、分、秒、毫秒。

typedef struct _SYSTEMTIME
{
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSeeond;
    WORD wMilliseconds;
}SYSTEMTIME;


    在本设计中,RTC的时间分辨率为“秒”,这是因为S3C2440的RTC模块所能提供的最小时间基准就是“秒”。用户可以根据实际需求编写系统I/O下的RTC初始化代码,也可以禁止这部分代码。若WinCE从OAL层读不到时钟参数的话,它会以系统的默认时间值来初始化SYSTEMTIME结构体。

4 结束语
    当前比较流行的ARM嵌入式处理器,如Samsung的S3C系列、Intel的Xscale系列、Motorola的龙珠系列等几乎都内嵌有RTC模块。使许多嵌入式产品如手机、PDA等的时间显示丰富多彩,如具有显示阳历、阴历、万年历等功能。本文给出了RTC模块的WinCE驱动程序实现,基于本设计可以进一步开发如时钟界面等时钟应用功能,以满足多姿多彩的嵌入式系统对于时钟功能的应用需求。

 
相关文章:

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4