我使用的是spia,配置为从模式,使用的是这几个引脚。
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1;
从主机往f28335发送数据,从机这边能够正确的收到数据。
但是从机在中断里面使用如下语句,往主机回数据会出现问题:
__interrupt void
spiRxFifoIsr(void)
{
rdata[idx]=SpiaRegs.SPIRXBUF&0xff;
idx++;
SpiaRegs.SPITXBUF='R';
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; // Clear Overflow flag
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ack
}
理论上miso信号线上会有波形。但是实测却没有。导致主机收不到任何数据。
FIFO初始化代码如下:
//
// spi_fifo_init -
//
void
spi_fifo_init()
{
//
// Initialize SPI FIFO registers
//
SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.***.bit.***=7; //数据宽度
SpiaRegs.***.bit.CLKPOLARITY=0; //时钟极性
SpiaRegs.***.bit.SPIINTENA=1;
SpiaRegs.***.bit.MASTER_SLAVE=0;
SpiaRegs.***.bit.TALK=1;
SpiaRegs.***.bit.CLK_PHASE=1; //时钟相位
SpiaRegs.***.bit.OVERRUNINTENA=1;
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIFFTX.bit.SPIRST=1;
SpiaRegs.SPIFFTX.bit.TXFFIL=8;
SpiaRegs.SPIFFTX.bit.TXFFIENA=0;
SpiaRegs.SPIFFTX.bit.SPIFFENA=1;
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;
SpiaRegs.SPIFFRX.bit.RXFFIL=1;
SpiaRegs.SPIFFRX.bit.RXFFIENA=1;
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;
SpiaRegs.SPIPRI.all=0;
SpiaRegs.SPIPRI.bit.FREE = 1; // 11 mode -
SpiaRegs.SPIPRI.bit.SOFT = 1; // 11 mode -
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;
SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
}
IO的初始化应该没问题的,因为我将cpu暂停,这个时候可以从miso获取到跟mosi延迟一个byte的数据。
请各位帮忙看看,我这个问题出自哪里?谢谢!