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

28075 SPI接收问题

我的SPI 发送波形已经出来,没发现有问题,对方应答的也有相应的波形,但我从接收读出的数据与 应答数据不一至,请帮忙分析一下。

初始化如下:

 EALLOW;  

GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0; // 
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0; // 
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0; // 
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0; // 

GpioCtrlRegs.GPBQSEL2.bit.GPIO58= 3; // 

GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // 
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; //
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // 

GpioCtrlRegs.GPBGMUX2.bit.GPIO58=3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO59=3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO60=3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO61=3;

GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; //
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // 
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; //
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // 

EDIS;

// Initialize SPI FIFO registers

SpiaRegs.SPIFFTX.all = 0xE041;
SpiaRegs.SPIFFRX.all = 0x2061;

SpiaRegs.SPIFFCT.all = 0x0;

// —————————————————————————————
// Initialize SPI-A

SpiaRegs.***.bit.SPISWRESET = 0;
SpiaRegs.***.bit.CLKPOLARITY = 0;
SpiaRegs.***.bit.HS_MODE=1;

SpiaRegs.***.bit.*** = 7; // 1 byte

SpiaRegs.***.bit.SPILBK = 0; // 2
SpiaRegs.***.bit.MASTER_SLAVE = 1;// 主模式 SpiaRegs.***.bit.TALK = 1; // 发送使能 SpiaRegs.***.bit.CLK_PHASE = 0; // 上升 SpiaRegs.***.bit.SPIINTENA = 0;

// Set the baud rate
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;

// Set FREE bit
// Halting on a breakpoint will not halt the SPI
SpiaRegs.SPIPRI.bit.FREE = 1;

// Release the SPI from reset
SpiaRegs.***.bit.SPISWRESET = 1;

// ————–以下是发送 ———————————–

uint16 SPI_Send_byte(unsigned char byte_s)

{

uint16 uiData;
volatile uint32 k=0;
while((SpiaRegs.SPISTS.bit.BUFFULL_FLAG)&&(k<SPI_WTIME)) //Wait for room to write data

{ k++;
if(k>=SPI_WTIME)
{
break;
}
}
if(k>=SPI_WTIME)
{
return(0x8000);

}

// ok ————————–
uiData=byte_s;

uiData=uiData &0x00ff;
SpiaRegs.SPITXBUF = uiData<<8;

return(0); /* Return received value */

}

//  以下为接收——————————

//———————————————————————————

/*******************************************************************************
* Function Name : SPI_Read_byte
* Description : Send one byte then recv one byte of response
* Input : – byte_s: byte_s
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
uint16 SPI_Read_byte(void)
{
unsigned char byte_r;
uint16 uiData;
volatile uint32 k=0;

while((SpiaRegs.SPISTS.bit.BUFFULL_FLAG)&&(k<SPI_WTIME)) //  发送前 先判断是否可以发送   

{

//  不可以发送时 ,超时计时处理  

k++;

if(k>=SPI_WTIME)
{
break;
}
}
if(k>=SPI_WTIME)
{ //  超时即退出 
  return(0x8000);

}

//  接收前清理一次接收标记 ————————–
uiData =SpiaRegs.SPIRXBUF;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=0;
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1;

SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

// —–发送读时钟—————————————-

SpiaRegs.SPITXBUF = 0xff00;

k=0;

// while( (SpiaRegs.SPISTS.bit.INT_FLAG!=1)&&(k<SPI_WTIME)) //  采用接收状态位判断  试过了 不行   
// while( (SpiaRegs.SPIFFRX.bit.RXFFINT!=1)&&(k<SPI_WTIME))//  采用接收中断位判断  试过了 不行   
while((SpiaRegs.SPIFFRX.bit.RXFFST<1)&&(k<SPI_WTIME)) //  采用FIFO数据判断,  试过了也 不行   
{
k++;
if(k>=SPI_WTIME)
{
break;
}

}

if(k>=SPI_WTIME)
{ uiData =SpiaRegs.SPIRXBUF;
return(0x8000);

}

uiData =SpiaRegs.SPIRXBUF;

byte_r = uiData &0xff;

return byte_r; /* Return received value */
}

赞(0)
未经允许不得转载:TI中文支持网 » 28075 SPI接收问题
分享到: 更多 (0)