又忘了!!!
当spi做rx时,正常情况下是需要先写个dummy byte(多数可能是0xff)过去,spi才能收到一个数据。所以我竟然只配置了dma的receive,死都出不来。。。忘了上次做spidma是哪一年了,又被教训一次。
spi 的rx dma应用,必须同时将tx dma设置好!!比如gd303的spi0 :
void spi0_dma_config(void)//void spi0_dma_start_wait(void)
{
dma_parameter_struct dma_init_struct;
/* enable DMA0 */
rcu_periph_clock_enable(RCU_DMA0);
rcu_periph_clock_enable(RCU_AF);
/* spi0 RX */
dma_deinit(DMA0, DMA_CH1);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = (uint32_t)spi0_buffer;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
dma_init_struct.number = RF_FIFO_LEN;//12;//ARRAYNUM(spi0_buffer);
dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI0);

本文详细介绍了在SPI通信中使用DMA进行接收和传输的配置过程,强调了必须同时配置TXDMA的重要性。通过代码示例展示了针对GD303的SPI0如何设置DMA参数,以及启动接收和传输的步骤。作者指出SPI DMA的设置相对复杂,但能提高效率。
最低0.47元/天 解锁文章
5758





