ISPl362在基于FPGA的紅外成像系統(tǒng)中的應(yīng)用
ISPl362設(shè)備控制器內(nèi)部40多個寄存器。編寫代碼時的重點工作就是根據(jù)寄存器每一位代表的意義確定配置值,特別是有些關(guān)鍵位,只有正確配置方能保證芯片的正常工作。在使用ISPl362之前,要先配置的寄存器有模式寄存器、硬件配置寄存器、中斷使能寄存器等,端點配置寄存器可以在任何時刻完成,但僅在枚舉后的初始化后才有效。為了便于程序設(shè)計,在一開始對模式寄存器、硬件配置寄存器、中斷使能寄存器等配置的同時,也對16個端點配置寄存器進(jìn)行配置。端點0為控制端點,包括in和out端點,這兩個端點大小固定,均為64 B。枚舉過程就是通過這個端點進(jìn)行的。其余14個為可編程端點,也可以被配置成雙緩沖端點進(jìn)一步提高吞吐量。設(shè)計中端點1配置為64 B雙緩沖批量in端點;端點2配置為16 B中斷out端點;端點3配置為16 B中斷in端點等;可以禁能不用的端點。配置模式寄存器時,尤其要注意可以通過第三位來使能所有中斷。對于硬件配置寄存器,要注意中斷輸出管腳INT2的設(shè)置,這里選擇低電平有效的中斷信號模式。對這些寄存器正確配置之后,ISP1362就會進(jìn)入預(yù)期工作模式。
由于ISP1362中需要配置的寄存器很多,因此本設(shè)計中先在FPGA生成一片16位,大小為128 B的ROM,再將需要配置的寄存器的寫命令和配置值按照順序?qū)懭隦OM中,配置時,只需將ROM中的數(shù)據(jù)依次寫入芯片中即可。寄存器的配置時序如圖3所示(為便于觀察,圖3中只截取了部分寄存器的配置情況)。本文引用地址:http://www.ex-cimer.com/article/191755.htm
圖3中信號clk_50M為全局時鐘;ISP_Rst為芯片的復(fù)位信號;ISP_CS,ISP_WR,ISP_RD分別為ISPl362的片選信號、讀信號、寫信號,均為低電平有效;ISP_Al為模式選擇信號,當(dāng)其值為1時,芯片工作于設(shè)備控制器模式,為O時芯片工作于主機控制器模式;ISP_A0為高時對應(yīng)的ISP_Data為DC的初始化命令,當(dāng)ISP_AO為低時對應(yīng)的ISP_Data為寫入相應(yīng)寄存器的配置值。
2.2設(shè)備接收請求
主機的每次請求,都是將請求以setup包的形式發(fā)送到out端點的out緩沖區(qū)。當(dāng)out緩沖區(qū)接收到數(shù)據(jù)時,芯片的INT2管腳將會有中斷產(chǎn)生。在模式寄存器、硬件配置寄存器、中斷使能寄存器正確配置之后,當(dāng)有中斷事件產(chǎn)生時,ISP1362內(nèi)部的SIE就能夠檢測到中斷,并置中斷寄存器的相應(yīng)位為高電平。固件通過讀取并分析中斷寄存器的值來判斷中斷類型,再進(jìn)行中斷事件的處理。
固件首先檢測到的是out中斷。這是因為在上電復(fù)位以后,主機就向out緩沖區(qū)發(fā)第一個setup請求包。當(dāng)接收到out中斷時,固件首先讀取out端點的端點狀態(tài)寄存器將中斷清除,以便于芯片接收其他的中斷。接著固件再根據(jù)端點狀態(tài)寄存器的值判斷out緩沖區(qū)內(nèi)是否含有setup包,然后固件讀取out緩沖區(qū)。
根據(jù)out緩沖區(qū)的內(nèi)容判斷是何種請求,再決定做何響應(yīng)。in中斷的產(chǎn)生不同于out中斷。in中斷是在in緩沖區(qū)由空變滿之后才產(chǎn)生的,in中斷的產(chǎn)生需要固件進(jìn)行寫in緩沖區(qū)的操作。換而言之,是寫in緩沖區(qū)的操作引發(fā)了in中斷的產(chǎn)生,而不是in中斷的產(chǎn)生引發(fā)了寫緩沖區(qū)的操作。當(dāng)固件檢測到in中斷時,同樣要通過讀in端點的端點狀態(tài)寄存器將中斷清除。
評論