IIS接口的FPGA實現
由于IIS總線只處理聲音數據,其他信號必須單獨傳輸,所以為了控制UDA1341TS而設計了L3接口。在FPGA實現L3接口時,根據UDA1341TS操作模式的不同,設計了兩個元件。圖3中元件L3_2B_Mod用于只需傳輸1字節地址和1字節數據的情況,而L3_3B_Mod則用來傳輸1字節地址和兩字節數據。
為了便于控制,在元件ARM_Interface中專門設置了一個控制寄存器來控制L3接口的工作模式,該寄存器偏移地址為0x01100,其高4位有定義。最高位為接口允許位TRANS_EN,為‘1’時L3接口啟動工作,為‘0’時停止;次高位為L3接口工作模式選擇位TRANSMODE,為‘0’時選擇L3_2B_Mod,為‘1’時選擇L3_3B_Mod;接下來的二位用于選擇寄存器。
實際設計實現的元件L3_3B_Mod時序仿真圖見圖5。
圖5顯示的是L3接口DATA0擴展地址模式時序圖,共傳輸了3字節數據,即1個地址字節、2個數據字節。地址字節的高6位為UDA1341TS地址,低2位選擇DATA0操作模式,緊接著的數據字節最高兩位為‘11’選擇擴展地址模式,這意味著該字節后面還要傳輸1字節數據。圖5中的3字節分別為0x14、0xC4和0xF0,該命令將打開輸入通道的自動增益控制。L3接口要求串行數據的低位在前傳輸,這一點與IIS有所不同。
實現L3_3B_Mod元件時引入了一個參考時鐘REF_CLK,由一個5位計數器對該時鐘信號計數,根據L3接口在3字節操作時的時鐘信號圖案,控制由REF_CLK生成L3CLOCK,得到L3CLOCK之后,L3接口的操作均以此時鐘信號來同步。
元件L3_2B_Mod設計及仿真結果與L3_2B_Mod類似。
3 測試方法及結果
在以S3C4510B為核心的嵌入式系統中,根據存儲器配置情況,選擇一段未用的存儲空間,將FPGA實現的寄存器映射成S3C4510B在該段存儲空間中的存儲單元,這樣就可以用C語言編程來訪問這些存儲單元,從而實現對UDA1341TS的控制。實際選擇了S3C4510B的可重定位片選信號nRCS1作為FPGA實現的寄存器基地址選擇信號,并將該片選地址定位為0x12000000,這樣各寄存器的實際地址如表1。

根據UDA1341TS命令列表,在Hitool For ARM support μClinux軟件開發環境下,編寫C語言程序,測試STATUS操作和DATA0操作功能及結果。程序運行之前需要用JTAG下載電纜將ISE開發環境下生成的bit文件下載 到FPGA芯片中,以實現要求的功能。
經實際測試,通過FPGA實現的IIS總線和L3接口,S3C4510B可以控制UDA1341TS芯片完成各種操作,實現STATUS操作模式和DATA0模式的各種控制功能,并可用DATA1操作模式獲取音頻數據重放時的峰值電平。
編寫測試程序,輸出1kHz正弦信號,并控制聲道、音量、靜音等變化,示波器觀察和耳機聽到的結果正確。
編寫測試程序,讀入麥克風音頻信號,分時由左右聲道輸出,測試結果正確。
本設計采用音頻接口專用芯片UDA1341TS,并通過FPGA實現了IIS總線和L3接口,使得基于S3C4510B的嵌入式系統可以方便地擴展音頻功能,實驗結果正確。
在本文工作的基礎上,可以進一步發揮FPGA的靈活性。如可以利用FPGA實現DSP功能,從而提供音頻DSP處理或編碼解碼;也可以與SoPC相結合,作為音頻接口模塊,為片上系統提供音頻接口。
評論