Other Parts Discussed in Thread: HALCOGEN
Tool/software: Code Composer Studio
Hi guys,
I need your help regarding a SCI interruptions when some data is received (RX).
I have set up all the check boxes in Halcogen and generated a code. Actually it works, except that my sciNotification is not called at all.
sciHighLevelInterrupt function is called, but sciNotification is not because g_sciTransfer_t[0U].rx_length is zero all the time:
void sciHighLevelInterrupt(void)
{
uint32 vec = sciREG->INTVECT0;
uint8 byte;
switch (vec)
{
...
case 11U:
/* receive */
byte = (uint8)(sciREG->RD & 0x000000FFU); // <<<<<< this value is correct
if (g_sciTransfer_t[0U].rx_length > 0U) // <<<<<<< false all the time for some reason, that is why sciNotification is not called.
{
*g_sciTransfer_t[0U].rx_data = byte;
/*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
g_sciTransfer_t[0U].rx_data++;
g_sciTransfer_t[0U].rx_length--;
if (g_sciTransfer_t[0U].rx_length == 0U)
{
sciNotification(sciREG, (uint32)SCI_RX_INT);
}
}
break;
}
What I want to achive: I need to read the incoming data in the "interrupt" function. I am using FreeRTOS with a lot of tasks and not all data are read from the SCI when I read it in separate task. That is why I need to use interruption for this case and do not miss anything.
Could you please advice what can be wrong? Do I need to implement another strategy to get all the data from the RX?
My test code (without FreeRTOS and other not important stuff) is the next:
int main(void)
{
/* USER CODE BEGIN (3) */
sciInit();
sciEnableNotification(sciREG, SCI_RX_INT);
_enable_IRQ();
while (1)
{
};
/* USER CODE END */
return 0;
}
My setting in halcogen:



