我們需要根據裝置的暫存器編寫驅動麼?

2021-06-20 08:48:34 字數 790 閱讀 7461

剛開始做linux驅動的時候,比較迷惑:我應該怎麼做驅動呢,看裝置的官方文件然後根據暫存器的設定編寫驅動?

但是隨手開啟乙個裝置的datasheet,就頭大無比,n多的暫存器,n多的操作限制。想要讀懂datasheet很難,想要根據datasheet編寫驅動更難,想要編寫乙個能夠使裝置效能最大化的驅動難上加難。

但是驅動還是應該寫的,否則專案不就over了。但是應該怎麼寫呢?

ok,以最近接手的賽靈思的zynq-7000晶元為例。

開發工具ise提供了整合的軟體開發環境,只要你包含了乙個外設ip核,它就自動生成了裸機環境下該外設的驅動程式,你所要做的只是在應用程式中以正確的步驟呼叫驅動提供的api接可以了,poll和中斷模式任君選擇。更人性化的是,sdk為每乙個ip 核都提供了至少乙個example,想要了解外設的驅動流程,先去讀懂這些example吧。閱讀中最重要的是要逐層深入,一窺究竟xilinx自帶的驅動是如何操作外設的registers的。

有了上面的基礎後,就開始編寫linux下的驅動吧,ioremap、mmap、read32、write32、request_irq等等任君選擇。

coding....

問題來了,驅動好難寫啊!!!

複雜的外設還要考慮dma,還要構造外設結構體,還要使用等待佇列等等....專案等不及啊

怎麼辦?

其實有捷徑:你想想,硬體生產商其實每做乙個外設,都是給它編寫驅動了,否則裝置不就裸奔了。關鍵是你要去理解裝置的效能,然後在官方的驅動上加以利用,呼叫它的api編寫自己的驅動,達到使用者定製的目的。

個人理解而已,大拿們肯定自己寫完所有的驅動code了,努力吧

WINCE驅動開發之暫存器的使用

暫存器的使用 可以有3個途徑。1 直接使用g oaladdresstable oemaddrtab cfg.inc 的已經定義好的,實體地址對應的虛擬位址。如 dcd 0x80000000,0x30000000,128 訪問虛擬位址0x80000000實際就是訪問實體地址0x30000000。2 在...

WINCE驅動開發之暫存器的使用

暫存器的使用 可以有3個途徑。1 直接使用g oaladdresstable oemaddrtab cfg.inc 的已經定義好的,實體地址對應的虛擬位址。如 dcd 0x80000000,0x30000000,128 訪問虛擬位址0x80000000實際就是訪問實體地址0x30000000。2 在...

基於OHCI的USB主機 暫存器(裝置連線)

讀取usb 裝置連線狀態 讀取hcrhportstatus 暫存器可以得到相應 usb埠是否有裝置連線,但是在嵌入式系統中,為了增強系統的穩定性,要有適當的演算法保證在一段時間內,連續讀到裝置連線或斷開,則才能確定裝置的連線狀態,下面的函式在定時中斷中被呼叫,用來檢測 usb裝置的連線狀況 讀取us...