久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久

以文本方式查看主題

-  曙海教育集團論壇  (http://www.xinguifushi.cn/bbs/index.asp)
--  WinCE系統(tǒng)定制與驅(qū)動開發(fā)  (http://www.xinguifushi.cn/bbs/list.asp?boardid=36)
----  基于WinCE6.0的LPC3250串口驅(qū)動程序開發(fā)  (http://www.xinguifushi.cn/bbs/dispbbs.asp?boardid=36&id=1814)

--  作者:wangxinxin
--  發(fā)布時間:2010-11-26 10:34:15
--  基于WinCE6.0的LPC3250串口驅(qū)動程序開發(fā)
在Clpc32xxPdd16550UART的Init函數(shù)中,GetIsrInfo以串口的Active注冊表鍵為依據(jù)查出物理中斷號,并保存在 DDKISRINFO結(jié)構(gòu)體的dwlrq成員中。KernelloCon-trol函數(shù)將物理中斷號轉(zhuǎn)換為邏輯中斷號,符合條件就將邏輯中斷號回寫到注冊表中。相關(guān)代碼如下:

圖片點擊可在新窗口打開查看

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

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

圖片點擊可在新窗口打開查看

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

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

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

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

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

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

圖片點擊可在新窗口打開查看

圖片點擊可在新窗口打開查看

圖片點擊可在新窗口打開查看

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

  結(jié) 語

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

 

主站蜘蛛池模板: 国产三级国产精品国产国在线观看 | 男子操女子 | 国产欧美在线观看视频 | 波多野一区二区三区在线 | 日韩性片| 免费在线精品视频 | 免费v片在线看 | 欧美日本在线三级视频 | 欧美精品片在线观看网站 | 欧美成年视频 | 九九精品视频一区在线 | 精品一区二区久久久久久久网站 | 久久综合伊人77777 | 二区国产 | 国产日韩精品一区二区三区 | 欧美日本一区视频免费 | 国产三级在线观看a | 91在线成人| 免费观看a黄一级视频 | 成视频年人黄网站免费 | 女人张腿让男桶免费视频网站 | 欧美在线观看www | 欧美精品成人久久网站 | 成人a在线观看 | 欧美另类久久久精品 | 正在播放国产乱子伦视频 | 欧美日韩视频一区二区三区 | 高清国产亚洲va精品 | 一本色综合 | 日韩欧美一区二区精品久久 | 日本a级三级三级三级久久 日本a级特黄三级三级三级 | 欧美成人精品一区二区 | 国产成人精品视频在放 | 国模偷拍在线观看免费视频 | 亚洲欧美性视频 | 黄色美女网站免费看 | 久久久久亚洲日日精品 | a级男女性高爱潮高清试 | 亚洲精品视频网 | 久久免费视频在线观看 | 乱人伦中文视频在线观看免费 |