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.

[参考译文] TMS570LC4357:HALCoGen MibSPI 传输组1不会结束 SPI 事务并无限期地发送数据(零)。

Guru**** 2479015 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1024623/tms570lc4357-halcogen-mibspi-transfergroup1-does-not-end-spi-transaction-and-keeps-sending-data-zeroes-indefinitely

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

我们希望将多个传输组用于 Hercules MCU、但我们遇到了第二个 TG 的问题。

当前测试的方法是使用两个具有相同配置128字的 TG (TG0和 TG1)。

如果使用 TG0、则在传输128个字后传输会正确终止。

如果使用 TG1传输相同的数据、则发送的数据与预期的数据不相同(开头大部分为零)、并且作为从 MOSI 发送的零的无限循环继续、则代码保持循环检查传输是否完成。  

while(!(mibspiIsTransferComplete(mibspiREG2, 1)));

在调试会话中、我注意到 了从 HalCoGen 生成的 mibspiSetData 函数中出现了意外行为。

void mibspiSetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data)
{
/* USER CODE BEGIN (12) */
/* USER CODE END */

    mibspiRAM_t *ram    = mibspi == mibspiREG1 ? mibspiRAM1 : 
	                     (mibspi == mibspiREG2 ? mibspiRAM2 : 
						 (mibspi == mibspiREG3 ? mibspiRAM3 : 
						 (mibspi == mibspiREG4 ? mibspiRAM4 : mibspiRAM5)));
    uint32 start  = (mibspi->TGCTRL[group] >> 8U) & 0xFFU;
    uint32 end    = (group == 7U) ? (((mibspi->LTGPEND & 0x00007F00U) >> 8U) + 1U) : ((mibspi->TGCTRL[group+1U] >> 8U) & 0xFFU);

    if (end == 0U) {end = 128U;}

    while (start < end)
    {
    /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are only allowed in this driver" */
        ram->tx[start].data = *data;
        data++;
        start++;
    }
/* USER CODE BEGIN (13) */
/* USER CODE END */
}

TG1的"start"和"end"变量等于128和254、这意味着在本部分中"ram->TX[start].data =*数据; "它将数据写入一些未分配的空间。

TG0的"开始"和"结束"等于0和128。 它是  "ram->TX[start].data =*数据;"的预期范围

 是否可能是 HalCoGen 发生器的一些错误、一些配置错误或解释错误?

谢谢你

Jiri Petrovsky