我使用的是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的数据。
请各位帮忙看看,我这个问题出自哪里?谢谢!
Susan Yang:
您可以参考一下下面的程序,是基于28346测试的,自己的SPIA发送,SPID接收。
Example_2834xSpi_FFDLB_int.c
另外您也可以参考C \ ti \ controlSUITE \ device_support \ f2833x \ v142 \ DSP2833x_examples_ccsv5 \内的SPI程序,但需要将示例从主模式更改为从模式。 附上SPI参考指南
6114.3000.TI_SPI_2833x_sprueu3a.pdf
我使用的是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的数据。
请各位帮忙看看,我这个问题出自哪里?谢谢!
mangui zhang:你最好看一下波形从机发送也即是使用的主机的clk进行数据传输的
看看时钟使能等时序对不