Other Parts Discussed in Thread: HALCOGEN
Hello, we have a build on the RM48x that integrates a third part communication stack utilizing the SCI driver. This build has been shown to successfully integrate the third party stack on a HAL generated from 04.05.02 of HALcogen, however we cannot get it to run on 04.06.00 HAL generation. The issues appears to be getting the TX interrupt generated and has been traced to the sciEnableNotification routine. It seems that in movign from 04.05.02 to 04.06.00 the sciEnableNotification routine has changed in how it loads (and clears) the SETINT register:
04.06.00
void sciEnableNotification(sciBASE_t *sci, uint32 flags)
{
uint32 index = (sci == sciREG) ? 0U : 1U;
/* USER CODE BEGIN (23) */
/* USER CODE END */
g_sciTransfer_t[index].mode |= (flags & (uint32)SCI_TX_INT);
sci->SETINT = (flags & (uint32)(~(uint32)(SCI_TX_INT)));
/* USER CODE BEGIN (24) */
/* USER CODE END */
}
04.05.02
void sciEnableNotification(sciBASE_t *sci, uint32 flags)
{
uint32 index = (sci == sciREG) ? 0U : 1U;
/* USER CODE BEGIN (23) */
/* USER CODE END */
g_sciTransfer_t[index].mode |= (flags & (uint32)SCI_TX_INT);
sci->SETINT = (flags);
/* USER CODE BEGIN (24) */
/* USER CODE END */
}
Can someone explain the reason for changing how SETINT is loaded and cleared? Running the 04.06.02 line of code in the 04.05.02 builds replicates our failure to generate TX interrupts so I think it is a root cause of our issues. If I understand why the driver has been changed I can work back to how we are calling it to ensure we transfer the appropriate data.
Thanks
Jamie
void sciEnableNotification(sciBASE_t *sci, uint32 flags)
{
uint32 index = (sci == sciREG) ? 0U : 1U;
/* USER CODE BEGIN (23) */
/* USER CODE END */
g_sciTransfer_t[index].mode |= (flags & (uint32)SCI_TX_INT);
sci->SETINT = (flags);
/* USER CODE BEGIN (24) */
/* USER CODE END */
}