打印
[研电赛技术支持]

GD32F4ZGT6 I2S读取24位麦克风

[复制链接]
1843|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lshaiou|  楼主 | 2023-8-1 06:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在研究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 手册,介绍说是因为最高位实际是上一个数据的最后一位。请问是不是这个原因?

使用特权

评论回复
沙发
tpgf| | 2024-5-7 14:32 | 只看该作者
24位的麦克风数据可以通过两次读取得到吗

使用特权

评论回复
板凳
wakayi| | 2024-5-7 15:14 | 只看该作者
如果最高位出现1的话 程序里边需要对数据进行处理

使用特权

评论回复
地板
xiaoqizi| | 2024-5-7 20:12 | 只看该作者
每次读取8位的话 应该统一双方的大小端

使用特权

评论回复
5
wowu| | 2024-5-7 20:44 | 只看该作者
短帧和长帧 他们俩的数据位数大概相差多少呢

使用特权

评论回复
6
paotangsan| | 2024-5-7 21:48 | 只看该作者
麦克风是多少位的 是不是能决定其音色的好坏啊

使用特权

评论回复
7
埃娃| | 2024-5-15 22:41 | 只看该作者
如何判断大小端啊

使用特权

评论回复
8
kzlzqi| | 2024-7-31 21:56 | 只看该作者
第二次读入的数据,低8位为0,应该是读到24 位数据了

使用特权

评论回复
9
ym0sly| | 2024-8-31 12:31 | 只看该作者
你遇到的情况涉及到24位麦克风数据的读取

使用特权

评论回复
10
ym0sly| | 2024-8-31 12:32 | 只看该作者
因为I2S总线使用的是32位的数据宽度,24位数据会被填充到32位寄存器中。

使用特权

评论回复
11
ym0sly| | 2024-8-31 12:36 | 只看该作者
在接收到的数据中,你可能需要将24位数据从32位寄存器中提取出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

1

粉丝