/** * @brief Clears the CANx reception buffer interrupt pending bit, * does nothing if transmission interrupt pending bit is specified. * @param CANx: Select the CAN peripheral. * This parameter can be one of the following values: * CAN1, CAN2. * @param BufferNumber: The number of the buffer * @param Status_Flag: specifies the interrupt pending bit to clear. * This parameter can be of the following values: CAN_STATUS_RX_READY: Flag indicating that there are messages received CAN_STATUS_TX_READY: Flag indicating that there are buffers for transmitting * @retval None. */ void CAN_ITClearRxTxPendingBit(MDR_CAN_TypeDef* CANx, uint32_t BufferNumber, uint32_t Status_Flag) { uint32_t tmpreg; /* Check the parameters */ assert_param(IS_CAN_ALL_PERIPH(CANx)); assert_param(IS_CAN_BUFFER(BufferNumber)); assert_param(IS_CAN_IT_RXTX_FLAG(Status_Flag)); tmpreg = CANx->BUF_CON[BufferNumber]; if (Status_Flag == CAN_STATUS_RX_READY) { tmpreg &= ~CAN_STATUS_RX_FULL; } /* FIXME: Setting of TX_REQ bit here, initiates a retransmission of a previous message. For this reason, the following branch has been commented out. The transmission interrupt pending bit will be automatically cleared when you start the next transmission. else if (Status_Flag == CAN_STATUS_TX_READY) { tmpreg |= CAN_STATUS_TX_REQ; } */ CANx->BUF_CON[BufferNumber] = tmpreg; }
/** * @brief Clears the CANx transmission or reception buffer interrupt * pending bits. * @param CANx: Select the CAN peripheral. * This parameter can be one of the following values: * CAN1, CAN2. * @param BufferNumber: The number of the buffer * @param Status_Flag: specifies the interrupt pending bit to clear. * This parameter can be of the following values: CAN_STATUS_RX_READY: Flag indicating that there are messages received CAN_STATUS_TX_READY: Flag indicating that there are buffers for transmitting * @retval None. */ void CAN_ITClearRxTxPendingBit(MDR_CAN_TypeDef* CANx, uint32_t BufferNumber, uint32_t Status_Flag) { uint32_t tmpreg; /* Check the parameters */ assert_param(IS_CAN_ALL_PERIPH(CANx)); assert_param(IS_CAN_BUFFER(BufferNumber)); assert_param(IS_CAN_IT_RXTX_FLAG(Status_Flag)); tmpreg = CANx->BUF_CON[BufferNumber]; if (Status_Flag == CAN_STATUS_RX_READY) { tmpreg &= ~CAN_STATUS_RX_FULL; } else if (Status_Flag == CAN_STATUS_TX_READY) { tmpreg |= CAN_STATUS_TX_REQ; } CANx->BUF_CON[BufferNumber] = tmpreg; }