This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有关28335的SPI接口问题



想咨询下TI的工程师,F28335的SPI接口配置为主机,非FIFO模式,无论怎么配置,都不能进中断,只能在查询方式下才能发送数据,

//初始化SPI配置控制寄存器
SpiaRegs.***.bit.SPISWRESET = 0;//清除SPI相关操作标志位,准备配置SPI接口
SpiaRegs.***.bit.CLKPOLARITY = 0;//设置SPI移位时钟极性
SpiaRegs.***.bit.SPILBK = 0;//该位为0则禁止SPI自测试功能,为1则允许SPI自测试功能
SpiaRegs.***.bit.*** = 7;//SPI数据长度为8位
//初始化SPI操作控制寄存器
SpiaRegs.***.bit.OVERRUNINTENA = 0;//禁止接收器溢出中断
SpiaRegs.***.bit.CLK_PHASE = 0;//无延时的SPI时钟方案
SpiaRegs.***.bit.MASTER_SLAVE = 1;//SPI工作模式选择,1主控制器模式,0从机模式
SpiaRegs.***.bit.TALK = 1;//使能SPI接口4个引脚的相应功能
SpiaRegs.***.bit.SPIINTENA = 1;//使能SPI中断
SpiaRegs.***.bit.SPISWRESET = 1;

以上是我的配置过程,麻烦帮帮忙咯

  • 当不用FIFO时,只有一个中断,发送和接收共用一个,因为发送和接收是同时完成的: 例如主机上升沿发下降沿收,那么从机就必须上升沿收下降沿发,所以一串时钟过去之后,主机发送完了数据,从机也发送完了数据。   如果是无协议的收发,例如A发给B,B只负责收,那么A就不需要开启中断,因为都不需要去读数(对方都没真正发数据给你,收到的都是对方TXBUF保存的值)   如果是有协议的收发,例如主机A发0x01,代表叫B发一个频率的值过来,那么过程是这样的:  首先 A------>--------0X01------>------B      这个0x01含义是双方商定的 同时 A------<--------垃圾1----<------B  这个垃圾1是B自动发的,A不用读    然后 A------>--------垃圾2------>------B  这个垃圾2是为了产生时钟让B发送数据过来的 同时 A------<--------频率--------<------B  这个频率是B借住A虚发过程发送过来的   所以说发送和接收是同时完成的,如果中断使能之后,进是一定会进的,因为无论发送完毕还是接收完毕都会引起中断,读还是不读就得看收到的数是不是有意义的。

  • 改变SPI配置,应完成以下操作:
      (1).清除SPI SW RESET 位(SPICCR.7),以迫使SPI进入复位状态;
      (2).初始化SPI的配置包括数据格式、波特率、工作模式和引脚功能等;
      (3).设置SPI SW RESET 位为1,是SPI退出复位状态;
      (4).写数据到SPIDAT或SPITXBUF(这就启动了主模式通信过程);
      (5).数据传输结束后(SPISTS.6=1),读取SPIRXBUF中的数据;

    还有你的代码中没有中断的入口地址指定     中断使能  等信息

    你重点排除这方面的问题

  • 中断使能,入口都配置好了的,我在试试,谢谢

  • 我也遇到这种情况,请问怎么解决的?谢谢!!!