AC7801FDLA芯片,SPI作为从机DMA方式通信问题
hiall,使用Autochip官网提供的SDK,SPI作为从机DMA方式接收数据,主机端每隔250毫秒和300毫秒发送数据,但是从机接收几条数据就一直收不到数据了一直都是0. 但是用中断方式接收是完全OK的。代码如下:
memset(&rxMessage, 0, sizeof(stComMessage));
if(spiParms.spi_dma_enable != TRUE) {
//中断方式
SPI_ResetTransmitReceiveStatus(SPI0);
/*接收数据.*/
SPI_ReceiveInt(SPI0, (uint8_t*)&rxMessage, sizeof(stComMessage));
SPI_Slave_WaitFinish(0, COM_DIR_RX, 10);//等待接收完毕
SPI_ResetTransmitReceiveStatus(SPI0);
}
else { //DMA方式
/*接收数据.*/
s_dma_rx_finish = FALSE;
SPI_ReceiveDMA(SPI0, DMA0_CHANNEL0, (uint8_t*)&rxMessage, sizeof(stComMessage), DMA_RX_Callback);
SPI_Slave_WaitFinish(1, COM_DIR_RX, 10);//等待接收完毕
}
AUTOCHIP提供的SPI_ReceiveDMA和SPI_TransmitDMA接口有什么BUG吗?
帮顶,没用过AC78013的SPI从机,猜测可能是SPI状态或DMA状态没用清除 DMA从机最大的问题在于你一定要在主机发起通信前把数据准备好,否则一定会异常,应用笔记里面有主从机通信的例程,可以参考以下
JasonLee27 发表于 2022-1-18 13:23
DMA从机最大的问题在于你一定要在主机发起通信前把数据准备好,否则一定会异常,应用笔记里面有主从机通信 ...
我就是参考官网的samplecode, 我是两个板子通信,先启动从机 只做接收动作,再启动主机去发送,有时候收一帧就收不到任何东西了。 fanchenxinok 发表于 2022-1-18 15:11
我就是参考官网的samplecode, 我是两个板子通信,先启动从机 只做接收动作,再启动主机去发送,有时候收 ...
这种一般都是两边同步的问题,所以sample里面都是额外用了一个gpio来做主从机的同步,从机通过gpio来通知主机,确保从机一定是先准备好数据,主机才开始通信 这个是几线制的spi啊 必须保证时钟同步 本身就是有时钟线的 感觉这样做需要配置的东西比较多啊 不需要做的这么麻烦把 不需要再用额外的引脚了啊
这个一定要时钟同步才可以的,不然没有希望的。
页:
[1]