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:SPIA CAN't 在 CLA 任务中传输数据

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1307863/tms320f28377s-spia-can-t-transmit-data-in-cla-task

器件型号:TMS320F28377S

你好。 我将在 Launchpad XL TMS320F28377S 平台上进行 SPIA 测试。

测试计划为,SPIA 在从 模式下运行 , 在 CPU 端进行初始化。

此外、CLA 在 CPU 端初始化、并具有一个触发源  CLA_TRIGGER_SPIRXAINT 、如下所示

cla_mapTaskVector (cla1_base、cla_MVECT_2、(uint16_t)&Cla1Task2);
CLA_setTriggerSource (CLA_task_2、CLA_TRIGGER_SPIRXAINT);

在应用程序运行期间、CLA_task_2可以由 SPIA_SIMO 线路的数据触发。

在 CLA_task_2中、我从接收到的 FIFO 中读出数据并将其复位。 然后我将数据写入发送 FIFO 并执行发送操作。

但我发现发送操作失败,因为发送 FIFO 上的写入操作 无效。

 SPICTL 寄存器的 TALK 位也无法写入。 CLA 上的代码如下所示,

中断失效 Cla1Task2 (void)
{
__ meallow();

/*复位 SPIA 接收 FIFO*/
CLA_HWREG (SPIA_BASE + SPI_O_FFRX)&=~SPI_FFRX_RXFIFORESET;
CLA_HWREG (SPIA_BASE + SPI_O_FFRX)|= SPI_FFRX_RXFIFORESET;

/*重置 SPIA 发送 FIFO */

CLA_HWREG (SPIA_BASE + SPI_O_FFTX)&=~SPI_FFTX_TXFIFO;
CLA_HWREG (SPIA_BASE + SPI_O_FFTX)|= SPI_FFTX_TXFIFO;

//将数据写入发送 FIFO */

CLA_HWREG (SPIA_BASE + SPI_O_TXBUF)=0x1234;
CLA_HWREG (SPIA_BASE + SPI_O_TXBUF)=0x5678;

/*启用 TALK 位*/
CLA_HWREG (SPIA_BASE + SPI_O_CTL)|=(0x1<<1);
___ medis ();
_mdebugstop();

没有任何数据从 SPA_SOMI 线路发出,我用示波器检查它。

 在 CPU 端、SPIA 初始化代码如下、

void SPIA_init (void)

{
GPIO_setMasterCore (60、GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig (GPIO_60_SPICLKA);
//GPIO_setQualificationMode (65、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (60、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (60、GPIO_PIN_TYPE_PULLUP);


GPIO_setMasterCore (58、GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig (GPIO_58_SPISIMOA);
//GPIO_setQualificationMode (63、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (58、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (58、GPIO_PIN_TYPE_PULLUP);


GPIO_setMasterCore (61、GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig (GPIO_61_SPISTEA);
//GPIO_setQualificationMode (66、GPIO_QUAL_ASYNC);
GPIO_setDirectionMode (61、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (61、GPIO_PIN_TYPE_STD);


GPIO_setMasterCore (59、GPIO_CORE_CPU1_CLA1);
GPIO_setPinConfig (GPIO_59_SPISOMIA);

//
//在配置 SPI 之前必须将其复位
//
SPI_disableModule (SPIA_BASE);

//
// SPI 配置。
//

SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、
SPI_MODE_SLAVE、SPIA_CLK_SPEED、16);

SPI_disableTalk (SPIA_BASE);

SPI_disableLoopback (SPIA_BASE);
SPI_setEmulationMode (SPIA_BASE、SPI_emulation_free_run);

//
// FIFO 和中断配置
//
SPI_enableFIFO (SPIA_BASE);
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_RXFF);

// SPI_setcharLength (SPIA_BASE、16);
HWREGH (SPIA_BASE + SPI_O_CCR)=(HWREGH (SPIA_BASE + SPI_O_CCR)&~SPI_CCR_SPICHAR_M)|(16-1U);
SPI_setFIFOInterruptLevel (SPIA_BASE、SPI_FIFO_TX2、SPI_FIFO_RX2);

//
// FIFO 和中断配置

SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_RXFF);
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_TXFF);
SPI_enableInterrupt (SPIA_BASE、SPI_INT_RXFF);
SPI_disableInterrupt (SPIA_BASE、SPI_INT_TXFF);

//
//配置完成。 启用模块。
//
SPI_enableModule (SPIA_BASE);

—我的

为什么发送操作失败?

感谢任何建议。谢谢

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

    您好!

    对延迟回复深表歉意。

    您能否共享 CLA_HWREG 的定义?

    此致、

    维纳