999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AM3359 和WinCE7.0平臺的RTC時鐘設(shè)計與實(shí)現(xiàn)

2017-06-20 08:28:38袁霞蒲實(shí)
軟件導(dǎo)刊 2017年4期
關(guān)鍵詞:設(shè)置

袁霞+蒲實(shí)

摘要:以運(yùn)行Windows CE7.0操作系統(tǒng)的AM3359主板為開發(fā)平臺,介紹了AM3359處理器、Windows CE7.0系統(tǒng)架構(gòu)和硬件接口電路,詳細(xì)闡述了在嵌入式平臺WinCE7.0操作系統(tǒng)中DS1388芯片驅(qū)動程序設(shè)計原理和實(shí)現(xiàn)過程。該軟件已應(yīng)用在某縫制終端系列設(shè)備中,為系統(tǒng)提供精準(zhǔn)的實(shí)時時鐘功能。

關(guān)鍵詞:AM3359處理器;WinCE7.0;RTC時鐘;DS1388芯片

中圖分類號:TP319

文獻(xiàn)標(biāo)識碼:A

文章編號:16727800(2017)004013504

0引言

當(dāng)AM3359處理器自帶RTC時鐘不能滿足用戶更高要求,或因PMIC輸出電壓不正常導(dǎo)致RTC功能受到影響時,需要在PCB布局中添加單獨(dú)的RTC芯片DS1388,直接由電池供電,以保證系統(tǒng)能正確設(shè)置、保存、獲取實(shí)時時間,掉電不消失。對于外接DS1388芯片,AM3359處理器BSP包中自帶的RTC驅(qū)動程序不能實(shí)現(xiàn)DS1388芯片的實(shí)時時鐘功能,需對RTC時鐘驅(qū)動重新編寫,完成芯片寄存器配置、實(shí)時時鐘讀寫以及初始化功能。

1平臺介紹

1.1AM3359處理器

AM3359是TI(德州儀器)基于 ARM Cortex-A8內(nèi)核的32位 RISC微處理器,支持主頻275-MHz、500-MHz、600-MHz和 720-MHz,因其價格便宜,支持操作系統(tǒng)齊全等特性,在工業(yè)控制、醫(yī)療電子、數(shù)控、汽車電子等行業(yè)的環(huán)境惡劣場合中廣泛應(yīng)用[1],功能框架如圖1所示。

1.2WinCE7.0操作系統(tǒng)

Windows Embedded Compact 7簡稱WinCE7.0,是一種安全可靠的實(shí)時高性能嵌入式操作系統(tǒng),其將最新的網(wǎng)絡(luò)、多媒體和通信技術(shù)封裝于小型設(shè)備中,具有搶占式多任務(wù)執(zhí)行特性和強(qiáng)大的通訊能力。WinCE7擁有Windows 7特點(diǎn),支持虛擬內(nèi)存機(jī)制,按需分配內(nèi)存和內(nèi)存映射文件,專門為信息設(shè)備、移動計算、消費(fèi)類電子產(chǎn)品和嵌入式應(yīng)用等非PC領(lǐng)域而設(shè)計,為不同的應(yīng)用和設(shè)備提供強(qiáng)大的可定制功能。WinCE7作為微軟最新一代Windows CE操作系統(tǒng),提供了新的功能和特性,適用于更為廣泛的設(shè)備類別和應(yīng)用場景,為消費(fèi)者提供更友好的人機(jī)界面和用戶體驗[2]。

基于Windows CE的嵌入式系統(tǒng)采用四層體系結(jié)構(gòu),具有層次性強(qiáng)、可移植性好、組件可剪裁、強(qiáng)調(diào)編程接口和支持上層應(yīng)用等特點(diǎn)。系統(tǒng)從下而上分為硬件層、OEM 硬件適配層、操作系統(tǒng)服務(wù)層、應(yīng)用層[3],系統(tǒng)架構(gòu)如圖2所示。

OAL部分負(fù)責(zé)Windows CE與硬件通信,它與CPU、中斷、內(nèi)存、時鐘和調(diào)試口等核心設(shè)備相關(guān),用于屏蔽CPU平臺細(xì)節(jié),保證操作系統(tǒng)內(nèi)核的可移植性[3]。RTC時鐘驅(qū)動在OAL層中開發(fā)實(shí)現(xiàn)。

DS1388 I2C實(shí)時時鐘(RTC)、監(jiān)控器、EEPROM是一個多功能器件,提供時鐘/日歷、可編程看門狗定時器、具有復(fù)位功能的電源監(jiān)視器和512字節(jié)EEPROM。時鐘部分可提供百分之一秒、秒、分鐘和小時等信息,工作于24小時制式或帶AM/PM指示的12小時制式。日歷部分提供星期、日、月和年信息。對少于31天的月份,可對月末日期自動調(diào)整,包括對閏年的校正。看門狗定時器可對沒有響應(yīng)的微處理器復(fù)位。可以以10ms為間隔,在0.01-99.99秒范圍內(nèi)編程。經(jīng)過溫度補(bǔ)償?shù)碾妷夯鶞?zhǔn)和比較器電路對VCC狀態(tài)進(jìn)行監(jiān)視。如果探測到主電源失效,器件自動切換至備份電源,驅(qū)動復(fù)位輸出為有效狀態(tài)。在失去VCC情況下,備份電源維持時鐘/日歷部分繼續(xù)工作。當(dāng)VCC恢復(fù)至正常電平時,復(fù)位輸出繼續(xù)保持為低一段時間,以等待電源和處理器工作穩(wěn)定。器件還具有一個按鍵式復(fù)位控制器[4],可通過I2C串行接口訪問該器件。RTC計算百分秒、秒、分、時、星期、日期、月和年,閏年修正有效期至2100年。

1.4開發(fā)環(huán)境

本文硬件平臺采用英蓓特提供的Devkit8600評估板,對某縫制設(shè)備終端訂制AMM3359開發(fā)板,軟件使用Devkit8600提供的BSP包并針對應(yīng)用進(jìn)行適配,基于Windows Embedded Compact7操作系統(tǒng) 和Visual Studio 2008進(jìn)行芯片驅(qū)動程序開發(fā)。

2硬件接口電路設(shè)計

DS1388芯片與 AM3359處理器之間使用I2C總線進(jìn)行連接通信,芯片的SCL腳和SDA腳分別與處理器的I2C0_SCL腳和I2C0_SDA腳相連,其它外圍電路不作描述。硬件接口電路設(shè)計如圖3所示。

3RTC時鐘驅(qū)動程序設(shè)計與實(shí)現(xiàn)

WinCE7.0中 RTC時鐘驅(qū)動是在OEM接口層即OAL層實(shí)現(xiàn)的,其源代碼位置在:\\WINCE700\\platform\\common\\src\\soc\\COMMON_TI_V1\\COMMON_TI_AMXX\\OAL\\OALRTC\\oalrtc.c文件中。

3.1工作原理

應(yīng)用層程序調(diào)用操作系統(tǒng)層的應(yīng)用API,通過OAL層的RTC時鐘驅(qū)動操作DS1388時鐘芯片,通過轉(zhuǎn)碼算法達(dá)到控制RTC實(shí)時時鐘目的,詳細(xì)流程見圖4。

3.2I2C總線驅(qū)動

處理器外接RTC的時鐘芯片通過I2C總線進(jìn)行訪問,本文通過使用I2C總線操作DS1388芯片寄存器,因此需確保I2C總線驅(qū)動正常運(yùn)行。BSP包中I2C驅(qū)動已全部實(shí)現(xiàn)并通過測試,本文不再詳述I2C驅(qū)動程序原理和實(shí)現(xiàn)過程。

3.3BCD與BIN轉(zhuǎn)碼

BIN碼就是二進(jìn)制編碼,用二進(jìn)制記錄數(shù)據(jù); BCD碼亦稱二進(jìn)碼十進(jìn)數(shù)或二、十進(jìn)制代碼,就是用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)的編碼。最常用的BCD編碼使用0-9這10個數(shù)值的二進(jìn)碼表示。〖BT3〗3.3.1BCD碼轉(zhuǎn)BIN碼算法bin = bcd低四位數(shù)值+bcd高四位值*10static UINT8 BCDtoBIN(UINT8 bt){ return (bt & 0xf) + (((bt & 0xf0) >> 4)* 10); }

3.3.2BIN碼轉(zhuǎn)BCD碼算法bcd 高四位= bin/10;bcd 低四位= bin%10static UINT8 BINtoBCD(UINT8 bt){ return (((bt/10) << 4) | (bt % 10));}

3.4時鐘設(shè)計與實(shí)現(xiàn)

在WinCE7.0中,RTC驅(qū)動主要實(shí)現(xiàn)3個重要函數(shù):①設(shè)置當(dāng)前時間:BOOL OEMSetRealTime( SYSTEMTIME *pSystemTime );②獲取當(dāng)前時間:BOOL OEMGetRealTime(SYSTEMTIME *pSystemTime);③設(shè)置報警時間:BOOL OEMSetAlarmTime(SYSTEMTIME *pSystemTime )。本文主要實(shí)現(xiàn)當(dāng)前時間的設(shè)置和獲取,以及芯片初始化功能[5]。

3.4.1參數(shù)宏定義對照DS1388芯片手冊,芯片寄存器定義如下:// Global variables#define MILLISECONDS_DS1388 0x0// MilliSeconds Register#define SECONDS_DS1388 0x1// Seconds Register#define MINUTES_DS1388 0x2 // Minutes Register……//定義時、周、天、月、年寄存器地址#define FLAG_REG 0xB// 芯片標(biāo)識寄存器#define CTRL_REG 0xC// 芯片控制寄存器#define BASE_YEAR_DS1388 2000 //系統(tǒng)初始時間#define MAX_YEARS 99static void *g_hI2C = NULL;OMAP_DEVICE i2cdev = 4 ;//I2C0設(shè)備號static UINT16 g_devAddr = 0x0068;//Write Mode,0xD1 :Read Modestatic UINT16 g_baseYear = 2000;

3.4.2設(shè)置時鐘函數(shù)實(shí)現(xiàn)

BOOL RTC_SetTime(LPSYSTEMTIME time){ UCHAR cmdBuffer[8]; //依次將年月日、周、天、時分秒等數(shù)據(jù)從BIN碼轉(zhuǎn)變?yōu)锽CD碼 cmdBuffer[SECONDS_DS1388] = (UINT32)BINtoBCD((UINT8)time->wSecond);…… cmdBuffer[WEEK_DS1388] = (UINT32)BINtoBCD((UINT8)time->wDayOfWeek); if( RTCI2CWrite(0,cmdBuffer,8)==FALSE)//通過I2C總線將數(shù)據(jù)寫入芯片寄存器 { OALMSG(1,(L"RTC_SetTime():Failed to write the date/time to the RTC.\\r\\n")); return FALSE; }}

3.4.3獲取時鐘函數(shù)實(shí)現(xiàn)

BOOL RTC_GetTime(LPSYSTEMTIME time){ UCHAR receiveBuffer[8]; if (RTCI2CRead(0,receiveBuffer,8) == FALSE) {//通過I2C總線從芯片寄存器中讀取當(dāng)前時間}//將BCD碼轉(zhuǎn)變成上層應(yīng)用識別的BIN碼并分別賦值給時間結(jié)構(gòu)體time的各個元素 time->wSecond = BCDtoBIN((UINT8)(receiveBuffer[SECONDS_DS1388] & 0x7F));…… time->wDayOfWeek = BCDtoBIN((UINT8)(receiveBuffer[WEEK_DS1388] & 0x7F)); time->wMilliseconds = 0;; return TRUE;}

3.4.4RTC時鐘初始化實(shí)現(xiàn)

BOOL OAL3XX_RTCInit(UINT32 rtc_base_pa,DWORD rtc_irq){ OALI2CInit(4);//I2C初始化 g_hI2C = I2COpen(i2cdev);//打開I2C RTCI2CWrite(CTRL_REG,&buf,1); // 設(shè)置 DS1388 控制寄存器}

4測試

4.1時鐘測試設(shè)置

當(dāng)WinCE啟動后,會在界面右下角看到時間顯示。在界面中設(shè)置時間,系統(tǒng)就會調(diào)用OEMSetRealTime將設(shè)置的時間寫入到RTC模塊并保存。測試情況如下: 開機(jī)初始化時間為2000.1.1 12:00,如圖5所示。設(shè)置時間為2016.8.17 8:54:25,保存,如圖6所示。 間隔幾分鐘后再次開機(jī)時間為2016.8.17 8:56:35,如圖7所示,測試結(jié)果表明實(shí)時時鐘設(shè)置運(yùn)行成功。

4.2時鐘測試獲取

WinCE啟動后,默認(rèn)情況下系統(tǒng)會每隔一段時間調(diào)用OEMGetRealTime函數(shù)獲得系統(tǒng)時間,這種方式稱為hardware mode。同樣用戶也可以通過調(diào)用Windows時鐘基本API,即編寫測試程序調(diào)用OEMGetRealTime獲取當(dāng)前時間,每隔1秒顯示一次當(dāng)前時間,部分代碼如下:

void Ctimer_testDlg::OnTimer(UINT_PTR nIDEvent){ SYSTEMTIME Time ,CString str,LPCTSTR lpctstr; GetLocalTime(&Time);//獲取當(dāng)前時間 //顯示當(dāng)前時間 str.Format(_T("%04d.%02d.%02d %02d:%02d:%02d"), Time.wYear,Time.wMonth,Time.wDay, Time.wHour,Time.wMinute,Time.wSecond ); lpctstr = str.GetBuffer(str.GetLength()+1); str.ReleaseBuffer(); SetDlgItemText(IDC_TIME,lpctstr); CDialog::OnTimer(nIDEvent);//實(shí)時顯示}

測試結(jié)果如圖8所示。

5結(jié)語

本文介紹了WinCE系統(tǒng)結(jié)構(gòu)和RTC時鐘工作原理,以外接DS1388 RTC時鐘芯片為例,闡述了在AM3359和WinCE7.0平臺下,DS1388時鐘芯片驅(qū)動程序的設(shè)計實(shí)現(xiàn)過程,并通過設(shè)置時間和獲取時間測試驗證了驅(qū)動程序。驅(qū)動程序運(yùn)行穩(wěn)定可靠,滿足設(shè)計要求。

參考文獻(xiàn):[1]劉洪濤,鄒南.ARM處理器開發(fā)詳解[M].北京:電子工業(yè)出版社,2012.

[2]Texas Instruments.AM335X arm Cortex-A8 mMicroprocessors (MPUs) technical reference manual[Z].Literature Number:SPRUH73H,2011.

[3]尹成,黃永兵,胡耀文,等.Windows CE 7開發(fā)實(shí)戰(zhàn)詳解[M].北京:人民郵電出版社,2012.

[4]李紅,馮慶勝,曾潔.實(shí)時時鐘芯片DS1388的原理和應(yīng)用[J].電子元器件應(yīng)用,2006(1):7274.

[5]周建設(shè).Windows CE 設(shè)備驅(qū)動及BSP開發(fā)指南[M].北京:中國電力出版社,2009.

(責(zé)任編輯:杜能鋼)

猜你喜歡
設(shè)置
中隊崗位該如何設(shè)置
少先隊活動(2021年4期)2021-07-23 01:46:22
船舶防火結(jié)構(gòu)及設(shè)置的缺陷與整改
水上消防(2020年5期)2020-12-14 07:16:18
中外醫(yī)學(xué)專業(yè)與專科設(shè)置對比分析及啟示
特殊場景下列控等級轉(zhuǎn)換的設(shè)置方案
7招教你手動設(shè)置參數(shù)
動車段(所)股道有效長設(shè)置研究
我國中小學(xué)將設(shè)置人工智能相關(guān)課程
玩具世界(2017年9期)2017-11-24 05:17:29
吃紙的妖怪
本刊欄目設(shè)置說明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
主站蜘蛛池模板: 中文字幕av无码不卡免费| 日韩精品亚洲一区中文字幕| 亚洲欧洲美色一区二区三区| 福利国产微拍广场一区视频在线 | 伊人福利视频| 手机永久AV在线播放| 日韩专区第一页| 日本一本正道综合久久dvd| h网站在线播放| 精品人妻无码中字系列| A级毛片高清免费视频就| 亚洲人成成无码网WWW| 夜夜高潮夜夜爽国产伦精品| 人妻精品久久无码区| 美女视频黄又黄又免费高清| 国产精品刺激对白在线| 国产乱子伦精品视频| 欧美一区精品| 高潮毛片无遮挡高清视频播放| 一级毛片无毒不卡直接观看| 97久久超碰极品视觉盛宴| www.99在线观看| 国产浮力第一页永久地址| 免费精品一区二区h| 国产高清在线观看91精品| 国产高潮视频在线观看| 乱人伦99久久| 内射人妻无码色AV天堂| 亚洲国产一成久久精品国产成人综合| 99久久精品国产综合婷婷| 日韩视频免费| 黄色免费在线网址| 粉嫩国产白浆在线观看| 精品视频一区二区三区在线播| 免费无码在线观看| 欧美69视频在线| 片在线无码观看| 国产黄色爱视频| 国产欧美日韩18| a级毛片毛片免费观看久潮| 久操中文在线| 青青青视频免费一区二区| 2020国产精品视频| 欧美午夜久久| 久久99国产精品成人欧美| 国产青榴视频在线观看网站| 精品久久久久久久久久久| 亚洲第一区欧美国产综合 | 免费无码又爽又黄又刺激网站 | 免费 国产 无码久久久| 亚洲日韩精品综合在线一区二区| 97se亚洲综合在线韩国专区福利| 欧美精品v欧洲精品| 思思热精品在线8| 欧美日本在线观看| 视频二区国产精品职场同事| 日本91视频| 秋霞国产在线| 91青青草视频| 一级毛片无毒不卡直接观看| 国产精品分类视频分类一区| 国产一区二区三区日韩精品| 欧美激情福利| 手机精品福利在线观看| 青青操国产视频| 精品视频在线观看你懂的一区| 伊大人香蕉久久网欧美| a毛片在线播放| 国产a v无码专区亚洲av| 在线观看免费AV网| 久久精品中文无码资源站| 亚洲日韩国产精品综合在线观看| 久久99这里精品8国产| 色首页AV在线| 亚洲精品在线观看91| 伦伦影院精品一区| 青青久久91| 蜜臀av性久久久久蜜臀aⅴ麻豆| 青青久久91| 欧美日韩国产系列在线观看| 欧美日韩精品在线播放| 久久免费精品琪琪|