最近在研究GD32F4ZGT6 读取24位麦克风数据,PCM短帧。程序配置如下,
spi_i2s_deinit(SPI1);
i2s_init(SPI1, I2S_MODE_MASTERRX, I2S_STD_PCMSHORT, I2S_CKPL_LOW);
///i2s_init(SPI1, I2S_MODE_MASTERRX, I2S_STD_PHILLIPS, I2S_CKPL_LOW);
i2s_psc_config(SPI1, I2S_AUDIOSAMPLE_16K, I2S_FRAMEFORMAT_DT24B_CH32B, I2S_MCKOUT_DISABLE);
dma_config();
i2s_enable(SPI1);
dma_channel_enable(DMA0, DMA_CH3);
spi_dma_enable(SPI1, SPI_DMA_RECEIVE);
实际能读到麦克风的24数据,图片上传失败, 如: rxbuf[0] = 0x000A,rxbuf[1] = 0x4100,rxbuf[3] = 0x7FFC,rxbuf[3] = 0xB900....
看接收的数据,第二次读入的数据,低8位为0,应该是读到24 位数据了。rxbuf[0] = 0x000A,rxbuf[1] = 0x4100,数据高位对齐,即0x000A4100 ,0x7FFC0B900的高24位。
现在的问题是,按照麦克风手册的说法,应该是24位有符号数据,那么音频数据的最高位应该会出现1,表示负值。但现在说到的数据最高位全是0.我看STM32 手册,介绍说是因为最高位实际是上一个数据的最后一位。请问是不是这个原因? |