基于DSP 的PCI 通用運(yùn)動(dòng)控制卡的硬件設(shè)計(jì)
2.5 差分電路
在噪聲比較大的環(huán)境中,為了解決干擾和遠(yuǎn)距離傳輸?shù)葐栴},通常采用差動(dòng)信號(hào)傳輸,如圖4 中虛線框(3)所示。為了進(jìn)一步消除干擾,在每個(gè)輸入端都接入一個(gè)濾波電容,同時(shí)在每一對(duì)差動(dòng)信號(hào)輸入線之間接一個(gè)用于線路阻抗匹配的電阻。差動(dòng)信號(hào)(IN+、IN-、A+、A-、B+、B-)經(jīng)差動(dòng)線路接收器SN75175 和高速光電耦合器6N137 轉(zhuǎn)換為單端信號(hào)(IN、A、B)輸入到LM628 中,以實(shí)現(xiàn)閉環(huán)控制。
2.6 譯碼電路
如圖 4 中虛線框(4)所示,采用一片3/8 譯碼器74LS138 對(duì)地址譯碼,實(shí)現(xiàn)對(duì)控制卡3路伺服單元的片選,而XA0 則專門用于對(duì)LM628 進(jìn)行讀寫控制,這樣得出的地址信號(hào)是連續(xù)的(0XF60~0XF65)。另外,采用一片四位二進(jìn)制碼比較器74LS85 實(shí)現(xiàn)DSP 對(duì)雙口RAM的讀寫片選。片選地址信號(hào)范圍為0~7FF,這剛好尋址雙口RAM 2K 范圍內(nèi)的所有空間。
此外,由于TMS320F2812 要從雙口RAM 讀出大量的運(yùn)動(dòng)軌跡數(shù)據(jù)并存儲(chǔ),而其片內(nèi)只有18KB 的空間,遠(yuǎn)不能滿足要求,同時(shí)為了方便程序調(diào)試和修改,均需要DSP 擴(kuò)展一片存儲(chǔ)器。這里選用CYPRESS 公司的256K×16 位的SRAM CY7C1041CV33,其讀寫周期時(shí)鐘最快可達(dá)12ns,因此可與DSP 進(jìn)行零等待狀態(tài)接口,保證了DSP 的運(yùn)算速度。
3 運(yùn)動(dòng)控制卡的配置
配置空間是 PCI 總線所特有的一個(gè)空間,其通常與接口芯片相關(guān),包括一系列的PCI配置寄存器。PCI9052 的配置寄存器分為PCI 配置寄存器和局部配置寄存器,兩者都可以由PCI 總線和串行EEPROM 訪問。
3.1 PCI 配置寄存器及其配置
在 PCI 配置寄存器中的設(shè)備ID、制造商ID、版本號(hào)、首區(qū)類代碼、類別代碼、指令寄存器和狀態(tài)寄存器等在所有的PCI 設(shè)備中都必須實(shí)現(xiàn)。操作系統(tǒng)通常使用其內(nèi)容來決定為該P(yáng)CI 設(shè)備加載驅(qū)動(dòng)程序。此外,PCI 配置寄存器還提供6 個(gè)基地址寄存器,其中BASE0 和BASE1 是分別映射到內(nèi)存和I/O 的基地址,可固定用于對(duì)PCI9052 的寄存器操作。而BASE2~BASE5 最多可訪問局部端所接的4 個(gè)設(shè)備,實(shí)現(xiàn)其局部地址空間的訪問。PCI 總線對(duì)局部端設(shè)備的局部地址映射是通過1 個(gè)寄存器組(包括PCI 基地址寄存器、局部范圍寄存器、局部基地址寄存器和局部總線區(qū)域描述符)來實(shí)現(xiàn)的。它定義了每個(gè)空間及其特性,并將局部端設(shè)備通過局部端地址翻譯為PCI 總線地址,即將本地設(shè)備映射到系統(tǒng)的內(nèi)存或I/O端口。而片選信號(hào)寄存器則用來選定這些設(shè)備。這樣,用程序操作這一段內(nèi)存(或I/O)實(shí)際上就是對(duì)本地設(shè)備的操作。這些寄存器的內(nèi)容必須在設(shè)備復(fù)位時(shí)通過串行EEPROM 加載。
3.2 局部配置寄存器及其配置
在這里,選取 LAS0(Local Address Space 0)訪問局部端雙口RAM,與其相關(guān)的寄存器為L(zhǎng)AS0 范圍寄存器、LAS0 局部基地址寄存器、LAS0 局部總線區(qū)域描述符和片選0 基地址寄存器。LAS0 范圍寄存器用于定義板卡上資源所占地址空間的大小。由于板卡需要2KB的內(nèi)存空間,而計(jì)算機(jī)預(yù)留了32KB 空間(即8000H),因此寫入寄存器的值為0xFFFF8000H;LAS0 局部基地址寄存器用來定義板卡資源所占的基地址,它將其重新映射到PCI 地址空間中,以使PC 機(jī)能對(duì)板卡進(jìn)行訪問。由于基地址必須是地址空間范圍的整數(shù)倍,又因局部地址空間位0 為使能位,因此,寫入寄存器的值為00008001H;LAS0 局部總線區(qū)域描述符用來定義地址空間0 的具體工作特性。由于板卡數(shù)據(jù)總線采用16 位,工作方式定義為不使能突發(fā)和不可預(yù)取,因此寫入寄存器的值為4043A1C0H;片選0 基地址寄存器用來確定片選信號(hào)有效的地址范圍,其既確定了片選信號(hào)的基地址又確定了片選信號(hào)的地址范圍。
這里控制卡采用PCI9052 的CS0#作為雙口RAM 的片選信號(hào),則其起始地址和地址范圍都可由片選0 基地址寄存器設(shè)置。由于雙口RAM 容量為2KB,因此設(shè)置CS0#基地址寄存器的第11位為1,又局部總線端空間0 的基地址是0x00008000H,為方便尋址,將CS0#的基地址和局部總線端空間0 的基地址設(shè)為同一值。由于基地址(8000H)是CS0#地址范圍的16 倍,所以將CS0#基地址寄存器的第16 位設(shè)為1,再將位0 設(shè)為1 使能,這樣寫入片選0 基地址寄存器的值為0x00008401H。當(dāng)PC 機(jī)尋址時(shí),地址映射到局部總線端的空間0,從其基地址開始的2K 空間落在CS0#基地址寄存器所設(shè)置的范圍內(nèi),CS0#端則有效,可對(duì)雙口RAM各單元進(jìn)行讀寫,這樣就不必根據(jù)地址譯碼得到片選邏輯,簡(jiǎn)化了硬件設(shè)計(jì)。此外,PCI9052提供兩種中斷源,即硬件和軟件中斷。這里板卡使用其提供的2 個(gè)局部中斷中的一個(gè),即LINTi1 引腳,通過設(shè)置中斷控制/狀態(tài)寄存器(INTCSR)實(shí)現(xiàn),并生成PCI 中斷INTA#方式。
4 驅(qū)動(dòng)程序的開發(fā)
為了從 PCI 總線配置寄存器中獲得上位機(jī)動(dòng)態(tài)分配的映射基地址,并對(duì)映射端口進(jìn)行讀寫,必須編寫驅(qū)動(dòng)程序。編寫時(shí)可以使用DDK,但是難度較大,需要做很多通用的基礎(chǔ)性工作。為簡(jiǎn)化驅(qū)動(dòng)程序開發(fā),可以采用NuMega 公司開發(fā)的DriverStudio 中的DriverWorks工具包進(jìn)行WDM 驅(qū)動(dòng)程序設(shè)計(jì)。由于其被嵌入到VC 中,因此可更方便的用于開發(fā)和調(diào)試驅(qū)動(dòng)程序。實(shí)踐表明,DriverStudio 并沒有通過犧牲系統(tǒng)性能來?yè)Q取驅(qū)動(dòng)程序的快速開發(fā)。
評(píng)論