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.

28035 SPI 接收中断



28035 SPI在SPI发送数据结束之后自动的进入到接收中断。

然后再接收缓存里面收到的居然是发送出去的数据。

PS:自发自收测试模式已经取消

请问这个问题怎么解决?

网络上也有人建议就不要用接收中断方式了,建议关闭SPI的FIFO采用查询SPI INT FLAG中断。

哎,请帮忙指导一下吧。

最好能传一个不是自发自收例子参考一下,谢谢大家了。

配置代码如下

EALLOW;
PieVectTable.SPIRXINTA = &spiRxFifoIsr;

SpiaRegs.***.bit.SPISWRESET =1; // 重新复位SPI接口
//SpiaRegs.***.all =0x0017; //test---
SpiaRegs.***.all =0x0007; // 复位,8位传输, 时钟极性 CLOCKPOLARITY = 0 不开放自接收模式
//SpiaRegs.***.all =0x0006; //test---
SpiaRegs.***.all =0x0017; // 配置为主机模式,时钟相位CLOCKPHASE = 1
//--- // 禁用中断,使能4线模式
SpiaRegs.SPISTS.all=0x0000; // 复位中断标志
SpiaRegs.SPIBRR =0x0063; // SPI波特率设置 bps = LSPCLK/(SPIBBR+1)
SpiaRegs.SPIFFTX.all=0xC040 | TXFIFODEP; // Enable FIFO's, set TX FIFO level to 4
SpiaRegs.SPIFFRX.all=0x2060 | RXFIFODEP; // Set RX FIFO level to 4
SpiaRegs.SPIFFCT.all=0x00; // 设置FIFO为0延时操作
//SpiaRegs.SPIPRI.bit.FREE = 1; // 自由模式
SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
/*
SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.***.all=0x0007; //16-bit character, Loopback mode
SpiaRegs.***.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabled
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x0063; // Baud rate
SpiaRegs.SPIFFTX.all=(0xC020 | TXFIFODEP); // Enable FIFO's, set TX FIFO level to 2
SpiaRegs.SPIFFRX.all=(0x0020 | TXFIFODEP); // Set RX FIFO level to 2
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;
SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;*/

//SpiaModeInit();

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER6.bit.INTx1=1; // Enable PIE Group 6, INT 1
IER |=0x20; // 开放PIE第六组中断
// 开放全局中断
EDIS;