<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于CPLD的單片機PCI接口設計

基于CPLD的單片機PCI接口設計

作者: 時(shí)間:2012-03-13 來(lái)源:網(wǎng)絡(luò ) 收藏

2.2 讀寫(xiě)C語(yǔ)言程序設計
nb
sp; 在在幫助下,讀寫(xiě)設備就變得相當簡(jiǎn)單。首先,將pci_cbe等寄存器都聲明為外部存儲器變量,并根據的設計指定地址。然后,傳遞適當的參數給以下兩個(gè)讀寫(xiě)子函數,即可完成對設備配置空間、I/O空間、存儲器空間的讀寫(xiě)操作。從PCI設備的返回數據存放在全局變量savedata中。

實(shí)際上在寫(xiě)PCI設備時(shí),也可以從pci_data中得到返回數據。這個(gè)數據必須等于往PCI設備寫(xiě)的數據,原因參見(jiàn)ABEL HDL設計部分。利用這一點(diǎn)可以進(jìn)行差錯檢驗和故障判斷,視具體應用而定。
bdate unigned char request;
sbit IRDY0=request^4;
sbit FRAME0=request^5;
sbit VALID=request^7;
void readpci(unsigned char addr,unsigned char cbe){
pci_address0=addr;
pci_cbe=cbe;
request=pci_request;
while(!IRDY0 FRAME0)) request=pci_request;
savedata0=pci_data0;
savedata1=pci_data1;
savedata2=pci_data2;
savedata3=pci_data3;
if(!VALID)printf(Data read is invalid! );
}
void writepci(uchar addr,uchar value0,uchar cbe){
data uchar temp;
pci_address0=addr;
pci_datas0=value0;
pci_cbe=cbe;
request=pci_request;
while(!(IRDY0 FRAME0)) request=pci_request;
if(!VALID)printf(Data write is invalid!);
}[NextPage]本文相關(guān)DataSheet:MAX7000 EPM7128

地址周期時(shí)的總線(xiàn)命令,PCI_cbe[7~4]保存數據周期時(shí)的字節使能命令;pci_data0~pci_data3保存從PCI設備返回的數據;pci_request是PCI總線(xiàn)讀寫(xiě)操作狀態(tài)寄存器,用于向返回一些信息。當單片機往pci_cbe寄存器寫(xiě)入一個(gè)字節的時(shí)候,會(huì )復位中的狀態(tài)機,觸發(fā)CPLD進(jìn)行PCI總線(xiàn)的讀寫(xiě)操作;單片機則通過(guò)查詢(xún)pci_request寄存器得知讀寫(xiě)操作完成,再從pci_data寄存器讀出PCI設備返回的數據。

CPLD中狀態(tài)機的狀態(tài)轉移圖如圖3所示。每一個(gè)狀態(tài)對應FRAME與IRD信號的一種輸出,而其它輸入輸出信號線(xiàn)可由這兩個(gè)信號線(xiàn)和pci_cbe的值及TRDY的狀態(tài)決定。當FRAME為有效時(shí),AD[31~0]由pci_address驅動(dòng),而C/BE[3~0]由pci_cbe低4位驅動(dòng);當IRDY有效時(shí),C/BE[3~0]視總線(xiàn)命令,要么由pci_cbe高4位驅動(dòng),要么設為高阻態(tài),而AD[31~0]在pci_cbe[0]為“0”時(shí),(PCI讀命令)設為高阻態(tài),而在pci_cbe[0]為“1”時(shí)(PCI讀命令)由pci_datas驅動(dòng)。另外一方面,一旦TRDY信號線(xiàn)變?yōu)榈碗娖?,AD[31~0]線(xiàn)上的數據被送入pci_data寄存器,而C/BE[3~0]線(xiàn)上的數據被送入pci_request寄存器的低4位。

考慮到在不正常情況下,PCI設備不會(huì )對PCI總線(xiàn)作出響應,即TRDY不會(huì )有效,為了不使狀態(tài)機陷入狀態(tài)S2的僵持局面,另外增設了一個(gè)移位計數器mycounter。當IRD信號有效時(shí),計數器開(kāi)始計數。計數溢出之后,不論PCI總線(xiàn)操作是否完成,狀態(tài)機都會(huì )從狀態(tài)S2轉移到狀態(tài)S3,即結束PCI總線(xiàn)操作。當TRDY有效時(shí),會(huì )立即置位mycounter.cout。

PCI總線(xiàn)操作是否正確完成,可查詢(xún)pci_request的最高位是否為“1”,而IRDY與FRAME的值可分別查詢(xún)pci_request的第4位和第5位。這兩位反映了PCI總線(xiàn)操作所處的狀態(tài),兩位都為“1”時(shí)可以認為PCI總線(xiàn)操作已經(jīng)完成。在實(shí)踐中,如果單片機的速度不是足夠快的話(huà),可以認為PCI總線(xiàn)操作總是即時(shí)完成的。這幾位的實(shí)現可參考源程序。



關(guān)鍵詞: CPLD PCI 單片機 接口設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>