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

[复制链接]
1453|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))"这句代码中,目前不清楚是什么原因,代码见附件(代码中已经屏蔽了从机接受部分) 105406811d70cc3bff.png 523786811d735cd0ee.png 369226811d7429dbbc.png 179706811d74d29a51.png
1.png
2.jpg
3.png
4.jpg
5.png
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位)。

使用特权

评论回复
wh13651|  楼主 | 2025-5-7 13:37 | 显示全部楼层

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

使用特权

评论回复
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就会有数据输出。 87068681af323b0499.png

使用特权

评论回复
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];

使用特权

评论回复
powerantone| | 2025-5-7 16:00 | 显示全部楼层
DMA传输的数据宽度设置可能不正确。

使用特权

评论回复
probedog| | 2025-5-7 17:00 | 显示全部楼层
DMA中断或标志位处理问题?

使用特权

评论回复
stormwind123| | 2025-5-7 19:00 | 显示全部楼层
I2S配置错误?

使用特权

评论回复
wh13651|  楼主 | 2025-5-8 09:09 | 显示全部楼层
powerantone 发表于 2025-5-7 16:00
DMA传输的数据宽度设置可能不正确。

问题是哪里错了呢。 98888681c03fce94dd.png 76355681c04140d559.png

使用特权

评论回复
wh13651|  楼主 | 2025-5-8 09:11 | 显示全部楼层
probedog 发表于 2025-5-7 17:00
DMA中断或标志位处理问题?

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

使用特权

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

本版积分规则

12

主题

42

帖子

1

粉丝