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:用于 TMS570器件的 MIBSPI 接口

Guru**** 2460850 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN, RM57L843

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1135944/tms570lc4357-mibspi-interface-for-tms570-devices

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

尊敬的 TI 团队:

我们一直在使用 TMS570LC4357器件进行 MIBSPI 接口开发。 尽管已经了解和开发了许多内容(使用 https://www.ti.com/tool/TMDX570LC43HDK)、但我们仍面临一些挑战。  

查询:

我们希望使用器件的 MIBSPI1传输256字节的数据。 我们还使用  MibSPIEN 寄存器启用了扩展缓冲模式。 在调试时、我们可以在  MibSPIEN 寄存器中看到00000A01值、这表示 MIBSPI1已启用扩展缓冲模式。 (否则、该值为 00000501。)  

我们还修改 了 mibspiSetData() mibspiGetData(),以设置扩展缓冲区的数据并从扩展缓冲区获取数据。 如下所示。

void mibspiSetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data)

{     ...

     uint32 end = (group == 7U) ? (((mibspi->LTGPEND & 0x00007F00U) >> 8U) + 1U) : ((mibspi->TGCTRL[group+1U] >> 8U) & 0xFFU);
     ...

}

uint32 mibspiGetData(mibspiBASE_t *mibspi, uint32 group, uint16 * data)
{    ...

    uint32 end = (group == 7U) ? (((mibspi->LTGPEND & 0x00007F00U) >> 8U) + 1U) : ((mibspi->TGCTRL[group+1U] >> 8U) & 0xFFU);
    ...

}

但是、我仍然无法在256字节模式下使用 MIBSPI1。  下面是 使用 MIBSPI1传输256字节数据的实现方案的总结。

在实施您建议的变通办法后、我的项目中的关键配置如下:

  1. MIBSPI1缓冲器:
    1. MIBSPI1 TG0缓冲器:256
    2. MIBSPI1 TG1缓冲器:0
    3. MIBSPI1 TG2缓冲器:0
    4. MIBSPI1 tg3缓冲器:0
    5. MIBSPI1 TG4缓冲器:0
    6. MIBSPI1 TG5缓冲器:0
    7. MIBSPI1 TG6缓冲器:0
    8. MIBSPI1 TG7缓冲器:0
  2. 将此行添加到 MIBSPIINIT()函数:mibspiREG1->MIBSPIE = 0xA00;
  3. 将 mibspiSetData()和 mibspiGetData()中的值更新为 FF 而不是7F。

您能否建议解决方法 以使该问题正常工作?

此致、

H C Trivedi

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

    您好、Trivedi、

    我正在处理您的问题、我很快会再与您联系。

    --

    谢谢、此致、

    Jagadish。

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

    好的。 同时、如果您需要我共享 CCS 项目或 HALCOGEN 文件、请告诉我!

    此致、

    特里维迪

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

    您好、Trivedi、

    要在 MibSPI1中使用扩展缓冲器、我们无法直接使用 HALCoGen 生成的代码、它还需要一些额外的手动修改才能使其正常工作

    您能否参阅以下主题、它 解释了所需的手动修改并包含一个示例  

    (+) RM57L843:启用256个缓冲器/ MIBSPI1的扩展 BUF_ENA 功能-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢、此致、

    Jagadish。

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

    Jagdish 您好、

    我认为这在很大程度上解决了我的问题。 但是、要实现我所需的目标。 我能够传输255个字节、而不是256个字节。  

    [引用 userid="524805" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1135944/tms570lc4357-mibspi-interface-for-tms570-devices/4217954 #4217954"](+) RM57L843:启用256个缓冲器/ MIBSPI1的 extended BUF_ENA 功能-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    我按照此页上的说明操作、发现 TX[256]和 RX[256]从我的末尾一直没有更新、因此我无法传输超过特定大小的数据。  

    在执行所有校正/更改后、我能够传输大小为0至254的数组(即总共255字节)。 当我尝试发送256个字节时、它会提供数组的全0到128-255个元素。 随附 CCS 工程供您参考。 由于 TI E2E 论坛技术问题、无法上传 HALCoGen 项目。

    e2e.ti.com/.../TMS570_5F00_3_5F00_MIBSPI.zip

    此致、

    特里维迪

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

    您好、Trivedi、

    我找到了问题的根本原因

    对于256个扩展缓冲区、突出显示的结束值应为256而不是128。

    因此、请按如下所示更改上述行并进行测试、同时请告知我状态。

    --

    谢谢、此致、

    Jagadish。

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

    Jagdish、大家好、这种方法奏效了、现在我能够传输256字节的数据。

    我还想讨论一个问题。 在我上次答复中共享的项目文件中、包含 MIBSPI 回送代码。 我还介绍了 HALCoGen 工具提供的示例。 在该示例中、也提供了非常相似的方法。 我唯一能说明的区别是:

    • 在 mibspiSetData 中、一个代码使用了数组的地址、而我的代码 同时通过了整个数组。
    • 在我的示例中, mibspiGetData 被写入 main()函数,而在示例代码中, mibspiGetData 被写入 mibspiGroupNotification 回调。  

    我在这里的问题是、这两种方法有什么区别、这两种情况下代码的执行顺序是什么? 您能帮我解决这个问题吗?

    BR、

    特里维迪

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

    您好、Trivedi、

    [引用 userid="488031" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1135944/tms570lc4357-mibspi-interface-for-tms570-devices/4358348 #4358348"]在 mibspiSetData 中,一个代码使用了数组的地址,而我的代码 一次传递整个数组。

    实际上、您的代码也仅传递数组的地址。

    给出数组名称(TG0_TX_DATA)或给出数组中第一个元素的地址(&TG0_TX_DATA[0])都意味着相同。

     在这两种情况下、函数"mibspiSetData"的"data"指针将保存数组的起始地址(TG0_TX_DATA)。

    [引用 userid="488031" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1135944/tms570lc4357-mibspi-interface-for-tms570-devices/4358348 #4358348">在我的示例中, mibspiGetData 被写入 main()函数,而在示例代码中 ,mibspiGetData 被写入 mibGroupspiNotification 回调。  [/报价]

    我会说示例代码方法是一种好方法、因为在您的代码中、使用函数"mibspiTransfer"启动 Transfer Group 后、我们立即从 mibspiGetData 函数读取数据、而无需确保传输完成。

    上述方法可能可行、但这不是一个好的做法、因为我们不知道传输是否完成、而且我们不会等待整个传输完成。

    但是、如果我们验证示例代码

    这里、我们仅在接收到传输组中断后才读取数据、这意味着整个传输组数据传输和接收完成后、这是一种很好的方法。 这也是中断模式、因此处理器可以执行其他外设功能、而无需等待传输完成。

    --

    谢谢、此致、

    Jagadish。