关于SPI_DMA收发的一点小疑问
本帖最后由 tzz1983 于 2024-1-25 14:43 编辑如下面的代码, 发送和接收设置为同一个地址,实现数据交换
个人认为从理论上来说是可以的,因为DMA先从buf读出数据传给SPDAT,发送完(1字节或4字节)后再把SPDAT写回buf
实测也是可以的,就是不知道这样做可不可靠,大家来讨论讨论
u8 SPI_DMA_shift(u8 *buf, u16 len)
{
DMA_SPI_TXAH = (u16)buf >> 8; //SPI发送数据存储地址
DMA_SPI_TXAL = (u16)buf;
DMA_SPI_RXAH = (u16)buf >> 8; //SPI接收数据存储地址
DMA_SPI_RXAL = (u16)buf;
len--;
DMA_SPI_AMTH = len>>8;//设置传输总字节数
DMA_SPI_AMT= len; //设置传输总字节数
DmaFlag = 1; //设置查询标志,中断里清零
DMA_SPI_CR |= 0x40; //开始SPI_DMA主模式操作
while(DmaFlag);
return DmaSpiSta; //在中断里 DmaSpiSta=DMA_SPI_STA;DmaSpiSta 用于反馈给应用本次传输是否有异常
}
这种操作完全可行
页:
[1]