新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440 Windows CE的RTC模塊驅動設計與實現

        S3C2440 Windows CE的RTC模塊驅動設計與實現

        作者: 時間:2013-03-30 來源:網絡 收藏

          

        下面給出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->rBCDSEC0x7f);
          lpst->wMinute= FROM_BCD(s2440RTC->rBCDMIN0x7f);
          lpst->wHour= FROM_BCD(s2440RTC->rBCDHOUR0x3f);
          lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
          lpst->wDay= FROM_BCD(s2440RTC->rBCDDAY0x3f);
          lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON0x1f);
          //lpst->wYear=(2000+s2440RTC->rBCDYEAR);
          lpst->wYear=FROM_BCD(s2440RTC->rBCDYEAR)+2000;
          if(lpst->wSecond==0)
          {
          lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC0x7f);
          lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN0x7f);
          lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR0x3f);
          lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
          lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY0x3f);
          lpst->wMonth=FROM_BCD(s240RTC->rBCDMON0x1f);
          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;
          ……
          default: return FALSE;
          }
          

        WinCE每次啟動時都會由KernelIoContrl()函數調用OEMIOcontrol(),完成底層硬件信息的讀取,其中參數dwIoControl為內核與OAL通信的控制代碼,通過它可以完成硬件信息的讀取。控制代碼一般都是微軟定義好的,其中定義的控制代碼為IOCTL_HAL_INIT_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的時間分辨率為“秒”,這是因為所能提供的最小時間基準就是“秒”。用戶可以根據實際需求編寫系統I/O下的RTC初始化代碼,也可以禁止這部分代碼。若WinCE從OAL層讀不到時鐘參數的話,它會以系統的默認時間值來初始化SYSTEMTIME結構體。

          4 結束語
          
          當前比較流行的ARM嵌入式處理器,如Samsung的S3C系列、Intel的Xscale系列、Motorola的龍珠系列等幾乎都內嵌有RTC模塊。使許多嵌入式產品如手機、PDA等的時間顯示豐富多彩,如具有顯示陽歷、陰歷、萬年歷等功能。本文給出了RTC模塊的WinCE驅動程序實現,基于本設計可以進一步開發如時鐘界面等時鐘應用功能,以滿足多姿多彩的嵌入式系統對于時鐘功能的應用需求。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 开阳县| 徐汇区| 喜德县| 名山县| 腾冲县| 县级市| 上饶县| 新宁县| 武功县| 兰溪市| 嘉善县| 蒲江县| 洱源县| 金门县| 漳平市| 溧水县| 富阳市| 营口市| 保亭| 星座| 盐山县| 山阳县| 沂源县| 东丰县| 涞源县| 盐津县| 江阴市| 庄浪县| 桑植县| 彩票| 南漳县| 托克逊县| 胶州市| 阿拉尔市| 华安县| 连平县| 云阳县| 滦平县| 锦州市| 洮南市| 鄂托克旗|