高速紅外VFIR控制器的設計與實現
2.2 紅外接口控制邏輯
根據紅外接口控制寄存器控制字,紅外接口控制邏輯實現外部RX/TXFIFO與紅外收發器接口之間的數據傳輸和邏輯時序。它的工作原理如下:根據控制字,首先啟動紅外收發器接口CRC校驗、編解碼器和可編程時鐘(RX/TXFIFO讀/寫時鐘RCLK、WCLK和編解碼時鐘fclock),然后根據控制字的TX/RX位決定是接收還是發送數據。發送數據時,TXFIFO緩沖器不為空,TXFIFO的EF信號就觸發紅外接口控制邏輯發TXFIFO讀操作信號ENR#,讀取TXFIFO的數據(數據寬度32位)傳給紅外收發器接口進行CRC校驗、編碼以及并/串轉換。同理當甚高速紅外控制器接收數據時,紅外收發器接收到的數據經過譯碼、串/并轉換(數據寬度32位),然后觸發紅外接口控制邏輯發出紅外接收FIFO的寫操作信號ENW#,把接收數據寫入紅外接收FIFO。當RXFIFO寫滿后,觸發控制邏輯發出S5933 FIFO寫信號WRFIFO#,上層協議啟動PCI接口初始化S5933為同步主控寫操作實現紅外接收FIFO到主機內存的數據傳畀。另外紅外接口邏輯還實現紅外接口狀態寄存器狀態的配置,以方便上層協議了解紅外控制器工作狀態。
2.3 紅外收發器接口
紅外收發器接口的設計與實現是紅外控制器成功的關鍵。該接口需要實現各種工作模式(SIR、MIR、FIR、VFIR)的編解碼器和硬件CRC校驗、設計比較復雜。編碼器前、譯碼器后,數據都要進行硬件CRC校驗實現差錯控制。SIR模式采用RZI(歸零反轉)編碼,信號為高電平,調制為低電平;信號為低電平,調制為高電平脈沖,最大脈沖寬度是位周期的3/16。MIR模式也采用RZI(歸零反轉)編碼,但最大脈沖寬度是位周期的1/4。FIR模式采用4PPM(脈沖位置調制)調制,它的原理是被編碼的二進制數據流每兩位組合成一個數據碼元組(DBP),其占用時間Dt=500ns,再將該數據碼元組(DBP)分為4個125ns的時隙(chip),根據碼元組的狀態,在不同的時隙放置單脈沖。由于PPM通信依賴信號光脈沖在時間上的位置傳輸信息,所以解調時先保證收發雙方時隙同步、幀同步,然后根據脈沖在500ns周期中的位置解調出發送數據。考慮到紅外收發器通信距離突然變化引發脈沖寬度擴展,發生碼間干擾,導致譯碼出錯,因此根據Hiroshi Uno提出的新算法[7]簡化4PPM譯碼過程,并通過實驗驗證該算法比最大似然譯碼算法結構更簡單,功耗更低,而且更容易實現。
VFIR模式采用HHH(1,13)編解碼技術。編碼器原理:為了正確實現編碼,要求在計算內部碼字C=(c1,c2,c3)之前,在nT(T表示一個chip時間)時刻到達編碼器輸入端的輸入數據碼元組d=(d1,d2)經過3個編碼周期(每個編碼周期是3T)的延時后進行邏輯計算,得到下一狀態矢量值N=(s1,s2,s3),即與輸入數據有關的N出現在(n+9T)時刻;再經過一個編碼周期,即(n+12T)時刻,狀態N賦給內部狀態矢量S=(s1,s2,s3),同時計算與輸入數據碼元組d=(d1,d2)有關的內部碼字矢量C=(c1,c2,c3),再經過一個編碼周期,內部碼字C賦給輸出碼字矢量Y=(y1,y2,y3)。由此可見16Mbps的數據速率經過編碼器變為24Mchip/s編碼速率,整個編碼過程延時5個編碼周期即15個chip。注意編碼器初始狀態S應設置為(1,0,0)。譯碼器原理:輸入數據R=(r1,r2,r3)經過鎖存器延時得到矢量Y4=(y10,y11,y12),對Y4進行不同的延時得到Y3、Y2及Y1。這里矢量Yi是Y4的4-I次延時(由鎖存器實現延時);對Y4進行或非運算得到Zd,再將Zd進行不同的延時得到Zc和Zb。這里Zc、Zb、Zd是變量,然后將Y4、Y3、Y2、Y1、Zb、Zc、Zd進行邏輯運算、延時分別得到矢量X1=(x1,x2)、X2=(x3,x4)、X3=(x5,x6);最后將x1、x2經過鎖存器得到譯碼器輸出矢量值U=(u1,u2)。整個譯碼過程延時4個周期即12個chip。可見HHH(1,13)編譯碼電路比較簡單,利用FPGA基于門級描述即可實現,但必須注意鎖存器時鐘fclock=1/3fchip。VFIR模式增加線性反饋移位寄存器(LFSR)實現加擾和解擾功能提高系統性能,減少誤碼。
控制器軟件主要分為三部分:系統初始化部分、接收部分、發送部分。系統初始化首先調用BIOS 1Ah中斷功能獲取設備PCI總線號、功能號、內存、I/O空間基地址和空間大小以及中斷號,然后通過直通(Pass-Thrn)方式寫控制命令初始化紅外控制器,選擇控制器接收或發送數據,設置控制器工作模式和波特率分頻數并允許控制器工作。紅外控制器具有收發雙向數據傳輸能力。編程時將S5933FIFO設置成由PCI接口初始化為同步主控方式,支持突發傳輸(DMA);然后根據控制器收/發位判斷PCI總線主控讀還是主控寫操作。程序采用中斷控制,主程序調用set_up_pci_busmaster()初始化主控操作,該函數不僅裝載訪問內存實際地址和傳輸字節數,而且還要允許讀/寫傳輸字節數到零中斷。紅外控制器初始化完成后,系統等待中斷。中斷服務處理程序讀取S5933中斷狀態/控制寄存器INTCSR判斷中斷源,并清除中斷標志;讀取CRC校驗狀態位,判斷接收數據是否正確。發送數據時,中斷服務處理程序還要檢測紅外發送FIFO狀態位是否為1(1表示FIFO為空),不為1置發送不為發空標志tx_not_empty=1,主程序繼續等待,直到TXFIFO數據為空;同理接收數據也需要檢測紅外接口狀態寄存器的紅色接收FIFO狀態位是否為1(測試位為1表示FIFO為空)。這樣可保證接收和發送FIFO的數據完全被取走。編寫的應用程序使用Turbo C2.0調試通過。
PCI總線已經成為當今電腦的主流總線,為此根據紅外串行物理層規范IRDA-1.4設計基本PCI總線的甚高速紅外VFIR控制器。使用AMCC公司PCI總線專用控制器外加部分接口控制電路實現VFIR控制器硬件設計,縮短開發周期、提高效率、節約成本。目前正在使用VtoolsD開發虛擬驅動程序,解決系統如何分配紅外控制器配置資源、如何訪問硬件設備、如何處理硬件中斷和總線主控DMA操作以及VXD和應用程序之間的通信。另外國外已有公司推出VFIR紅外控制器專用芯片,如MKNET公司的MK7100。
評論