由于AC7811没有库函数配置这个SPI-DMA传输方式(AC7801是有的),所以可能使用起来有点不方便。但完全参照库函数,也有缺点(库函数为了适配多种应用场景,做的处理比较多),库函数会重新初始化DMA配置,使得运行效率稍微低一些。
而最常用的方式,是以固定长度在传输的。基于这种传输方式,我写了一个例程配置,进行SPI-DMA传输时,只需要进行DMA通道使能就可以了。
程序中主机发送8个字节的数据,然后收6个字节的数据;如下图:
需要注意两点:
1、时钟由主机发送,虽然主机实际发送的有效数据只有前8个,但实际要发14个,因为后面接收的6个数据的时钟,也要由主机提供。
2、SPI是一种全双工通信方式,但实际使用上,更多是如图的那种半双工的。所以在接收的6个有效数据,是从第9个数据开始的。例如程序中接收的6个数据,为g_spiRxBuffer[8]到g_spiRxBuffer[13];如以下仿真图:
附上AC7811的SPI主机DMA传输的工程:
SPI_Master_DMA_simple.rar
(663.74 KB)
|