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