最进项目需求用到了一款SPI通讯方式的传感器,每次在定时器触发比较中断后开始读取3个SPI数据,定时器触发的周期40us,如果在中断中开始读取传感器数据大概需要十几个us,再加上处理其它的事情差不多整个中断要停留二十几个us占用了大量时间,所以想有个办法可以让定时器自动触发3个SPI数据的读取,数据读取完毕后再进入中断开始处理数据。
要实现自动触发首先想到的是要开启SPI的发送和接收DMA,当接收DMA使能后,需要再使能发送DMA才能触发SPI通讯,现在的关键问题就是如何使定时器能够自动触发SPI发送DMA的使能,这时就可以使用定时器的DMA写SPI发送DMA控制寄存器,无论是定时器更新DMA还是比匹配DMA都可以,如将定时器更新DMA的目标外设地址设置为SPI发送DMA的控制寄存器,当定时器更新DMA触发时会写SPI发送DMA控制器,使其使能开启。经实际程序验证此方案可行。
最进项目需求用到了一款SPI通讯方式的传感器,每次在定时器触发比较中断后开始读取3个SPI数据,定时器触发的周期40us,如果在中断中开始读取传感器数据大概需要十几个us,再加上处理其它的事情差不多整个中断要停留二十几个us占用了大量时间,所以想有个办法可以让定时器自动触发3个SPI数据的读取,数据读取完毕后再进入中断开始处理数据。
要实现自动触发首先想到的是要开启SPI的发送和接收DMA,当接收DMA使能后,需要再使能发送DMA才能触发SPI通讯,现在的关键问题就是如何使定时器能够自动触发SPI发送DMA的使能,这时就可以使用定时器的DMA写SPI发送DMA控制寄存器,无论是定时器更新DMA还是比匹配DMA都可以,如将定时器更新DMA的目标外设地址设置为SPI发送DMA的控制寄存器,当定时器更新DMA触发时会写SPI发送DMA控制器,使其使能开启。经实际程序验证此方案可行。
举报