主题中讨论的其他器件: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 寄存器如下所示:
问题仍然存在,我是否需要进行其他调整?
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.
您好!
我已经检查了 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 寄存器如下所示:
问题仍然存在,我是否需要进行其他调整?
修改 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); 再次卡在""。
我是否需要进行任何其他配置?
我今天早上进行了一次测试。 在 初始化缓冲区之前、应启用扩展缓冲区模式。 如果在 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。
我很晚才回复、因为我正在寻找问题的解决方案、但我找不到它、我想再次获得您的支持、非常感谢您的支持。
我正在使用"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字节缓冲器的原因。
在这里解释这个主题有点困难、我希望我能够回答您的问题。 如果我需要提供任何其他信息、我将立即写信。
此致。