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.

SPI中断问题?



SPI初始化如下:

 SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI

 SpiaRegs.***.all=0x0007;       //8-bit character,上升沿发,下降沿入
 SpiaRegs.***.all=0x0007;       //Interrupt enabled, Master/Slave XMIT enabled
 SpiaRegs.SPIBRR=0x028;           // Baud rate   LSPCLK/(4+1)=20M/40=0.5M
 SpiaRegs.SPIFFTX.all=0xC004;      // Enable FIFO's, set TX FIFO level to 4
 SpiaRegs.SPIFFRX.all=0x0024;      // Set RX FIFO level to 4
 SpiaRegs.SPIFFCT.all=0x00;
 SpiaRegs.SPIPRI.all=0x0010;
 SpiaRegs.SPISTS.all = 0x00;
 SpiaRegs.***.bit.SPISWRESET=1;  // Enable SPI
 SpiaRegs.SPIFFTX.bit.TXFIFO=1;
 SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

F28069的SPI引脚都悬空,这种情况下,用示波器看出SOMI引脚和SIMO引脚电平无变化,但用仿真器仿真却能进入接收中断,为什么?

初充中断子程序中处理:

interrupt void spiRxFifoIsr(void)
{
 Uint16 i;
 Uint8 ***;

    SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;  // Clear Overflow flag
    SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1;  // Clear Interrupt flag
    PieCtrlRegs.PIEACK.all|=0x20;       // Issue PIE ack

}

  • 怎么 TI的技术支持部也不忙吧回答一下。气死人了

  • Hi Sam,

    首先我想明确你主程序有没有持续在发送SPI数据,还是你主程序没有发送数据啥也没做?

    如你所说用示波器看出SOMI引脚和SIMO引脚电平无变化,但用仿真器仿真却能进入接收中断,看起来你主程序并没有发送数据出去。

    有一种情况会引起接收中断,当你发送4个数据出去后,RX FIFO会自动接收到4个数据,由于你的RX引脚悬空,所以读进来的是脏数据,但是,这个时候由于SpiaRegs.SPIFFTX.bit.TXFFST =4 会引起中断。

    另外,在你中断接收函数内请读出4个RX FIFO数据,读一个SpiaRegs.SPIFFTX.bit.TXFFST 自减1,你不读,退出中断后SpiaRegs.SPIFFTX.bit.TXFFST依然为4,马上又进入RX中断。


    我给的建议是:

    比较你的程序和TI例程,首先确定发送输出出去没有问题,在示波器上可以踩到相应波形,然后再接收数据。

  • kqian,

    谢谢你我解答与建议,

    我针对TI的例程进行了多次尝试,发现只有把字符长度改为16位就可以发出数据了,示波器能踩到波形。而8位字符长度怎么改设置SIMO的电平都无变化,这是什么原因?

    针对这种无数据而进入接收中断的情况应该如何解决呢?

    SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI

     SpiaRegs.SPICCR.all=0x000F;       //16-bit character,上升沿发,下降沿入
     SpiaRegs.SPICTL.all=0x0007;       //Interrupt enabled, Master/Slave XMIT enabled
     SpiaRegs.SPIBRR=0x028;           // Baud rate   LSPCLK/(4+1)=20M/40=0.5M
     SpiaRegs.SPIFFTX.all=0xC004;      // Enable FIFO's, set TX FIFO level to 4
     SpiaRegs.SPIFFRX.all=0x0024;      // Set RX FIFO level to 4
     SpiaRegs.SPIFFCT.all=0x00;
     SpiaRegs.SPIPRI.all=0x0010;
     SpiaRegs.SPISTS.all = 0x00;
     SpiaRegs.SPICCR.bit.SPISWRESET=1;  // Enable SPI
     SpiaRegs.SPIFFTX.bit.TXFIFO=1;
     SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

    因为发送数据是左边开始移位