最近在玩W5100S-L这个芯片。 使用SPI+DMA时,CPU在执行完DMA函数调用后会继续执行后续代码,而DMA的TC中断也并不是数据完全传完的时刻(而是最后一个数据放入缓存区后就TC中断),同时,使用DMA时不能使能SPI的中断,否则会冲突卡死。综上,如何判断SPI的数据传完了,从而拉高CS片选引脚,以及处理得到的数据?
可用一个定时器,根据SPI传输的数据量和SPI的波特率,估算所需时间,用定时器定时中断发送信号量,在主程序中等待信号量到来后继续拉高CS片选并进行数据处理。
当然,后来觉得不用DMA,直接接收好像也来得及,而且还不用这么麻烦估计完成时间,果断改成CPU直接收发。但这个思路经验证可用,后面或许可用用到其他地方。