你好。 我将在 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);
—我的
为什么发送操作失败?
感谢任何建议。谢谢