Cortex-M3 (NXP LPC1788)之IIS控制器
圖1:I2S時序
從圖中可以看出每個串行時鐘SCK傳送一位音頻信號,因此SCK的頻率=聲道數X采樣頻率X采樣位數。如程序中44.1KHZ采樣的16位立體音,對應的SCK頻率為2X16X44100HZ。WS是字段選擇,也稱為幀時鐘,他的一個周期正好傳輸一幀數據。在WS改變后,數據字在發送時鐘的下一個下降沿上開始。即圖中MSB位在WS下降沿的下一個SCK時鐘出現。在立體聲模式下,當WS為低電平時發送左聲道數據,當WS為高電平時發送右聲道數據。如果是單聲道模式,相同的數據會在WS的高低電平各發送一次。因此,要正確的通過I2S總線進行音頻信號的傳送,關鍵要正確配置傳輸速率。對于LCP1778,我們通過配置數字音頻輸出寄存器I2SDAO配置音頻數據的寬度、聲道數、和WS的周期。程序中的音頻數據為44.1KHZ采樣的16位立體音,因此I2SDAO中的WS_halfperiod字段配置成16-1,因為WS低電平和高電平各發送16位數據。配置SCK要設置2個寄存器,首先配置發送時鐘速率寄存器I2STXRATE,通過它配置分數速率發生器以分頻CCLK得到I2S TX_REF=CCLKX(X/Y)/2;如果我們使能了MCLK輸出時,RX_REF就發送到MCLK管腳。其次,配置位發送時鐘位速率寄存器I2STXBITRATE,該寄存器的值加1用來分頻TX_REF得到SCK頻率。
對I2S控制器配置完成后,我們可以將要發送的音頻數據寫入發送FIFO,FIFO的大小為8個字。而且發送和接收通道僅接收32位對齊的數據,因此對較短的數據我們要進行擴展才能寫入FIFO進行發送。
對于總線上的狀態,將在狀態反饋寄存器I2SSTATE中進行指示,主要有中斷和DMA請求的指示以及FIFO的當前深度指示。對于中斷我們可以配置中斷請求控制寄存器I2SIRQ設置FIFO觸發中斷的深度。
評論