版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ARM9外接晶片^^的瞬UE-以8255卷靶例
外接8255主要目的是透謾,‘立址^及資料^做外接晶片學(xué)曹舄'的片能正。ARM9可透謾如IS1所示的
傅接^虢^撅充其他的晶片功能。
P13
'H~(-DATA15
DATA14--DATA13
DATA12-DATA11
DATA10--DATA9
DATA8DATA7
DATA6DATA5
DATA4DATA3
DATA2-DATA1
DATAO—(-AO
A1A2
A3(-A4
A50—A6
A7-A8
A9A10
All-A12
A13-A14
A15—nGCS2
nOEnRESET
nWE-+5V
KBDINT--+5V
H1.ARM-9的傅接音亂號怒泉
解碼位址
g]2代表ARM-9的外接|己驚艘解碉位址分怖,共分81’固II段(bank)。造些展段分別由
nGCS0-nGCS7來解碼,每他111段(bank)共有128MB的言己1意醴空冏。BankO及Bankl分別由快收情己
tFlashmemory)及隨取言己膀醴(SDRAM)所估用。Bank2的解礁致能^nCGS2位於透謾ARM-9
彝展板傅接槽的第34保|接峪|1,如圈|1所示。nCGS2解彳相位址分彳布於0x10000000-0x18000000,如|ffl
2所示。
-OM[1:01=01.10OMf1:0l=00
WAI111111W
NotusedNotused
AvAAY^WHHWAWA?w
SFRAreaSFRArea
0x4&30_0000f
Ox4O0O_OFFF—?
BootSRAM
Notused
(4KBytes)
nvdfYinnonn、
卜
SROM/SDRAMSROM/SDRAM'2M574MB/8MB/16MB
(nGCS7)(nGCS7)/32M3/64MB/128MB'
nnoo_>Referto
TaK>Cl
SROM/SDRAMSROM/SDRAM2ME/4MB/8MB/16MB
(nGCS6)(nGCS6)/32N3/64M8/128MB
AvWWInAAA__
SROMSROM
128M3
(nGCS5)(nGCS5)
nnnn>
SROMSROM
123MB1GB
(nGCS4)(nGCS4)
DvTAYlHAHA>HADDRR9:0]
Accessible
SROMSROM
128M3Region
(nGCS3)(nGCS3)
AVIAAHnnnn4
SROMSROM
128MB
(nGCS2)(nGCS2)
unvxIUJU_nUnUoUAU_4p
SROMSROM
128M3
(nGCSI)(nGCSI)
HvfWV)fYYYl4
SROM
BootInternal123M3
(nGCSO)
nv/w\nnnnn__SRAM(4KB)
[NotusingNANDflashforbootROM)[UsingNANDflashforbootROM]
NOTES:
1.SROMmeansROMorSRAVtypememoty
2.SFRmeansSpecialFunctionRegister
Figure5-1.S3C2410XMemoryMapafterReset
I?2.nGCS2的解礁位址分怖
IS3中ARM9的言己驚醴IE段(Bank)的解礁幺泉nGCS2接8255的/CS;(Al,A0)分別接8255的(A1,
AO);DATA7-DATA0分別接8255的D7-D0,如g|3所示。所以8255的(PORTA,PORTB,PORTC,CTL)
的窩入位址定羲如下:
PORTA=Ox10000000;
PORTB=Ox10000001;
PORTR=Ox10000002;
CTL=Ox10000003;
nOE
nGCS2
n\VE
AI
AO
DATA7-DATAO
03.8255輿ARM-9的速接方法
ARM-9的資料幺泉共有32位元⑴ATA31-DATAO)。然而外接SSI?髓(或T/0)可祝副卷8位元、16
位元及32位元共三槿模式。究竟逗攆那槿模式,可透謾烷副BWSCON暫存器的內(nèi)容來決定。BWSCON
暫存器的位址卷0x48000000。烷副Bank2的外接geitflf(或I/O)資料幺泉癮位元數(shù)懸8位元,可
規(guī)副BWSCON暫存器的(bit9,bit8)^00,如Iffl4所示。程式規(guī)副的夢考方法如下
RegisterAddressR/WDescriptionResetValue
BWSCON0x48000000R/WBuswidth&v/aitstatuscontrolregister0x000000
BUSWIDTH&WAITCONTROLREGISTER(BWSCON)(Continued)
WS2[10]DetermineWAITstatusforbank20
0=WAITdisable1=WAITenable
DW2[9:8]Determinedatabuswidthforbank2.0
00=8-bit01=16-bit,10=32-bit11=reserved
STI17]DetermineSRAMforusingUB/LBforbank1.0
0=NotusingUB/LB(ThepinsarededicatednWBE|3:0])
1=UsingUB/LB(ThepinsarededicatednBE[3:0])
WS1⑹DetermineWAITstatusforbank1.0
0=WAITdisable,1=WAITenable
DW1[5:4]Determinedatabuswidthforbank1.0
00=8-bit01=16-bit,10=32-bit11=reserved
DWOI2:1]Indicatedatabuswidthforbank0(readonly).-
01=16-bit,10=32-bit
ThestatesareselectedbyOM[1:0]pins
Reserved[0]-
Bl4.BWSCON暫存器的bitio-bito所規(guī)副的功能
ARM-9外接意能(或1/0)的^^畤序如IBI6所示。ffl6中^^的各I直疇^參數(shù)(Taes,Teos,
Tacc,Tacp,Tcoh,Tcah)可由BANKCONx暫存器(x=0,1..5)^^整。BANKC0N2暫存器的位址懸
0x4800000c,如Bl5所示。
RegisterAddressR/WDescriptionResetValue
BANKCONO0x48000004R/WBank0controlregister0x0700
BANKCON10x48000008R/WBank1controlregister0x0700
BANKCON20x4800000CR/WBank2controlregister0x0700
BANKCON30x48000010R/WBank3controlregister0x0700
BANKCON40x48000014R/WBank4controlregister0x0700
BANKCON50x48000018R/WBank5controlregister0x0700
Bl5.RANKCON2暫存器的位址
IIIIIIIIIIII
A[24:0]
nGCS
nOE
nWE
nWBE
D[31:0](R)
D[31:0](W)
Taes=1cycleTaco=2cycles
Teos=1cycleTcoh=1cycle
Tacc=3cyclesTcah=2cydes
Figure5-12.S3C2410XnGCSTimingDiagram
1l6.ARM-9外接靛11意艘(或I/O)的^'舄畤序
8255勤程式之建立
在Linux核心中,^勤程式扮演特殊的「黑盒子」角色,它憑能(硬鶻裝置,企且I1藏硬的.
的^除作蕖^第,使硬醴的回鷹方式符合一幺(1^^規(guī)定的程式介面,aiifi用程式能透謾一套檄型化
的系統(tǒng)呼叫來接操作硬醴。以^除的硬醴勤作^^系統(tǒng)呼叫所定羲的功能,正是^勤程式所扮
演的角色。由於系統(tǒng)呼叫道眉軟醴介面的存在,使得^^程式輿核心的其繪局部可以分明裂作,
旦在需要畤,才在孰行期揩^勃程式「安插」到核心桂。道槿模^化的^言十,不僮降低了Linux
程式的^言十轆度,也使得核心不必懸了支援新硬醴而^步反改版。
裝置程式大致分卷H城雅勤程式、字元^勤程式及^路介面^勤程式。HI兔^^程式是以
固定大小晨度來停送樽移資料,且大致是可以隨檄存取資料的^^,如硬碟械或光碟檄;字元裝置
是可被常成一速串位元^(串流)來存取的裝置,也就是裝置的存取方式就像槽案一檄。字
元裝置^勤程式的主要任才務(wù),正是槿行卷。道勤程式至少畬^作四項系統(tǒng)呼叫,分別是
open()>close()>read。和write()o我出號所熟悉的操控臺典序列埠(/dcv/console、
/dev/ttySO…),就是典型的字元裝置,因卷它便J都可J蟆利化身成「串流」。字元裝置必須透謾槽案
系統(tǒng)?^粘(node)來存?。徊郯赶到y(tǒng)?I黠俗楷卷裝置槽(devicefile),例如/dev/tttySO、
/dev/consoleo字元裝置輿一般正常桶案之冏的最大差昇,是一般槽案容器午你任意改夔存取黠(檎
案指襟),但字元裝置大局部都只是資料通道,只能被循序存取。
g模^程式的根本^念
一他,朗勤程式必須被撰'嘉成模幺且的型熊,才能貧)具倩供使用者載入輿移除的特性。因此一他
勤程式必然畬具有載入模^函式典移除模/揖1雨(0函式P故此雨他I函式就分別載入SS勃程式典移除
程式的角色。
鷹用程式在敬勒之彳灸,彳能^到尾都只軌行同一件任才務(wù)。另一方面,模^在被截入核心之彳灸,必
須先向核心注冊它自己,以便服才務(wù)未來的request,而其〃main"函式il畤候就立即結(jié)束了。換言
之,initmodule()函式(模^的入口)的任矜,是揩模的功能(函式)型借好,使it些功能
可在事彳爰被^用。模^的第二佃入口黠是cleanup_moclule(),它在模幺且被卸載之前畬被叫用一
次,其作用就是告核心:『我耍雕明了,別再叫我做任何事』。HI7描^模飆如何利月「函式呼叫」
典「函式指襟」,招新功能加到[里行中的核心。鷹用程式用是在「使用者空Rfl」(userspace)內(nèi)逋
作。每常愿用程式贊出系統(tǒng)呼叫,或是彝生硬艘中斷畤,LINUX便曾招軌行模式優(yōu)uscr-spacc切
換到kernel-space。^程式“等必須在kernel-space內(nèi)遵作。
Figure2-1.I.iuknifia,,“>duk>tothekt'rnel
ia7符模^速結(jié)至核心
團主襟虢(Majornumber)輿次檄虢(Minornumber)
常使用者要存取字元裝置疇,必須透謾檎案系統(tǒng)貍的代表名耦,il些特殊槽是集中在/dev/
目金象之下。使用指令
ls-l/dev
得到如置I8的留吉果??煽闯鲈谌掌谀_之前可以樊現(xiàn)雨佃以逗虢隔明的數(shù)值,在逗虢左方的數(shù)值
是三亥裝置1?常的「主褊虢」(majornumber),而逗虢右方的數(shù)值是「次褊虢」(minornumber)0
編虢J代表裝置所配合91勤程式。常核心收到。pcn()系統(tǒng)呼叫畤,就是依撼「主編虢」5(68攆Jg
勤程式。另一方面,「次編虢」的意羲只有^勤程式自己才知道,核心曾揩使用者給定的次編虢樽
交余合^程式,核心本身用不到次編虢。一般而言,^程式以次編虢來辨^同^裝置的倜颼。
crw-rw-rw-1rootroot1,3Feb231999null
crw1rootroot10,1Feb231999peaux
crw1rubiniccy4,1Aug1622:22ccyl
crw-rw-rw-1rootdialouc4,64Jun3011:19tcySO
crw-rw-rw-1rootdlalouc4,65Aug1600:00ccySl
crw1rooteye7,1Feb231999vcsl
crw1rootsys7,129Feb231999vcsal
crw-rw-rw-1rootrootI,5Feb231999zero
El8主編虢典次襟虢
要增加一保I新^^程式到系統(tǒng),等於指派一他主編虢給它。道項指派^^在勤程式(模<1)
的初使期,藉由呼叫VIinux/fs.h>所定羲的register_chrdev()函式來完成:
intregisterchrdev(unsignedintmajor,constchar舉name,
struct*fops);
此函數(shù)的傅回值代表者主冊勤作的成功典否。:ft值表示失敗,0或正值表示成功。major引數(shù)是
勒程式想要注冊的主襟虢;name是裝置的名稠(如果注冊成功,造名耦揩畬出現(xiàn)在
/proc/devices檎案的內(nèi)容貍);fops是一他I指檄,指向一13「函式指襟陣列」(anraryoffunction
pointers),此睡列幺當(dāng)錄了^勤程式各他I入口黠(作蕖方法)的位置。
在^^程式向核心完成了言主冊之彳及,勤程式的各項「作篥方法」(operation)就典給定的主
褊虢羥生了^^性。每常有人封字元裝置槽迤行某^操作畤,核心就能彳他三亥袋置槽的主褊虢找出封
愿的^勤程式,或透遇其余吉情來呼叫封愿的作渠方法。下一他冏題是如何感用程式一他I名稠,?
它憑能利用此名耦來做勤程式。ilf0名稀必須安插在/dev/目^下,而且必須^速到SI勤程
式的主編嬲典次編號以在槽案系統(tǒng)裂作第黠的命令是mknod,你必須有特^身分(root)才能使用
此工具。mknod至少需要四(0參數(shù),例如:
mknod/dev/c8255_driverc420
第一他引致是育苗占名稠,其彳爰的三低I引數(shù)分別是裝置^型(c代表chardevice)、主編虢、以
及次編虢。就像任何儲存在磁碟上的普通槽案一檬,mknod所羥生的裝置@1黠曾被保存下來,除非
刻意用rm命令刪除它伊九我憑在^勒程式主程式中做以下定羲及宣告:
#defineCHDRV_MAJOR42
charCHDRV_NAME[]="c8255_driver”;
而我他J系統(tǒng)^作畤的勤程式官主佃的勃作是在一倜init.module程式中兄
intinit_module(void)
(
if(register_chrdev(CHDRV_MAJOR,CHDRV_NAME,&c8255_chdrv_fops)){
printk("kernel:%s:Unabletoregistercharacterdevice'n”,CHDRV_NAME);
return-EIO;
}
在模^被卸載之前,它必須先釋放主檄虢,而ilf0勤作可由unregister_chrdev()完成,我
儼]在模融I的清理函式貍呼叫它:
voidcleanup_modu1e(void)
{
unregister_chrdev(CHDRV_MAJOR,CHDRV_NAME);
printk("unloaded。?\n");
return;
CHDRV_MAJOR引數(shù)是要被穆放的主編虢,CHDRV_NAME是常初注冊的裝置名穗。11雨彳固引敷必
須典常初呼叫register_chrdev()所用的引8!(一致,否具Uunregister_chrdev()符傅回一
EINVALo
目槽案作渠輿file結(jié)情
^^程式內(nèi)部以一保Ifile皓情來代表一倜己明敬的裝置核心透謾一俯I幺吉橫來存取^勤程式
內(nèi)部的作蕖函式(method)。道的情定羲在Vlinux/fs.h>。結(jié)橫包括指向勤程式的各槿系統(tǒng)呼
叫,例如read,write,open,release...o操作槽案系吉橫的各矛重系幺充呼叫,其^除勤作就是靠
勤程式內(nèi)部的作蕖系統(tǒng)來逢成的。結(jié)情宣告靶例如下:
staticstructc8255_chdrv_fops={
NULL,/*lseek*/
read:c8255_chdev_read,/*read*/
write:c8255_chdev_write,/*write*/
NULL,/*readdir*/
NULL,/*POLL*/
NULL,/*ioctl*/
NULL,/*mmap*/
open:c8255_chdev_open,/*open*/
NULL,/*FLUSH*/
release:c8255_chdev_release,/*release*/
NULL,/*fsync*/
NULL,/*fasync*/
NULL,/*lock*/
NULL,/*readv*/
NULL,/*writev*/
NULL,/*sendpage*/
NULL,/*get.unmappedarea*/
);
當(dāng)慣上,我憑以建數(shù)名穗(例如c8255_chdrv_fops)來表示結(jié)橫。在結(jié)橫中每一,冏棚位,都必
須指向勤程式中負貨特定作渠方法,封於SE勤程式不需要的作渠項目,其封鷹楠位需指向NULL。
我杷弓在此文中所使用到的作蕖方法包括有read()、write()、open()及release(),在此做一
倜曾軍的介貂。
1.open()輪例如下:
intc8255_chdev_open(structinode*inode,structfile*file)
{
printk(*c8255_open\n/r);
MOD_INC_USE_COUNT;
return0;
)
it是裝置操作的第一步,一般曾在此函數(shù)中暹行必要的初始化舉借工作及遽增目檄裝置的「用量
言十次J,以防止模條且在槽案^^之前被卸載。
2.release()蒯列如下:
intc8255_chdev_release(structinode*inode,structfile*file)
{
MOD_DEC_USE_COUNT;
printk("release\n~");
return0;
)
release作渠方法的用途輿。pen相反。主要包括遽減用量次數(shù)、再最彳發(fā)一次事符目襟裝置
釋放open配置系臺filp->private_data的任何柬西。
3.read()輪例如下:
staticssize_tc8255_chdev_read(structfile*filp,char*buf,size_tcount,loff_t
*offset)
unsignedintix;
buffer2=kmallocd,GFP_KERNEL);
if(verify_area(VERIFY_WRITE,buf,count)==-EFAULD
return-EFAULT;
printk("c8255_read~~\n");
/*readdatafrom8255PORTA*/
io_base=ioremap_nocache(PORTA,LENGTH);
*(buffer2)=readb(io_base);
copy_to_user(buf,buffer,ix);
kfree(buffer2);
returnix;
)
^^程式用此指令微取出裝置上的資料,加符猴取到的資料透謾copy_to_user指令傅遮東合愿用
程式。如果copy_to_user軌行成功即停回一保I非;ft數(shù)值,代表成功^取的位元黜保]數(shù)。各俯I引數(shù)
的意羲如下:flip是槽案指梯;count是要被傅翰的資料量;buf引數(shù)指向user-space的^^
顯封於read,它是一?現(xiàn)空白用於存放裝置器亶出的資料。
4.write()危包例如下:
staticssize_tc8255_chdev_write(structfile*filp,constchar*buf,size_tcount,loff_t
?offset)
(
unsignedintiy=0;
unsignedchardatax;
bufferl=kmalloc(l,GFP_KERNEL);
printk(/rc8255_write..\n");
io_base=ioremap_nocache(PORTA,LENGTH);
copy_from_user(buffer1,buf,count);
datax=*(bufferl);
printk(/zc8255_write..%d\n",iy);
writeb(datax,io_base+l);
)
kfree(bufferl);
returniy;
)
揩資料'嘉入裝置若彝生^旗,writeO系統(tǒng)呼叫的行程畬收到-EINVAL如果成功,write
符傅回一值|非負值,代表成功嘉出的位元敢。我出號在^作write函式裨.利用copy_from_user函式
把使用者空冏把之前所鰥的資料停送至核心空冏。
國在鷹用程式勤程式的功能
完成了Sg勃程式的撰嘉之彳翁接下來要嘉一倜愿用程式來作攜虛丸程式裨.首先要使用系統(tǒng)呼叫
封裝置做敢的勤作,藉由open系統(tǒng)呼叫來呼叫^^程式貍的open函式,便畬軌行^勒程式桂
相封鷹的勤作:
intfdl,i;
unsignedchardatabuf[10];
fdl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 春季幼兒園傳染病預(yù)防措施
- 輔導(dǎo)學(xué)困生措施
- 管網(wǎng)工程施工組織設(shè)計方案
- 自考大學(xué)語文重點歸納
- 軟件開發(fā)項目驗收報告模板
- 建筑工程造價控制與預(yù)算管理
- 個人工作問題診斷與改進報告
- 水利工程溢洪道設(shè)計及安全管理
- 企業(yè)團隊建設(shè)主題演講稿范例
- 電力企業(yè)安全生產(chǎn)責(zé)任體系建設(shè)
- 糖皮質(zhì)激素在兒科疾病中的合理應(yīng)用3
- 無人機制造裝配工藝智能優(yōu)化
- GB/T 1965-2023多孔陶瓷室溫彎曲強度試驗方法
- 六年級語文非連續(xù)性文本專項訓(xùn)練
- 體育單招核心1700單詞
- 梨樹溝礦區(qū)金礦2022年度礦山地質(zhì)環(huán)境治理計劃書
- 師德規(guī)范關(guān)愛學(xué)生
- 太陽能光伏發(fā)電裝置的開發(fā)與推廣商業(yè)計劃書
- 海水淡化用閥門
- GB/T 36377-2018計量器具識別編碼
- GB/T 26332.3-2015光學(xué)和光子學(xué)光學(xué)薄膜第3部分:環(huán)境適應(yīng)性
評論
0/150
提交評論