您好!
我正在尝试 通过 SPI 通信将1字节数据从主板发送到另一个从板。 例如、如果我发送0x1010、我将在从板接收缓冲区中获取0x0101。
从机配置:
void SPI_init (void)
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO58上的上拉电阻器(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO59上的上拉电阻器(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO60上拉(SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;//启用 GPIO61上的上拉电阻器(SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO58 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO59 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO60 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO61 (SPISTEA)
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;//将 GPIO58配置为 SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO59配置为 SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO60配置为 SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;//将 GPIO61配置为 SPISTEA
EDIS;
// SpiaRegs.SPIFFTX.ALL = 0xC022;//启用 FIFO,将 TX FIFO 级别设置为2
// SpiaRegs.SPIFFRX.ALL = 0x0022;//将 RX FIFO 电平设置为2
// SpiaRegs.SPIFFCT.all = 0x00;
SpiaRegs.SPIFFTX.ALL = 0xE040;
SpiaRegs.SPIFFRX.ALL = 0x2044;
SpiaRegs.SPIFFCT.all = 0x0;
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
//SpiaRegs.SPIFFRX.bit.RXFFST = 0x10;
SpiaRegs.SPIFFCT.all = 0x00;
SpiaRegs.SPICCR.bit.SPISWRESET = 0;//在配置更改之前将 RESET 设置为低电平
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性(0 =上升、1 =下降)
SpiaRegs.SPICCR.bit.SPICHAR =(16-1);// 16位字符
SpiaRegs.SPICCR.bit.SPILBK = 0;//禁用回路
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;//启用主设备(0 =从设备、1 =主设备)
SpiaRegs.SPICTL.bit.TALK = 1;//启用传输(TALK)
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//时钟相位(0 =正常、1 =延迟)
SpiaRegs.SPICTL.bit.SPIINTENA=1;// SPI 中断被禁用
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;//设置波特率
/******* 在断点上停止不会停止 SPI ******* /
SpiaRegs.SPIPRI.bit.FREE = 1;//设置空闲位
SpiaRegs.SPICCR.bit.SPISWRESET = 1;//从复位中释放 SPI
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
PieCtrlRegs.PIEIER6.bit.INTx1 = 1;//启用 PIE 组6、INT 1
IER = 0x20;//启用 CPU INT6
EINT;//启用全局中断
}
void vSPI_Receive (UINT16 Rxdata)
{
//SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;
while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1)
{}
Rxdata = SpiaRegs.SPIRXBUF;
Rxdata++;
}
请帮助我们解决该问题。
此致、
Jagadeesh