一.簡介
由於原設備的輸出音頻效果不佳。所以,在海思芯片作爲開發平臺上,爲了改善這個問題,添加PCM1774作爲音頻轉接器和核心板音頻輸出AO對接。基本步驟如圖1:
圖1 基本步驟
二.操作
1.I2S3數據的輸出選擇
現在將核心板子上原本輸出給音頻處理芯片的I2S3數據選擇成PCM1774,需要打開片選芯片的選擇控制管腳寄存器。
在telnet設備的終端操作:
設置管腳複用寄存器,將控制片選芯片輸出選擇的管腳GPIO18_3複用成I/O:
himm 0x120F0204 0x0
設置GPIO18_3的方向(GPIO_DIR )爲輸出:
himm 0x12270400 0x8
將GPIO18_3管腳置1,高電平使得I2S3數據通過片選芯片輸出到PCM1774:
himm 0x12270020 0x8
關於對管腳的控制,可以查看“HI3531的GPIO使用的再分析https://blog.csdn.net/qingzhuyuxian/article/details/82980110”
2.PCM1774的I2C控制
PCM1774支持I2C總線和數據傳輸協議,其從地址按如圖所示的格式進行設置。
高6位(MSBs)是固定的100011。由於同一I2C總線最多可以控制兩個PCM1774,所以ADR可由用戶通過硬件進行定義、用於標記當前控制的PCM1774芯片。最低位(LSB)表示讀和寫操作(R/)W
圖2 從地址
3.用戶可定義的PCM1774模式控制寄存器
PCM1774的模式控制寄存器中,每個寄存器的地址用7位表示,如下表所示。
表1 PCM1774的模式控制寄存器
4.上電後,主要模式控制寄存器的設置時序
時序 |
寄存器及數據 |
設置項說明 |
1 |
– |
打開所有電源① |
2 |
4027h |
耳機放大器左聲道音量( -6分貝)② |
3 |
4127h |
耳機放大器右聲道音量( -6分貝)② |
6 |
4427h |
數字衰減器左聲道通道(-24分貝)② |
7 |
4527h |
數字衰減器右聲道通道(-24分貝)② |
8 |
4600h |
關閉過採樣、啓用I2S傳輸數據格式③ |
12 |
49E0h |
DAC(DAL,DAR)和模擬偏置功率上電 |
13 |
5601h |
零交叉檢測啓用 |
14 |
4803h |
模擬調音臺(MXL,MXR)上電 |
15 |
5811h |
模擬調音臺輸入(SW2,SW5)選擇 |
16 |
49ECh |
耳機放大器(HPL,HPR, HPC)上電 |
18 |
4A01h |
Vcom上電 |
19 |
5230h |
模擬前端(D2S,MCB, PG1,2,5,6)上電 |
20 |
5711h |
模擬輸入(MUX3, MUX4)選擇。模擬輸入(MUX1,MUX2)選擇 |
①.這些寄存器設置(打開)時,VDD應優先打開或着同時打開。所有電源上電後,寄存器數據需要伴隨系統時鐘輸入的進行設置。 ②.可以設置任何音量和衰減值,這些值需要在系統斷電時保存在寄存器數據中。 ③.設置音頻接口格式方便與DSP或解碼器匹配並被使用。 |
表2 寄存器的上電時序
根據表2,設備上電後,PCM1774啓動,在telnet設備的終端操作,通過I2C設置PCM1774主要模式控制寄存器的值。如圖3所示:
圖3 寄存器寫數據
按時序設置主要模式控制寄存器的值:
i2c_write 0 0x8e 0x40 0x27
i2c_write 0 0x8e 0x41 0x27
i2c_write 0 0x8e 0x44 0x27
i2c_write 0 0x8e 0x45 0x27
i2c_write 0 0x8e 0x46 0x00
i2c_write 0 0x8e 0x49 0xe0
i2c_write 0 0x8e 0x56 0x01
i2c_write 0 0x8e 0x48 0x03
i2c_write 0 0x8e 0x58 0x11
i2c_write 0 0x8e 0x49 0xec
i2c_write 0 0x8e 0x4a 0x01
i2c_write 0 0x8e 0x52 0x30
i2c_write 0 0x8e 0x57 0x11
5.斷電前,主要模式控制寄存器的設置時序
時序 |
寄存器及數據 |
設置項說明 |
1 |
447Fh |
DAC L- CH數字軟靜音啓用.① |
2 |
457Fh |
DAC R-CH數字軟靜音啓用.① |
4 |
5811h |
模擬調音臺輸入( SW2,SW5)選擇 |
5 |
49ECh |
耳機放大器(HPL,HPR,HPC)上電.② |
6 |
5200h |
模擬前端(D2S,MCB,PG1,2,5,6)斷電 |
7 |
5A00h |
PG1,PG2增益控制(0 dB爲單位) |
8 |
4A00h |
Vcom斷電 |
9 |
– |
等待時間(750毫秒).③ |
10 |
49E0h |
耳機放大器(HPL,HPR, HPC)關閉電源,揚聲器放大器(SPL,SPR)斷電 |
11 |
4800h |
模擬調音臺(MXL,MXR)斷電 |
12 |
4900h |
DAC(DAL,DAR)和模擬偏置電源關閉 |
13 |
– |
關閉所有電源.④ |
①.可以設置任何音量和衰減值。 ②.電源關閉時,需要設置耳機放大器。 ③.PCM1774的Vcom到達公共電平的地電平需要時間。所允許的等待時間依賴於設置寄存器125的PTM[1:0]、RES[4:0]。默認設置爲750毫秒。 ④.此處不需要電源排序。根據時鐘輸入設置的寄存器後,關閉所有電源。 |
表3 寄存器的斷電時序
根據表3,設備斷電前,PCM1774啓動,在telnet設備的終端操作,按時序通過I2C設置PCM1774主要模式控制寄存器的值:
i2c_write 0 0x8e 0x44 0x7f
i2c_write 0 0x8e 0x45 0x7f
i2c_write 0 0x8e 0x58 0x11
i2c_write 0 0x8e 0x49 0xec
i2c_write 0 0x8e 0x52 0x0
i2c_write 0 0x8e 0x5a 0x0
i2c_write 0 0x8e 0x4a 0x0
i2c_write 0 0x8e 0x49 0xe0
i2c_write 0 0x8e 0x48 0x0
i2c_write 0 0x8e 0x49 0x0
PCM的數據手冊(也可以去TI官網下載):海思芯片調試PCM1774及PCM1774數據手冊.rar
- 總結
當研究了一段時間後,陷入停滯時,最快的方法的是諮詢做驅動的同事,畢竟其有相關的經驗。但有可能單個同事的想法有不全面,可以再諮詢他人。如果軟件上做足了功夫,不要懷疑自己,大膽的想是不是硬件問題。
另外,首先需要明白PCM1774的工作原理(用I2C控制模式、I2S傳輸數據)。然後,如何讓其實現工作。I2C的如何控制、如何打開I2S的數據傳輸。然後, I2C控制配置什麼寄存器、成什麼模式。英文數據手冊太長,可以搜索關鍵詞(mode、power up、work、function、programer、user)等和啓動PCM1774工作的相關寄存器。上電後,然後仔細看需要配置的寄存器的各寄存器的內容、代表含義、配置什麼值等。
最重要的是,不要停滯,不要害怕,迷茫時問人,大膽懷疑。