打印

【求助】GD32H757 使用DMA实现i2s主机发送,I2s无法配置为32bit

[复制链接]
1428|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wh13651|  楼主 | 2025-4-30 15:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
DM, DMA, I2S, bi
本帖最后由 wh13651 于 2025-5-8 09:06 编辑

求助,目前使用V1.4.0版本例程,调试DMA实现I2S主机发送从机接收功能。调试过程中发现,只有I2S数据长度配置为16位时,示波器检测才能有数据波形输出,一旦配置成24位或32位,就会卡死在主程序"while(!dma_flag_get(DMA0, DMA_CH0, DMA_FLAG_FTF))"这句代码中,目前不清楚是什么原因,代码见附件(代码中已经屏蔽了从机接受部分)

1.png (34.29 KB )

1.png

2.jpg (1.02 MB )

2.jpg

3.png (31.53 KB )

3.png

4.jpg (1.13 MB )

4.jpg

5.png (32.04 KB )

5.png

6.jpg (752.95 KB )

6.jpg

GD32H7xx_Firmware_Library_V1.4.0 20250508.zip

2.41 MB

使用特权

评论回复
沙发
wh13651|  楼主 | 2025-5-7 09:44 | 只看该作者
1111

使用特权

评论回复
板凳
海滨消消| | 2025-5-7 13:01 | 只看该作者
DMA配置不匹配?

使用特权

评论回复
地板
flycamelaaa| | 2025-5-7 13:02 | 只看该作者
DMA传输的字节数可能未正确匹配I2S数据长度设置(24位或32位)。

使用特权

评论回复
5
wh13651|  楼主 | 2025-5-7 13:37 | 只看该作者

请问配置不匹配指哪些地方呢,DMA设置成32位时还有别的地方要更改吗,左侧是我的,右侧是例程

使用特权

评论回复
6
wh13651|  楼主 | 2025-5-7 13:49 | 只看该作者
flycamelaaa 发表于 2025-5-7 13:02
DMA传输的字节数可能未正确匹配I2S数据长度设置(24位或32位)。

感觉不是这个问题,如果是传输字节数和设置长度不匹配,正常也应该按照传输字节数发送吧,就算内存地址溢出,当前程序只是发送数据,无非就是从溢出后的RAM内存地址继续读数发出来而已,等到dma计数寄存器归零之后一样就会停止发送了,现在问题是连发送都没有,我仿真看的寄存器值设置的也正确,程序其它位置不变,I2S一旦配置为下图的 I2S_FRAMEFORMAT_DT32B_CH32B,就不会有数据发送,但是 I2S_FRAMEFORMAT_DT16B_CH32B和I2S_FRAMEFORMAT_DT16B_CH16B就会有数据输出。

使用特权

评论回复
7
wh13651|  楼主 | 2025-5-7 15:53 | 只看该作者
__attribute__((aligned(32))) uint32_t spi0_send_array[ARRAYSIZE] = {0xA1B1, 0xA2B2, 0xA3B3, 0xA4B4, 0xA5B5, 0xA6B6, 0xA7B7, 0xA8B8, 0xA9B9, 0xAABA};
__attribute__((aligned(32))) uint32_t spi1_receive_array[ARRAYSIZE];
修正一个错误,原程序这里写成了32字节对齐,但遗憾的是,改成4字节对齐也是不行
__attribute__((aligned(4))) uint32_t spi0_send_array[ARRAYSIZE] = {0xA1B1, 0xA2B2, 0xA3B3, 0xA4B4, 0xA5B5, 0xA6B6, 0xA7B7, 0xA8B8, 0xA9B9, 0xAABA};
__attribute__((aligned(4))) uint32_t spi1_receive_array[ARRAYSIZE];

使用特权

评论回复
8
powerantone| | 2025-5-7 16:00 | 只看该作者
DMA传输的数据宽度设置可能不正确。

使用特权

评论回复
9
probedog| | 2025-5-7 17:00 | 只看该作者
DMA中断或标志位处理问题?

使用特权

评论回复
10
stormwind123| | 2025-5-7 19:00 | 只看该作者
I2S配置错误?

使用特权

评论回复
11
wh13651|  楼主 | 2025-5-8 09:09 | 只看该作者
powerantone 发表于 2025-5-7 16:00
DMA传输的数据宽度设置可能不正确。

问题是哪里错了呢。

使用特权

评论回复
12
wh13651|  楼主 | 2025-5-8 09:11 | 只看该作者
probedog 发表于 2025-5-7 17:00
DMA中断或标志位处理问题?

DMA没使用中断,另外主程序里测试开启传输前清楚了DMA0对应通道的各个标志位,也不好使,实际仿真时也看过标志位没有置位,就奇了大怪了。

使用特权

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

本版积分规则

12

主题

42

帖子

1

粉丝