大家好:我通过DMA实现对外设进行控制。具体情况是这样的:外设是外部Flash接口符合SPI协议,我仿照例程进行改写,实现可以通过DMA实现对外设Flash进行读写。首先,我根据Flash的命令格式,实现通过CPU控制SPI实现对Flash进行读写,这步调试完毕。之后想通过DMA对Flash进行操作。
问题1:在程序中,如果一开始不用DMA,只通过SPI可以对Flash进行操作。只要一使用DMA,在切换到SPI操作Flash读取数据就不正常了。这是为什么?
问题2:通过DMA对外设Flash读取数据时,好像多了一个无效数据,导致最后一个数据丢失,这是为什么?
问题3:DMA中断应该是将所有数据传完才进中断的吧?为什么我观察到的现象是进入中断时,还有几个数据还在传输?
期望大神的指点,谢谢!
user4129436:大家都没用过DMA对外设进行操作吗?分享一下对DMA的理解也行啊,主要是我自己看英文手册可能有些地方理解的不正确,能分享一下DMA的应用经验也行,谢谢
大家好:我通过DMA实现对外设进行控制。具体情况是这样的:外设是外部Flash接口符合SPI协议,我仿照例程进行改写,实现可以通过DMA实现对外设Flash进行读写。首先,我根据Flash的命令格式,实现通过CPU控制SPI实现对Flash进行读写,这步调试完毕。之后想通过DMA对Flash进行操作。
问题1:在程序中,如果一开始不用DMA,只通过SPI可以对Flash进行操作。只要一使用DMA,在切换到SPI操作Flash读取数据就不正常了。这是为什么?
问题2:通过DMA对外设Flash读取数据时,好像多了一个无效数据,导致最后一个数据丢失,这是为什么?
问题3:DMA中断应该是将所有数据传完才进中断的吧?为什么我观察到的现象是进入中断时,还有几个数据还在传输?
期望大神的指点,谢谢!
user5338487:
回复 user4129436:
可能是SPIBUF中的数据没有清空,导致取到的第一个数异常,你查看一下SPIBUF寄存器说明,在使用SPI传输之前把SPIBUF寄存器中原来的数清空