关于SPI编程过程中遇到的问题(含解决方案)
最近手上有个小项目,其中一个功能是要实现STM32与DSP的SPI通信。
从来没有进行过通信编程的我,着实心中有很多烦恼。
首先是对这个SPI的通信协议,协议的定义时序看了很多遍了,但就是不知道怎么用,由于手中资源有限,也无法让我自己去验证,只能在项目的基础上去摸索了。
其次,对于两块处理器芯片的SPI资源的调用方面。
STM32通用例程很多,在功能中又是工作在主模式上,所以实现起来还是比较的方便。
DSP方面,对于跑程序的处理器,一般不会把它工作在从模式上。然而我很不幸地就要这么子做了。
DSP是ADI公司最新的一块SHARC系列ADSP-21489。里面很多资源都封装得很好,只要简单地修改寄存器就好了。
正如我现在要实现的从模式收发数据,读写数据从历程中就是直接的对接收/发送寄存器进行操作,辅以状态位的变化显现。
困惑正是在于这里,今天花了一天的时间,以这种方式写了个从模式下SPI接收数据的程序,还没有实验,还不知道成功没有。
现在的几个问题。
1、只要SPI功能打开,SPI就会像时序那样传送数据了么?
2、DSP工作在从模式方面,如何去获取SPI使能的标志?
2、用我现在的编程方式是否可以实现接收信号?
2014年12月22日22:57:50
总算把STM32与ADSP-21489的SPI通信调通了,调通了之后才发现没有这么难。
对于自己没调通之前的疑惑,也总算有答案了。
答案一:只要SPI功能打开,SPI就会像时序描述的那样传送数据。
答案二:ADSP的SPI模块有四个主要寄存器,配置寄存器,时钟寄存器(工作在主模式)、标志寄存器和状态寄存器。
ADSP工作在从模式,是通过标志寄存器中的ISSS标志位获取使能的。
答案三:可以实现全双工通信,现在也实现了全双工通信,但是在一次发送/接受过程中,无法保证全双工通信。
我现在的实现方式是,STM32一直发送数据,接受的数据验证通过后,拉高原先拉低的引脚以确保通信成功。
STM32与ADSP-21489 SPI通信总结:
首先,STM32工作在主模式中,STM32的库函数与例程资源特别丰富,基本在网上就能找到实现方式,又是主模式(标准模式)
所以实现起来特别容易。但也真是这样让我走了些弯路。
其次,ADSP工作在从模式中,一般这样的处理器不会工作在从模式中的,因为在SPI的通信过程中会占用系统CPU资源,换句话说就是:
只要在SPI通信过程中,处理器就不能做其他的事情了。所以ADSP工作在从模式的情况只有外部启动时才这么做。
本身对ADSP的接触并不多,对直接的寄存器操作也不是很娴熟。STM32顺风顺水的同时也让我绕过了一种思维,就是直接对寄存器进行操作
来控制SPI口的思维。