GD32F4 spi dma读gd25Q
demo中是spi 读gd25Q Norflash数据,运行正常,改用dma 方式无法工作。我的代码如下:void spiflash_dma_config(uint8_t *data)
{
rcu_periph_clock_enable(RCU_DMA1);
dma_single_data_parameter_struct spi_dma_init_struct;
dma_deinit(DMA1,DMA_CH6);
spi_dma_init_struct.direction = DMA_PERIPH_TO_MEMORY;
spi_dma_init_struct.number = 8;
spi_dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI5);
spi_dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
spi_dma_init_struct.priority = DMA_PRIORITY_LOW;
spi_dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
spi_dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
spi_dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_DISABLE;
spi_dma_init_struct.memory0_addr = (uint32_t)data;
dma_single_data_mode_init(DMA1,DMA_CH6,&spi_dma_init_struct);
dma_channel_subperipheral_select(DMA1,DMA_CH6,DMA_SUBPERI1);//接收通道配置
dma_circulation_disable(DMA1, DMA_CH6);
dma_channel_disable(DMA1,DMA_CH6);
spi_dma_disable(SPI5,SPI_DMA_RECEIVE);
}
void spi_flash_dma_read(uint32_t read_addr)
{
SPI_FLASH_CS_LOW();
spi_flash_send_byte(READ);
spi_flash_send_byte((read_addr & 0xFF0000) >> 16);
spi_flash_send_byte((read_addr& 0xFF00) >> 8);
spi_flash_send_byte(read_addr & 0xFF);
dma_channel_enable(DMA1,DMA_CH6);
spi_dma_enable(SPI5, SPI_DMA_RECEIVE);
while(dma_flag_get(DMA1,DMA_CH6,DMA_FLAG_FTF)!= SET){}
dma_flag_clear(DMA1,DMA_CH6,DMA_FLAG_FTF);
dma_channel_disable(DMA1,DMA_CH6);
SPI_FLASH_CS_HIGH();
}
main()
{。。。。初始化省略
spi_flash_init(); //这是demo的
spiflash_dma_config(my_buf);
spi_flash_dma_read(0x0c0000);
}
发现一直在 while(dma_flag_get(DMA1,DMA_CH6,DMA_FLAG_FTF)!= SET){}中,求指导,谢谢!
可以采用DMA发送读命令数据,gd25q才会回数据。 spi的dma模式没有用过。 GD32F4 是有QSPI接口呢? 可以使用模拟spi判断是不是硬件的问题。 直接spi读取就行,spi调试简单。 看报错感觉是DMA状态不对,然后死等了。 你看看这个函数检测的是什么寄存器。 用的是官方的例程吗? 是不是DMA配置的问题 楼主问题解决了吗,我发现SPI速度比STM32的慢好多,也准备用DMA,和你一样卡在这了,可以分享一下吗 用模拟spi判断是不是硬件的问题 我也存在这个问题 使用普通模式没有问题改用dma就一堆问题 看楼主的现象好像是一只在dma状态中等待了 使用dma发送数据和接收数据和普通的模式进行发送接收数据有什么不同的呢 一般来说 有没有数据显示dma方式下通讯速度能快上多少呢 sxm1234567 发表于 2022-12-21 13:36
楼主问题解决了吗,我发现SPI速度比STM32的慢好多,也准备用DMA,和你一样卡在这了,可以分享一下吗 ...
我理解的只是提升了单片机的效率 并不能从根本上解决通讯速率的问题 可以考虑使用dma进行发送吗这样有助于效率的提高吗 dma太难用了,可能是我不会使用的吧。 gd25Q跟w25q有什么不同呢
页:
[1]
2