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