Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共2 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]
[瀏覽完整版]

標(biāo)題:基于WinCE6.0的LPC3250串口驅(qū)動(dòng)程序開(kāi)發(fā)

1樓
wangxinxin 發(fā)表于:2010-11-26 10:34:15
在Clpc32xxPdd16550UART的Init函數(shù)中,GetIsrInfo以串口的Active注冊(cè)表鍵為依據(jù)查出物理中斷號(hào),并保存在 DDKISRINFO結(jié)構(gòu)體的dwlrq成員中。KernelloCon-trol函數(shù)將物理中斷號(hào)轉(zhuǎn)換為邏輯中斷號(hào),符合條件就將邏輯中斷號(hào)回寫(xiě)到注冊(cè)表中。相關(guān)代碼如下:

圖片點(diǎn)擊可在新窗口打開(kāi)查看

  接著調(diào)用父類CPdd16550的Init函數(shù),創(chuàng)建中斷服務(wù)線程(IST)事件,并通過(guò)InterruptInitialize函數(shù)將事件與邏輯中斷號(hào)關(guān)聯(lián)起來(lái),最后調(diào)用CreateHardwareAccess和MapHardware函數(shù)將串口基地址及相關(guān)寄存器片內(nèi)地址映射到內(nèi)核進(jìn)程的虛擬地址。

  在MapHardware中,用GetWindowInfo根據(jù)串口的Active注冊(cè)表鍵獲得串口的全部I/O端口和內(nèi)存地址信息,然后用 MmMapIoSpace函數(shù)將串口物理地址和相關(guān)控制寄存器地址轉(zhuǎn)換成內(nèi)核進(jìn)程的虛擬地址,以便后面對(duì)寄存器進(jìn)行操作,部分代碼如下:

圖片點(diǎn)擊可在新窗口打開(kāi)查看

  CreateHardwareAccess函數(shù)根據(jù)MapHardware得到的m_pBaseAddress,構(gòu)造一個(gè)CRegLPC32xx類實(shí)例,然后調(diào)用CRegLPC32xx類的Init函數(shù)確保串口控制器硬件進(jìn)入穩(wěn)定的工作狀態(tài)。

  根據(jù)LPC3250的數(shù)據(jù)手冊(cè),設(shè)置標(biāo)準(zhǔn)UART的波特率需要設(shè)置小數(shù)波特率預(yù)分頻器和UART波特率發(fā)生器。當(dāng)不用小數(shù)波特率預(yù)分頻器(即X=Y=1) 時(shí),將標(biāo)準(zhǔn)UART的{Baudrate,DLM:DLL}的值定義一個(gè)數(shù)組BaudPairs[]。GetDivisorOfRate根據(jù)這個(gè)數(shù)組得到分頻系數(shù),然后調(diào)用父類的成員函數(shù)SetBaudRate便可設(shè)置波特率。高速UART的波特率類似,只是波特率計(jì)算公式和分頻系數(shù)與標(biāo)準(zhǔn)UART不同。

  用GetWaterMark得到接收器FIFO的觸發(fā)深度,分別為16、32、48和60位,然后在CPdd16550的InitReceive中設(shè)置FIFO控制寄存器,默認(rèn)的FIFO觸發(fā)深度是32位。

  Clpc32xxPdd16550UART是個(gè)抽象類,實(shí)現(xiàn)通用功能,具體的要分別由繼承的標(biāo)準(zhǔn)串口Clpc32xxPdd16550Stan- dardUART類和高速串口Clpc32xxPdd16550HighUART類實(shí)現(xiàn)。在各自初始化時(shí),主要是配置各種寄存器,實(shí)現(xiàn)具體硬件差異化,包括:配置UART時(shí)鐘控制寄存器、時(shí)鐘模式寄存器和時(shí)鐘選擇寄存器,分別使能UART時(shí)鐘、設(shè)置自動(dòng)時(shí)鐘模式、選擇相應(yīng)的時(shí)鐘源作為分頻器的輸入時(shí)鐘;禁止UART3 Modem和UART6 IrDA功能;禁止UART的回送功能。

  特別要強(qiáng)調(diào)的是關(guān)于中斷的處理,串口驅(qū)動(dòng)中斷可以用動(dòng)態(tài)映射,也可以用靜態(tài)映射。在OEMInter-ruptHandler、 Clpc32xxPdd16550UART::Init、CPdd16550::Init、CPdd16550::ThreadRun等處加入調(diào)試打印信息,可以較快地找到問(wèn)題所在,確定硬件中斷是否映射為系統(tǒng)中斷、系統(tǒng)中斷與中斷事件是否綁定、中斷產(chǎn)生時(shí)是否進(jìn)入相應(yīng)的處理程序。中斷處理好了,串口驅(qū)動(dòng)就基本完成了。

  上述工作結(jié)束后,就要添加串口的注冊(cè)表。以串口3為例,主要是設(shè)置動(dòng)態(tài)鏈接庫(kù)DLL、設(shè)備基地址、中斷號(hào)、前綴名、被加載的順序等。根據(jù)注冊(cè)表的 DeviceArrayIn-dex、CreateSerialObject就可以構(gòu)造標(biāo)準(zhǔn)串口或高速串口類實(shí)例了, DeleteSerialObject在退出驅(qū)動(dòng)時(shí)刪除實(shí)例。具體代碼如下:

圖片點(diǎn)擊可在新窗口打開(kāi)查看

圖片點(diǎn)擊可在新窗口打開(kāi)查看

圖片點(diǎn)擊可在新窗口打開(kāi)查看

  在廣州致遠(yuǎn)電子有限公司的SmartARM3250開(kāi)發(fā)板上,通過(guò)WinCE的串口應(yīng)用程序與上位PC機(jī)進(jìn)行發(fā)送接收實(shí)驗(yàn),本驅(qū)動(dòng)已經(jīng)實(shí)現(xiàn)標(biāo)準(zhǔn)串口最高460 800 b/s、高速串口最高921 600 b/s的穩(wěn)定傳輸。

  結(jié) 語(yǔ)

  本文介紹了WinCE6.0下的串口驅(qū)動(dòng)模型,結(jié)合LPC3250的硬件情況,詳細(xì)說(shuō)明了串口驅(qū)動(dòng)開(kāi)發(fā)過(guò)程,包括配置串口相關(guān)的寄存器和處理中斷中重要函數(shù)的實(shí)現(xiàn),以及注冊(cè)表和Source文件編寫(xiě)等。本驅(qū)動(dòng)程序在廣州致遠(yuǎn)電子有限公司的SmartARM3250開(kāi)發(fā)板上實(shí)驗(yàn)成功。在串口驅(qū)動(dòng)開(kāi)發(fā)中所用的思路,對(duì)其他類似的驅(qū)動(dòng)設(shè)計(jì)有較高的參考價(jià)值。

 
共2 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .01563 s, 2 queries.
主站蜘蛛池模板: 青青操视频在线免费观看| 久久精品国产亚洲av电影| aa毛片免费全部播放完整| 久久国产精品久久久久久| 很黄很污的视频在线观看| 欧美丰满熟妇XXXX性| 国产精品久久现线拍久青草| 亚洲国产综合第一精品小说| 1a级毛片免费观看| 欧美三级不卡在线观线看高清| 国产精品久久久久久久网站| 亚洲一区二区三区影院| 人人玩人人添人人| 日韩在线精品视频| 国产人妖系列在线精品| 中文字幕无码日韩欧毛| 经典三级完整版电影在线观看| 性一交一乱一伦一| 国产成人精品福利网站在线观看| 人人爽人人爽人人片a免费| japanese老熟妇乱子伦视频| 激情内射日本一区二区三区| 国产精彩视频在线| 亚洲中文字幕无码av永久| 91免费国产在线观看| 日本三级带日本三级带黄首页| 国产一区二区三区影院| 一本到中文字幕高清不卡在线| 特级毛片免费播放| 国产精品无码专区在线观看| 亚洲av无码一区二区三区性色 | 欧美午夜艳片欧美精品| 国产成人精品一区二区三区无码 | 亚洲欧美一区二区三区| 亚洲欧美一区二区三区孕妇| 日韩国产成人精品视频人| 国产999精品久久久久久| www色在线观看| 欧美日韩免费在线| 国产又黄又爽胸又大免费视频| 中国毛片免费观看|