Other Parts Discussed in Thread: C2000WARE
为啥我这Rxbuf的数据始终比上一个数据大255?理论上Tx的数据应该跟Rx是一样的。
#########主函数
void main()
{
int i=0;
// Uint16 senddata=0;
// Uint16 recdata=0;
char str[40];
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// LED_Init();
// TIM0_Init(150,200000);//200ms
UARTa_Init(4800);
SPIA_Init();
while(1)
{
i++;
if(i%500==0) //500次后,进入下面发送,该句作用就是延时。避免SPI数据发送太快,串口崩溃
{
recdata=SPIA_SendReciveData(senddata++);
sprintf(str,"senddata=%d recdata=%d\r\n",senddata,recdata);
UARTa_SendString(str);
}
DELAY_US(1000);
}
}
#############SPI配置
void SPIA_Init(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A
EDIS;
InitSpiaGpio();
SpiaRegs.SPICCR.bit.SPISWRESET = 0; //复位SPI
SpiaRegs.SPICCR.all = 0x0047; //SPI软件将极性位重置为1(沿下降沿发送数据),每次移动8位字长,并禁止SPI内部环回(LOOKBACK)功能;
SpiaRegs.SPICTL.all = 0x0006; // 启用主模式,正常相位, // 开启通话,关闭SPI接口。
SpiaRegs.SPISTS.all = 0x0000; //溢出中断,禁止SPI中断;
SpiaRegs.SPIBRR = 0x001F; //SPI波特率=37.5M/24=1.5MHZ;
SpiaRegs.SPIPRI.bit.FREE = 1; //设置断点以免干扰执行
SpiaRegs.SPICCR.bit.SPISWRESET = 1; //使能SPI
}
Uint16 SPIA_SendReciveData(Uint16 dat) //16位数据收发函数
{
SpiaRegs.SPITXBUF=dat; //SpiaRegs.SPITXBUF=(dat<<8);
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);{} //Wait until data is received
return SpiaRegs.SPIRXBUF;
}