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.

[参考译文] RM48L952:解释 Halcogen 04.05.02至04.06.00 SCI sciEnableNotification 差异

Guru**** 2321870 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/586061/rm48l952-explain-halcogen-04-05-02-to-04-06-00-sci-scienablenotification-difference

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

大家好、我们在 RM48x 上构建了一个利用 SCI 驱动程序集成了第三部分通信堆栈的构建。 此构建已证明能够成功地在 HALCogen 的04.05.02生成的 HAL 上集成第三方堆栈、但我们无法使其在04.06.00 HAL 生成上运行。 问题似乎是生成 TX 中断、并已跟踪到 sciEnableNotification 例程。 在 movign 中、sciEnableNotification 例程在加载(和清除) SETINT 寄存器的方式上似乎发生了变化:

04.06.00

 

void sciEnableNotification (sciBASE-t * sci、uint32标志)
{
uint32索引=(sci =sciREG)? 0U:1U;

/*用户代码开始(23)*/*
用户代码结束*/

G_sciTransfer_t[index].mode |=(flags &(UINT32) SCI_TX_INT);
SCI->SETINT =(flags &(UINT32)(~(UINT32)(SCI_TX_INT)));

//用户代码开始(24)*/
//*用户代码结束*/
} 

04.05.02

void sciEnableNotification (sciBASE-t * sci、uint32标志)
{
uint32索引=(sci =sciREG)? 0U:1U;

/*用户代码开始(23)*/*
用户代码结束*/

G_sciTransfer_t[index].mode |=(flags &(UINT32) SCI_TX_INT);
SCI->SETINT =(标志);

/*用户代码开始(24)*/
/*用户代码结束*/
} 

是否有人可以解释更改如何加载和清除 SETINT 的原因? 在04.05.02编译器中运行04.06.02行代码会复制我们无法生成 TX 中断的情况、因此我认为这是问题的根本原因。 如果我了解更改驱动程序的原因、我可以返回到我们调用它的方式、以确保传输适当的数据。


谢谢

Jamie

 

 

void sciEnableNotification (sciBASE-t * sci、uint32标志)

   uint32索引=(sci =sciREG)? 0U:1U;

/*用户代码开始(23)*/
/*用户代码结束*/

   G_sciTransfer_t[index].mode |=(flags &(UINT32) SCI_TX_INT);
   SCI->SETINT               =(标志);

/*用户代码开始(24)*/
/*用户代码结束*/

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

    这很可能是由于 halcogen 代码上报告的错误导致的、但我不知道为什么真正进行了更改。 我将您的问题转发给我们的 SW 主管、以便他可以回答更改的原因、如果是由于报告的错误、他可以详细说明错误的症状。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jamie、

    我在 sciEnableNotification()函数中没有看到4.05.02和4.06.00之间的任何差异。

    我们不希望在将数据写入 TX 寄存器之前在 SETINT 中启用 SCI_TX_INT 的原因。

    用户无需担心,因为当为 TX 调用 sciSend()时,该函数启用 SCI_TX_INT。

    要使用 TX 中断,用户只需通过 HALCoGen GUI、SCI 选项卡启用 TX_INT,或将 SCI_TX_INT 作为参数传递给 sciEnableNotification()。 其余的一切由  sciSend()处理。

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

    您好、Prathap、


    我不确定为什么你说没有区别? 显然、SETINT 寄存器的设置是不同的。

    04.05.02: sci->SETINT                = (flags);

    06.04.00:  sci->SETINT                = (flags & (uint32)(~(uint32)(SCI_TX_INT)));

    如果我们在最新的 HALcogen 编译中将 SCI_TX_INT 传递给 enableNotification、我将不会生成中断、如果我了解代码的更改、则会使~SCI_TX_INT 反转该位?
    我们正在集成的第三方堆栈管理 TX 和 RX 中断以传输数据字节、在接收到适当的中断时调用 sciSendByte 和 sciReceiveByte。 在我的04.05.02版本上、这运行良好、但在04.06.00版本中、如上所示的行会丢失中断。
    我在 HALcogen 中启用 TX、RX 和故障中断、但我们的协议也通过 sciEnable/DisableNotifications 控制中断的状态。 这适用于04.05.02、但由于您在06.04.00中更改了上述代码行、因此不起作用。
    我们的集成可能还有其他问题、我还没有找到、但我仍然不明白为什么上述代码行在04.05.04和06.04.00之间发生了变化