?? readme.txt
字號:
這是09449的實例驅動程序,下面簡單作一介紹:
driver.c 驅動程序源代碼;
write.c 寫應用測試程序;
read.c 讀應用測是程序;
ioctl.c I/O控制測試程序;
driver.c 中的主要例程有read、write、interrupt、ioctl和test_read。write函數響應用戶write函數,通過09449的DMA控制器完成DMA寫操作;read函數響應用戶read函數,通過09449的DMA控制器完成DMA讀操作;DMA傳輸完成就會觸發中斷,系統會自動調用中斷服務例程,在中斷服務例程中判斷中斷源,給出提示信息,其中read函數在DMA傳輸開始后就進入睡眠,在中斷服務例程中要將其喚醒;ioctl函數實現一個I/O控制的框架;test_read函數通過09449的I/O端口實現了讀操作(其他讀/寫都通過I/O內存來實現)。具體實現參考源程序。
該目錄下文件的編譯、加載、調試過程與5933相似 。其中driver.c文件通過makefile文件編譯生成driver.o;其他三個源文件都需通過手動編譯,具體過程例如 gcc write.c -o write <entere>。
應用程序中write文件完成DMA寫傳輸;read完成DMA讀傳輸;ioctl函數是一個控制09449操作寄存器的函數框架,目前只能完成兩項功能:<1> 讀出中斷能使/狀態寄存器的值;<2> Reset芯片,使各控制寄存器的值恢復成默認值。其I/O函數的運行方式是<1> ./ioctl i <enter> <2> ./ioctl r <enter>。
注:首先要在設備文件目錄/dev下建立一個節點應用程序才能調用。其命令為:knod /dev/09449device c major minor其中參數c表示該設備是字符設備,major是主設備號,minor是從設備號。主設備號可以在/proc/devices文件中找到,一般情況下是254,從設備號用0即可。
另注:09449的郵箱操作我沒有完成,無非是在ioctl例程增加一個分支用于郵箱讀寫,在中斷服務例程中增加一些響應郵箱中斷的服務代碼。其他傳輸方式我都進行過測試。
再注:即使我將中斷能使位完全關閉,加載驅動后依然能收到一個固定的中斷信號,然而此時讀出來的中斷控制/狀態寄存器依然是0。我對底層硬件的理解還有限,搞不懂這些中斷是哪里來的。為了能繼續進行測試,我暫時將中斷處理例程中的一些提示信息屏蔽了。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -