下面的波形是MSB Justified的波形,左声道LRCLK拉high, 右声道LRCLK拉low。MSB优先, BCLK上升沿latch数据。各种不同的I2S格式,波形也是不同的。 下面以M451的I2S 为例说明I2S的用法。M451 I2S和SPI1两个IP共用逻辑电路,所以I2S的说明放在SPI IP里面。SPI1和SPI2可以作为2个I2S接口使用,而SPI0是单纯的SPI。 该I2S发送和接收各有4级32bit FIFO,一般我们设定TX/RX 阀值中断是2。对于TX来说,当发送 FIFO中有效数据<=2时,会发生TX 阀值中断;对于RX来说,当接收FIFO中的有效数据>=2时,会发生RX 阀值中断。
也就是将该4级FIFO分成2块做ping-pong。对于发送来说先把4个FIFO都填满,然后发生TX threshold中断时表示第一块已经发送出去,可以填2笔数据到TX FIFO中,此时TX在发送第二块;再次发生TXthreshold中断时,表示第二块已经发送出去,可以填2笔数据到TX FIFO中。对于RX 也是一样的,每次发生RX 阀值中断,可以读两笔数据出来。下面的democode,I2S作为slave,数据宽度16bit,stereo,I2S 波形。采样率由I2S Master决定。只demo I2S可以收发数据而已,如果连接了audiocode,还要通过I2C去初始化audio codec。我们的 M451 BSP里面目录SampleCode\StdDriver下面有2个demo :I2S_Master和I2S_Slave。将两片M451 板子的I2S对接,一个跑I2S_Master,一个跑I2S_Slave,就可以测试I2S的特性。
|