主题中讨论的其他器件: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)*/
/*用户代码结束*/
}