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:TMS570LC4357:Hercules™︎ 安全微控制器论坛-启用 MIBSPI1的256个缓冲器

Guru**** 2455560 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/1009375/tms570lc4357-tms570lc4357-hercules-safety-microcontrollers-forum---enabling-256-buffers-of-mibspi1

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

您好!

我已经检查了 mibspiREG1->LTGPEND 寄存器,它是4+222+30-1。 我没有做任何更改、因为 当我将 MIBSPI TG1从94更改为222时、Halcogen 会自动将该寄存器从"4+94+30-1 "更改为"4+222+30-1"。 Halcogen 自动更新"HL_mibspi.c"文件。 简而言之、是 的 mibspiREG1->LTGPEND 寄存器如下所示:

问题仍然存在,我是否需要进行其他调整?

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

    原始问题: https://e2e.ti.com/support/microcontrollers/hercules-safety-microcontrollers-group/hercules/f/hercules-safety-microcontrollers-forum/999424/tms570lc4357-tms570lc4357-hercules-safety-microcontrollers-forum---enabling-256-buffers-of-mibspi1/3692528#3692528 

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

    修改 HALCoGen 生成的代码时、请将新代码插入  用户代码部分(在'user code begin"和'user code end'之间)。 否则、当 HALCOGen 为您生成新代码时、插入的代码将被删除。

    默认情况下、MibSPI 支持 TX 和 RX 多达128个缓冲器。 要启用对256个缓冲区的支持,请将0xA 写入  main()中 MIBSPIE 寄存器的 extended BUF_ENA 字段或 mibspiInit()中的用户代码段3。

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

    尊敬的王先生:

    非常感谢您的快速响应。  每次尝试时、我都会感到兴奋、但仍然无法获得结果。 最后一种情况是:

    我在 Halcogen 的 MibSPI1部分中设置了 TG0长度->4、TG1长度->220、TG2长度->15。 然后、我生成了代码并返回到 CCS 窗口。 在"hl_mibspi.c"文件中、我进行了如下更改:

    要将0xA 写入  extended BUF_ENA 寄存器、我写了:

    要选中"mibspiREG1->LTGPEND = 4 + 222 + 30 - 1"、对吗?  

     

    是的、这也是正确的。

    当我编译程序并将其加载到 MCU 时、我  while(mibspiIsTransferComplete(mibspiREG1,1)==0); 再次卡在""。

    我是否需要进行任何其他配置?  

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

    注意:我意外按下了"这解决了我的问题"、抱歉。 无法将其恢复。

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

    "mibspiREG1->LTGPEND = 4 + 222 + 30 - 1不正确。 LTGPEND 的正确值为:

    mibspiREG1->LTGPEND =(mibspiREG1->LTGPEND & 0xFFFF00FFU)|(uint32)((u4U+222U+15U+0U+0U+0U+0U+0U+0U+0U+1U)-1U)<<8U);

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

    我将在明天测试256个缓冲器。

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

    很抱歉、我发送了错误的图像。 LGTPEND 图像如下所示:

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

    谢谢、 我将不胜感激

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

    我今天早上进行了一次测试。 在 初始化缓冲区之前、应启用扩展缓冲区模式。 如果在 mibspiInit()函数的末尾启用了缓冲区[255:128]的控制字段,则不会传输这些缓冲区中的数据。

    HAL 生成的 mibspiInit()的变通办法是:

    如果您使用全部8个传输组、则 LPEND 为255。 您需要修改 mibspiSetData()和 mibspiGetData()的代码,以设置扩展缓冲区的数据并从扩展缓冲区获取数据。 请在以下两个函数中将7F 更改为 FF:

    void mibspiSetData (mibspi_t * mibspi、uint32组、uint16 *数据)

       (笑声)

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

    uint32 mibspiGetData (mibspiBASE-t * mibspi、uint32组、uint16 *数据)

      (笑声)

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

    此更改仅适用于 MibSPI1。  MibSPI1支持256个缓冲器(0-FFh 中的值)、LTGPEND 使用位15。 对于支持128个缓冲器(0-7Fh 的值)的 MibSPI2-5、位15被保留。

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

    尊敬的王先生:

    非常感谢您的支持。 现在, 当我通过 mibSPI1发送220字节时,我的代码不会停留在 while(mibspiIsTransferComplete(mibspiREG1,1)==0);”。 但我面临的是新问题、无法通过 SPI 接收数据。

    正如您描述的那样、我已经将0xA00写入 MIBSPIE 寄存 器、并且我已经将7F 更改为 FF。  代码被编译并加载到 MCU 中、我意识到我无法通过 MıbSPI1从"Read_Register"函数中获取任何数据。 在启用 MıbSPI1 256字节缓冲区之前、我能够获得0xAA55 (返回 var2)数据。 但在我们进行更改后、var2返回为0。 我没有更改 TG0和"READ_REGISTER"函数中的任何内容。 TransferGroup 的配置和"READ_REGISTER"函数如下所示:

    TG0长度--> 4; TG0长度--> 220; TG0长度--> 15;.... 其他为0。

    注意:"send"和"receive"数组索引被声明为 uint16、因为"mibspiSetData"函数将其指针作为 uint16。  

    我不知道为什么我在激活256字节缓冲区之前、但在激活后、不知道为什么能够获得变量2为0xAA55。

    当我撤消创建256字节缓冲区所做的更改时、var2变量可返回为0xAA55。

    我很晚才回复、因为我正在寻找问题的解决方案、但我找不到它、我想再次获得您的支持、非常感谢您的支持。

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

    从代码快照中、数组发送[]中的数据被复制到 MibSPI RAM 并被传输。 在哪里发送0xAA55或0xDA00? 是否使用环回模式?

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

    我正在使用"PLC 小型2戳"模块(https://in-tech-smartcharging.com/assets/Downloads/an4_rev5.pdf )通过 SPI 与 TMS570LS43XX 通信。 我不使用环回模式。 在主机控制器代码的第一阶段、TMS570LS43x 以这种格式发送签名查询;

    模块返回为:  

    我正在使用模块的内部寄存器读取签名(0xAA55)。  在将0xAh 写入 MIBSPIE extended BUF_ENA 寄存器之前、我能够在"READ_REGISTER"函数中返回这个0xAA55值。 我不知道我们所做的改变会如何影响这一点。

    作为进一步的信息、当我想让模块发送数据时、以太网帧需要发送的字节数至少为150字节。

    这是模块数据表中关于外部写入(将数据发送到输出)的屏幕截图:  

    芯片选择引脚被拉至低电平、模块要发送的长数据开始从 TMS570从 MOSI 引脚发送到模块。 使用此技术、我需要发送的数据长度约为150字节。 这就是我尝试激活256字节缓冲器的原因。

    在这里解释这个主题有点困难、我希望我能够回答您的问题。 如果我需要提供任何其他信息、我将立即写信。

    此致。

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

    您好!

    您是否解决了扩展缓冲区问题?