关于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口的思维。

      

posted on 2014-12-17 21:24  BinkYin  阅读(3529)  评论(1编辑  收藏  举报

导航