Index: firmware/source/can.c =================================================================== diff -u -r31f710004436c030e787c895980457e08577702d -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/source/can.c (.../can.c) (revision 31f710004436c030e787c895980457e08577702d) +++ firmware/source/can.c (.../can.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -114,6 +114,20 @@ /** - Assign interrupt level for messages */ canREG1->INTMUXx[0U] = (uint32)0x00000000U + | (uint32)0x00000002U + | (uint32)0x00000004U + | (uint32)0x00000008U + | (uint32)0x00000010U + | (uint32)0x00000020U + | (uint32)0x00000040U + | (uint32)0x00000080U + | (uint32)0x00000100U + | (uint32)0x00000200U + | (uint32)0x00000400U + | (uint32)0x00000800U + | (uint32)0x00001000U + | (uint32)0x00002000U + | (uint32)0x00004000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U @@ -130,20 +144,6 @@ | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U - | (uint32)0x00000000U | (uint32)0x00000000U; canREG1->INTMUXx[1U] = (uint32)0x00000000U @@ -517,6 +517,8 @@ */ /* USER CODE BEGIN (5) */ + // Enable EIE (error interrupts) + canREG1->CTL |= (uint32)0x00000008U; /* USER CODE END */ } @@ -1639,8 +1641,49 @@ } +/* USER CODE BEGIN (43) */ +/* USER CODE END */ +/** @fn void can1LowLevelInterrupt(void) +* @brief CAN1 Level 1 Interrupt Handler +*/ +#pragma CODE_STATE(can1LowLevelInterrupt, 32) +#pragma INTERRUPT(can1LowLevelInterrupt, FIQ) +/* SourceId : CAN_SourceId_021 */ +/* DesignId : CAN_DesignId_019 */ +/* Requirements : HL_SR221, HL_SR223 */ +void can1LowLevelInterrupt(void) +{ + uint32 messageBox = canREG1->INT >> 16U; +/* USER CODE BEGIN (44) */ +/* USER CODE END */ + /** - Setup IF1 for clear pending interrupt flag */ + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x08U; + /*SAFETYMCUSW 93 S MR: 6.1,6.2,10.1,10.2,10.3,10.4 "LDRA Tool issue" */ + canREG1->IF1NO = (uint8) messageBox; + + /*SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - Hardware Status check for execution sequence" */ + while ((canREG1->IF1STAT & 0x80U) ==0x80U) + { + } /* Wait */ + canREG1->IF1CMD = 0x87U; + + canMessageNotification(canREG1, messageBox); + +/* USER CODE BEGIN (45) */ +/* USER CODE END */ + +} + + + + +