ARM9外接晶片读写的验证-以8255为范例3394.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《ARM9外接晶片读写的验证-以8255为范例3394.docx》由会员分享,可在线阅读,更多相关《ARM9外接晶片读写的验证-以8255为范例3394.docx(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、ARM9外接晶片讀寫的驗証-以8255為範例外接8255主要目的是透過位址線及資料線做外接晶片讀寫的驗証。ARM9可透過如圖1所示的轉接訊號線擴充其他的晶片功能。圖1. ARMM-9的轉接接訊號線解碼位址圖2代表ARMM-9的外接接記憶體解碼碼位址分佈,共共分8個區段段(bankk)。這些區區段分別由nnGCS0-nGCS77來解碼,每每個區段(bbank)共共有128 MB的記憶憶體空間。 Bank0及及Bank11分別由快閃閃記憶體(FFlash memorry)及隨機機讀取記憶體體(SDRAAM)所佔用用。Bankk2的解碼致致能線nCGGS2位於透透過ARM-9發展板轉轉接槽的第334
2、個接腳,如如圖1所示。nnCGS2解解碼位址分佈佈於0x1000000000-0x1180000000,如圖圖2所示。圖2. nGCCS2的解碼碼位址分佈圖3中ARM99的記憶體區區段(Bannk)的解碼碼線nGCSS2接82555的/CSS;(A1, A0)分分別接82555的(A11, A0);DATAA7-DATTA0分別接接8255的的D7-D00,如圖3所所示。所以88255的(PORTAA, PORRTB, PPORTC, CTL)的寫入位址址定義如下:PORTA=00x100000000;PORTB=00x100000001;PORTB=00x100000002;CTL=0x11
3、00000003;圖3. 82555與ARMM-9的連接接方法ARM-9的資資料線共有332位元(DDATA311-DATAA0)。然而而外接記憶體體(或I/OO)可規劃為為8位元、116位元及332位元共三三種模式。究究竟選擇那種種模式,可透透過規劃BWWSCON暫暫存器的內容容來決定。BBWSCONN暫存器的位位址為0x480000000。規規劃Bankk2的外接記記憶體(或II/O) 資料線讀寫位元數為8位位元,可規劃劃BWSCOON暫存器的的(bit99, bitt8)為000,如圖4所所示。程式規規劃的參考方方法如下圖4. BWSSCON暫存存器的bitt10-biit0所規劃劃的功
4、能ARM-9外接接記憶體(或或I/O)的的讀寫時序如如圖6所示。圖圖6中讀寫的的各項時間參參數(Taccs, Tccos, TTacc, Tacp, Tcohh, Tcaah)可由BBANKCOONx暫存器器(x=0,1.5)來調整。BBANKCOON2暫存器器的位址為00x48000000c,如如圖5所示。圖5. BANNKCON22暫存器的位位址圖6. ARMM-9外接記記憶體(或II/O)的讀讀寫時序8255驅動程程式之建立在Linux核核心中,驅動動程式扮演特特殊的黑盒盒子角色,它它們能駕馭硬硬體裝置,並並且隱藏硬體體的實際作業業細節,使硬硬體的回應方方式符合一組組嚴謹規定的的程式介面
5、,讓讓應用程式能能透過一套標標準化的系統統呼叫來間接接操作硬體。以以實際的硬體體動作來實現現系統呼叫所所定義的功能能,正是驅動動程式所扮演演的角色。由由於系統呼叫叫這層軟體介介面的存在,使使得驅動程式式與核心的其其餘部分可以以分開製作,並並且在需要時時,才在執行行期將驅動程程式安插到核心裡。這這種模組化的的設計,不僅僅降低了Liinux驅動動程式的設計計難度,也使使得核心不必必為了支援新新硬體而頻頻頻改版。裝置驅動程式大大致分為區塊塊驅動程式、字字元驅動程式式及網路介面面驅動程式。區區塊驅動程式式是以固定大大小長度來傳傳送轉移資料料,且大致是是可以隨機存存取資料的設設備,如硬碟碟機或光碟機機;
6、字元裝置置是可被當成成一連串位元元組(串流)來來存取的裝置置,也就是說說這類裝置的的存取方式就就像檔案一樣樣。字元裝置置驅動程式的的主要任務,正正是實現這種種行為。這類類驅動程式至至少會實作四四項系統呼叫叫,分別是oopen()、closse()、rread()和writte()。我我們所熟悉的的操控台與序序列埠(/ddev/coonsolee、/devv/ttySS0),就是典典型的字元裝裝置,因為它它們都可順利利化身成串串流。字元元裝置必須透透過檔案系統統節點(fiilesysstem nnode)來來存取;檔案案系統節點俗俗稱為裝置檔檔(deviice fiile),例例如/devv/t
7、ttyyS0、/ddev/coonsolee。字元裝置置與一般正常常檔案之間的的最大差異,是是一般檔案容容許你任意改改變存取點(檔案指標),但字元裝裝置大部分都都只是資料通通道,只能被被循序存取。1 模組程式的的基本觀念一個驅動程式必必須被撰寫成成模組的型態態,才能夠具具備供使用者者載入與移除除的特性。因因此一個驅動動程式必然會會具有載入模模組函式與移移除模組這兩兩個函式。故故此兩個函式式就分別載入入驅動程式與與移除驅動程程式的角色。應用程式在啟動動之後,從頭頭到尾都只執執行同一件任任務。另一方方面,模組在在被載入核心心之後,必須須先向核心註註冊它自己,以以便服務未來來的requuest,而而
8、其”main”函式這時候候就立即結束束了。換言之之,initt_moduule( ) 函式 (模組的入口口) 的任務務,是將模組組的功能 (函式) 準準備好,使這這些功能可在在事後被調用用。模組的第第二個入口點點是 cleeanup_modulle ( ),它在模組組被卸載之前前會被叫用一一次,其作用用就是告訴核核心:我要要離開了,別別再叫我做任任何事。圖圖7描繪模組如如何利用函函式呼叫與與函式指標標,將新功功能加到運行行中的核心。應用程式則是在使用者空間(user space) 內運作。每當應用程式發出系統呼叫,或是發生硬體中斷時,LINUX便會將執行模式從user-space切換到kern
9、el-space。驅動程式碼必須在kernel-space內運作。圖7 將模組連連結至核心 2主標號(Maajor nnumberr)與次標號號(Minoor nummber) 當使用者要存取取字元裝置時時,必須透過過檔案系統裡裡的代表名稱稱,這些特殊檔檔是集中在 /dev/目錄之下。使使用指令ls-l /ddev得到如圖8的結結果。可看出出在日期欄之之前可以發現現兩個以逗號號隔開的數值值,在逗號左左方的數值是是該裝置檔的的主編號(majoor nummber),而而逗號右方的的數值是次次編號(mminor numbeer)。主主編號代表表裝置所配合合驅動程式。當當核心收到oopen( )系統
10、呼叫叫時,就是依依據主編號號來選擇驅驅動程式。另另一方面,次編號的的意義只有驅驅動程式自己己才知道,核核心會將使用用者給定的次次編號轉交給給驅動程式,核核心本身用不不到次編號。一一般而言,驅驅動程式以次次編號來辨識識同類裝置的的個體。圖8主編號與與次標號要增加一個新驅驅動程式到系系統,等於指指派一個主編編號給它。這這項指派應該該在驅動程式式(模組)的的初使期,藉藉由呼叫llinux/fs.h 所定義的的regisster_cchrdevv( )函式式來完成:int reggisterr_chrddev(unnsigneed intt majoor, coonst cchar *name, st
11、ruuct fiile_opperatiion *ffops);此函數的傳回值值代表註冊動動作的成功與與否。負值表表示失敗,00或正值表示示成功。maajor引數數是驅動程式式想要註冊的的主標號;nname是裝裝置的名稱(如如果註冊成功功,這名稱將將會出現在 /procc/deviices檔案案的內容裡);fops是是一個指標,指指向一個函函式指標陣列列(arrrary oof funnctionn poinnters),此此陣列紀錄了了驅動程式各各個入口點(作作業方法)的的位置。在驅動程式向核核心完成了註註冊之後,驅驅動程式的各各項作業方方法(opperatiion)就與與給定的主編編號產生
12、了關關連性。每當當有人對字元元裝置檔進行行某項操作時時,核心就能能從該裝置檔檔的主編號找找出對應的驅驅動程式,並並透過其fiile_opperatiions結構構來呼叫對應應的作業方法法。下一個問問題是如何給給應用程式一一個名稱,讓讓它們能利用用此名稱來啟啟動驅動程式式。這個名稱稱必須安插在在 /devv/ 目錄下下,而且必須須關連到驅動動程式的主編編號與次編號號。在檔案系系統製作節點點的命令是mmknod,你你必須有特權權身分(rooot)才能能使用此工具具。mknood至少需要要四個參數,例例如:mknod /dev/cc8255_driveer c 42 0第一個引數是節節點名稱,其其後
13、的三個引引數分別是裝裝置類型(cc代表chaar devvice)、主主編號、以及及次編號。就就像任何儲存存在磁碟上的的普通檔案一一樣,mknnod所產生生的裝置節點點會被保存下下來,除非刻刻意用rm命命令刪除它們們。我們在驅驅動程式主程程式中做以下下定義及宣告告:#defineeCHDRVV_MAJOOR42char CHHDRV_NNAME = cc8255_driveer;而我們系統實作作時的驅動程程式註冊的動動作是在一個個init_modulle程式中實實現:int iniit_moddule(vvoid)if(reggisterr_chrddev(CHHDRV_MMAJOR, CHD
14、RRV_NAMME, &cc8255_chdrvv_fopss) printtk(keernel: %s: Unablle to regisster ccharaccter ddeviceen, CHDRVV_NAMEE);returrn -EIIO;.在模組被卸載之之前,它必須須先釋放主標標號,而這個個動作可由uunregiister_chrdeev( ) 完成,我們們在模組的清清理函式裡呼呼叫它:void clleanupp_moduule(vooid)unregisster_cchrdevv(CHDRRV_MAJJOR, CCHDRV_NAME);printk(unlooaded.n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM9 外接 晶片 读写 验证 8255 范例 3394
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内