This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377S:SPI 从器件接收问题

Guru**** 2471680 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1064825/tms320f28377s-spi-slave-receive-problem

器件型号:TMS320F28377S

您好!

我正在尝试 通过 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jagadeesh、

    由于假期休息,主题专家将在年底前不在办公室。 因此、请预计在1月的第一周结束前收到回复。 很抱歉给您带来不便。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jagadeesh、

    您是否有任何沟通范围截图? 您是否已确认主器件确实在发送0x1010?

    此致、

    Marlyn