ISPl362在基于FPGA的紅外成像系統中的應用
2.3設備響應請求
當芯片工作于設備控制器模式下時,設備端的工作就是被動的執行主機發來的請求。請求類型的確定是通過讀取out緩沖區里的setup包來完成的。一個setup包(即請求包)有8個字節,根據其中第二個字節能夠判斷出請求類型。由流程圖可以看出,枚舉過程中主機要發出獲取描述符、設置地址、設置配置等請求,對于獲取描述符的請求,還需要進一步判斷是獲取何種描述符的請求,這可以通過請求的第三,四字節的值來確定。一旦確定了請求類型,設備就可以確定該如何響應請求。當確定主機發的是獲取何種描述符請求之后,固件就將相應的描述符的值寫入in端點的端點緩沖區。寫in端點緩沖區的方法與寄存器配置類似,其時序如圖4所示。本文引用地址:http://www.104case.com/article/191755.htm
圖4中ISP_A0為高時對應的ISP_Data(即0001)是寫in緩沖區的命令,ISP_A0為低時對應的ISP_Data為寫入的數據,其中第一個數據即(0012)為要寫入的數據的長度,其余為設備描述符。當需要發送數據時,只需使能in緩沖區即可。若是設置地址請求,固件的工作就是將地址值取出來寫入設備地址寄存器,然后再向主機發送一個空包。
3 LISB固件代碼實現
在FPGA上用Verilog HDL實現上述功能時,難點有:一是多驅動問題;二是輸入/輸出端口的使用問題。由于程序中有多個模塊同時作用于ISP1362的控制信號線以及數據線,如果處理不當,可能會產生同一時刻對同一信號有兩次或兩次以上的賦值的現象。為了避免這種情況的發生,就要在適當的時刻給信號線附上高阻,即當一個模塊在驅動某一信號時,應避免其他模塊也在這一時刻驅動這一信號。芯片的16位數據線為雙向,這可以減少管腳的數量,節省資源。但在使用時若不注意,同樣容易出錯。inout管腳在使用時一般用三態門來實現,當inout端口不輸出時,要將三態門置高阻。這在具體的軟件實現中可以使用一個連續賦值(Assign)語句來實現,通過連續賦值語句將一個條件操作符賦值給這個輸入/輸出變量。該設計的代碼中,雙端口用語句ISP_Data=en? data:16’hzzzz實現其輸入/輸出功能。當en信號為高時,ISP_Data作為輸出信號使用,其值即為data的值;當en信號為低時,ISP_Data作為輸入信號使用。因此,程序中就可以根據需要通過控制en信號的高低來實現ISP_Data的輸入/輸出使用。
4 結語
采用高性能的Altera的FPGA中的EP2C70F672C6作為主控器件,實現了ISP1362在設備控制器工作模式下的功能,為解決紅外圖像處理系統中的數據傳輸問題提供了新的途徑。在具體的軟件實現中,成功地解決了多驅動問題和雙向端口的使用問題。驗證結果表明,程序的穩定性好、可移植性高,并且容易實現、易于維護。在成功地進行了枚舉的過程之后,加載上設備驅動程序即可實現數據向主機以12 Mb/s的傳輸。
評論