Handles CAN interrupt request.
1697 uint32_t errorcode = HAL_CAN_ERROR_NONE;
1698 uint32_t interrupts = READ_REG(hcan->
Instance->IER);
1699 uint32_t msrflags = READ_REG(hcan->
Instance->MSR);
1700 uint32_t tsrflags = READ_REG(hcan->
Instance->TSR);
1701 uint32_t rf0rflags = READ_REG(hcan->
Instance->RF0R);
1702 uint32_t rf1rflags = READ_REG(hcan->
Instance->RF1R);
1703 uint32_t esrflags = READ_REG(hcan->
Instance->ESR);
1706 if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U)
1709 if ((tsrflags & CAN_TSR_RQCP0) != 0U)
1712 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0);
1714 if ((tsrflags & CAN_TSR_TXOK0) != 0U)
1717 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1727 if ((tsrflags & CAN_TSR_ALST0) != 0U)
1730 errorcode |= HAL_CAN_ERROR_TX_ALST0;
1732 else if ((tsrflags & CAN_TSR_TERR0) != 0U)
1735 errorcode |= HAL_CAN_ERROR_TX_TERR0;
1740 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1752 if ((tsrflags & CAN_TSR_RQCP1) != 0U)
1755 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1);
1757 if ((tsrflags & CAN_TSR_TXOK1) != 0U)
1760 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1770 if ((tsrflags & CAN_TSR_ALST1) != 0U)
1773 errorcode |= HAL_CAN_ERROR_TX_ALST1;
1775 else if ((tsrflags & CAN_TSR_TERR1) != 0U)
1778 errorcode |= HAL_CAN_ERROR_TX_TERR1;
1783 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1795 if ((tsrflags & CAN_TSR_RQCP2) != 0U)
1798 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2);
1800 if ((tsrflags & CAN_TSR_TXOK2) != 0U)
1803 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1813 if ((tsrflags & CAN_TSR_ALST2) != 0U)
1816 errorcode |= HAL_CAN_ERROR_TX_ALST2;
1818 else if ((tsrflags & CAN_TSR_TERR2) != 0U)
1821 errorcode |= HAL_CAN_ERROR_TX_TERR2;
1826 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1839 if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U)
1841 if ((rf0rflags & CAN_RF0R_FOVR0) != 0U)
1844 errorcode |= HAL_CAN_ERROR_RX_FOV0;
1847 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0);
1852 if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U)
1854 if ((rf0rflags & CAN_RF0R_FULL0) != 0U)
1857 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0);
1860 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1871 if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U)
1874 if ((hcan->
Instance->RF0R & CAN_RF0R_FMP0) != 0U)
1877 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1888 if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U)
1890 if ((rf1rflags & CAN_RF1R_FOVR1) != 0U)
1893 errorcode |= HAL_CAN_ERROR_RX_FOV1;
1896 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1);
1901 if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U)
1903 if ((rf1rflags & CAN_RF1R_FULL1) != 0U)
1906 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1);
1909 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1920 if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U)
1923 if ((hcan->
Instance->RF1R & CAN_RF1R_FMP1) != 0U)
1926 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1937 if ((interrupts & CAN_IT_SLEEP_ACK) != 0U)
1939 if ((msrflags & CAN_MSR_SLAKI) != 0U)
1942 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI);
1945 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1956 if ((interrupts & CAN_IT_WAKEUP) != 0U)
1958 if ((msrflags & CAN_MSR_WKUI) != 0U)
1961 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU);
1964 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 1975 if ((interrupts & CAN_IT_ERROR) != 0U)
1977 if ((msrflags & CAN_MSR_ERRI) != 0U)
1980 if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) &&
1981 ((esrflags & CAN_ESR_EWGF) != 0U))
1984 errorcode |= HAL_CAN_ERROR_EWG;
1990 if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) &&
1991 ((esrflags & CAN_ESR_EPVF) != 0U))
1994 errorcode |= HAL_CAN_ERROR_EPV;
2000 if (((interrupts & CAN_IT_BUSOFF) != 0U) &&
2001 ((esrflags & CAN_ESR_BOFF) != 0U))
2004 errorcode |= HAL_CAN_ERROR_BOF;
2010 if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) &&
2011 ((esrflags & CAN_ESR_LEC) != 0U))
2013 switch (esrflags & CAN_ESR_LEC)
2015 case (CAN_ESR_LEC_0):
2017 errorcode |= HAL_CAN_ERROR_STF;
2019 case (CAN_ESR_LEC_1):
2021 errorcode |= HAL_CAN_ERROR_FOR;
2023 case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0):
2025 errorcode |= HAL_CAN_ERROR_ACK;
2027 case (CAN_ESR_LEC_2):
2029 errorcode |= HAL_CAN_ERROR_BR;
2031 case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0):
2033 errorcode |= HAL_CAN_ERROR_BD;
2035 case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1):
2037 errorcode |= HAL_CAN_ERROR_CRC;
2049 __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI);
2053 if (errorcode != HAL_CAN_ERROR_NONE)
2059 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 void(* TxMailbox0CompleteCallback)(struct __CAN_HandleTypeDef *hcan)
void(* RxFifo0MsgPendingCallback)(struct __CAN_HandleTypeDef *hcan)
void(* SleepCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
Rx FIFO 0 message pending callback.
void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan)
Sleep callback.
void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 1 complete callback.
void(* RxFifo0FullCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 2 Cancellation callback.
void(* RxFifo1FullCallback)(struct __CAN_HandleTypeDef *hcan)
void(* ErrorCallback)(struct __CAN_HandleTypeDef *hcan)
void(* TxMailbox1CompleteCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan)
Rx FIFO 0 full callback.
void(* WakeUpFromRxMsgCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan)
Rx FIFO 1 full callback.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void(* TxMailbox0AbortCallback)(struct __CAN_HandleTypeDef *hcan)
void(* TxMailbox2CompleteCallback)(struct __CAN_HandleTypeDef *hcan)
void(* TxMailbox1AbortCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan)
Rx FIFO 1 message pending callback.
void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan)
WakeUp from Rx message callback.
void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 0 Cancellation callback.
void(* TxMailbox2AbortCallback)(struct __CAN_HandleTypeDef *hcan)
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
Error CAN callback.
void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 0 complete callback.
void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 2 complete callback.
void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan)
Transmission Mailbox 1 Cancellation callback.
void(* RxFifo1MsgPendingCallback)(struct __CAN_HandleTypeDef *hcan)