一種基于CPLD 的單片機(jī)與PCI 接口設(shè)計(jì)解決方案
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:
本文描述了用賽靈思公司的xc95216 系列cpld 芯片實(shí)現(xiàn)擴(kuò)展單片機(jī)與計(jì)算機(jī)pc104 的接口并行通信的方法, 解決了在嵌入式操作系統(tǒng)中單片機(jī)與主機(jī)總線(xiàn)設(shè)備打交道資源不足的固有缺陷, 把以太網(wǎng)卡的功能集成在一片xc95216 的 cpld 中, 簡(jiǎn)化了硬件, 通信實(shí)時(shí)性強(qiáng); 并給出用vhdl 編寫(xiě)的主要源程序。該方案在實(shí)踐中檢驗(yàn)通過(guò)。
引 言
8位單片機(jī)在嵌入式系統(tǒng)中應(yīng)用廣泛, 然而讓它直接與pci 總線(xiàn)設(shè)備打交道卻有其固有缺陷。8 位單片機(jī)只有16 位地址線(xiàn), 8 位數(shù)據(jù)端口, 而pci 總線(xiàn)2.0 規(guī)范中, 除了有32 位地址數(shù)據(jù)復(fù)用ad[3- 0]外, 還有 frame、irdy、trdy 等重要的信號(hào)線(xiàn)。讓單片機(jī)有限的i/o 端口來(lái)直接控制如此眾多的信號(hào)線(xiàn)是不可能的。一種可行的方案就是利用cpld 作為溝通單片機(jī) 與pci 設(shè)備間的橋梁, 充分利用cpld 中i/o 資源豐富、用戶(hù)可自定制邏輯的優(yōu)勢(shì), 來(lái)幫助單片機(jī)完成與 pci 設(shè)備間的通信任務(wù)。
1.2 cpld 設(shè)計(jì)規(guī)劃
出于對(duì)單片機(jī)和cpld 處理能力和系統(tǒng)成本的考慮, 下面的規(guī)劃不支持pci 總線(xiàn)的線(xiàn)性突傳輸?shù)刃枰B續(xù)幾個(gè)數(shù)據(jù)周期的讀寫(xiě)方式, 而僅支持一個(gè)址周期加一個(gè)數(shù)據(jù)周期的讀寫(xiě)方式。對(duì)于大部分應(yīng)用而言, 這種方式已經(jīng)足夠了。圖1 是經(jīng)過(guò)簡(jiǎn)化后的pci 總線(xiàn)讀寫(xiě)操作時(shí)序。在cpld 內(nèi)設(shè)有13 個(gè)8 位寄存器用來(lái)保存進(jìn)行一次pci 總線(xiàn)讀寫(xiě)時(shí)所需要的數(shù)據(jù), 其中pci_address0- pci_address3 是讀寫(xiě)時(shí)的地址數(shù)據(jù); pcidatas0- pci_datas3 是要往pci 設(shè)備寫(xiě)的數(shù)據(jù); pci_cbe[3- 0]保存地址周期時(shí)的總線(xiàn)命令; pci_cbe[7- 4] 保存數(shù)據(jù)周期時(shí)的字節(jié)使能命令; pci_data0- pci_data3 保存從pci 設(shè)備返回的數(shù)據(jù); pci_request 是pci 總線(xiàn)讀寫(xiě)操作狀態(tài)寄存器, 用于向單片機(jī)返回一些信息。當(dāng)單片機(jī)往pci_cbe 寄存器寫(xiě)入一個(gè)字節(jié)的時(shí)候, 會(huì)復(fù)位cpld 中的狀態(tài)機(jī), 觸發(fā)cpld 進(jìn)行pci 總線(xiàn)的讀寫(xiě)操作; 單片機(jī)則通過(guò)查詢(xún)pci_request 寄存器得知讀寫(xiě)操作完成, 再?gòu)膒ci_data 寄存器讀出pci 設(shè)備返回的數(shù)據(jù)。
2.2 單片機(jī)pci 讀寫(xiě)c 語(yǔ)言程序設(shè)計(jì)
在cpld 在幫助下, 單片機(jī)讀寫(xiě)pci 設(shè)備就變得相當(dāng)簡(jiǎn)單。首先, 將pci_cbe 等寄存器都聲明為外部存儲(chǔ)器變量, 并根據(jù)cpld 的設(shè)計(jì)指定地址。然后, 傳遞適當(dāng)?shù)膮?shù)給以下兩個(gè)讀寫(xiě)子函數(shù), 即可完成對(duì)pci 設(shè)備配置空間、i/o 空間、存儲(chǔ)器空間的讀寫(xiě)操作。從 pci 設(shè)備的返回?cái)?shù)據(jù)存放在全局變量savedata 中。實(shí)際上在寫(xiě)pci 設(shè)備時(shí), 也可以從pci_data 中得到返回?cái)?shù)據(jù)。這個(gè)數(shù)據(jù)必須等于往pci 設(shè)備寫(xiě)的數(shù)據(jù)。利用這一點(diǎn)可以進(jìn)行差錯(cuò)檢驗(yàn)和故障判斷, 視具體應(yīng)用而定。
3 結(jié)論
用cpld 實(shí)現(xiàn)單片機(jī)與pci 總線(xiàn)接口的并行通信, 電路結(jié)構(gòu)簡(jiǎn)單、體積小, 1 片cpld 芯片足夠, 并且控制方便, 實(shí)時(shí)性強(qiáng), 通信效率高。本設(shè)計(jì)方法已成功地應(yīng)用于作者開(kāi)發(fā)的各種數(shù)據(jù)采集系統(tǒng)中, 用作單片機(jī)與pc104 之間的并行數(shù)據(jù)通信, 效果非常理想。