TI中文支持网
TI专业的中文技术问题搜集分享网站

28335的spi,配置成从模式后,没法发送数据

我使用的是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进行数据传输的
看看时钟使能等时序对不

赞(0)
未经允许不得转载:TI中文支持网 » 28335的spi,配置成从模式后,没法发送数据
分享到: 更多 (0)