Added canTryAbortX() function to CAN driver, implemented for STM32 CANv1.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13074 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2019-10-05 08:03:56 +00:00
parent 998d8cee1b
commit 48f3740bd5
7 changed files with 55 additions and 0 deletions

View File

@ -231,6 +231,8 @@ extern "C" {
bool canTryReceiveI(CANDriver *canp,
canmbx_t mailbox,
CANRxFrame *crfp);
void canTryAbortX(CANDriver *canp,
canmbx_t mailbox);
msg_t canTransmitTimeout(CANDriver *canp,
canmbx_t mailbox,
const CANTxFrame *ctfp,

View File

@ -942,6 +942,20 @@ void can_lld_receive(CANDriver *canp,
crfp->TIME = (uint16_t)(rdtr >> 16);
}
/**
* @brief Tries to abort an ongoing transmission.
*
* @param[in] canp pointer to the @p CANDriver object
* @param[in] mailbox mailbox number
*
* @notapi
*/
void can_lld_abort(CANDriver *canp,
canmbx_t mailbox) {
canp->can->TSR = 128U << ((mailbox - 1U) * 8U);
}
#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__)
/**
* @brief Enters the sleep mode.

View File

@ -452,6 +452,8 @@ extern "C" {
void can_lld_receive(CANDriver *canp,
canmbx_t mailbox,
CANRxFrame *ctfp);
void can_lld_abort(CANDriver *canp,
canmbx_t mailbox);
#if CAN_USE_SLEEP_MODE
void can_lld_sleep(CANDriver *canp);
void can_lld_wakeup(CANDriver *canp);

View File

@ -218,6 +218,24 @@ bool canTryReceiveI(CANDriver *canp,
return false;
}
/**
* @brief Tries to abort an ongoing transmission.
*
* @param[in] canp pointer to the @p CANDriver object
* @param[in] mailbox mailbox number
*
* @xclass
*/
void canTryAbortX(CANDriver *canp,
canmbx_t mailbox) {
osalDbgCheck((canp != NULL) &&
(mailbox != CAN_ANY_MAILBOX) &&
(mailbox <= (canmbx_t)CAN_TX_MAILBOXES));
can_lld_abort(canp, mailbox);
}
/**
* @brief Can frame transmission.
* @details The specified frame is queued for transmission, if the hardware

View File

@ -209,6 +209,21 @@ void can_lld_receive(CANDriver *canp,
}
/**
* @brief Tries to abort an ongoing transmission.
*
* @param[in] canp pointer to the @p CANDriver object
* @param[in] mailbox mailbox number
*
* @notapi
*/
void can_lld_abort(CANDriver *canp,
canmbx_t mailbox) {
(void)canp;
(void)mailbox;
}
#if (CAN_USE_SLEEP_MODE == TRUE) || defined(__DOXYGEN__)
/**
* @brief Enters the sleep mode.

View File

@ -258,6 +258,8 @@ extern "C" {
void can_lld_receive(CANDriver *canp,
canmbx_t mailbox,
CANRxFrame *crfp);
void can_lld_abort(CANDriver *canp,
canmbx_t mailbox);
#if CAN_USE_SLEEP_MODE == TRUE
void can_lld_sleep(CANDriver *canp);
void can_lld_wakeup(CANDriver *canp);

View File

@ -74,6 +74,8 @@
*****************************************************************************
*** Next ***
- NEW: Added canTryAbortX() function to CAN driver, implemented
for STM32 CANv1.
- NEW: Added error handling to WSPI driver, now LLDs can report error
conditions to upper layers.
- NEW: Added mcuconf.h generator for STM32G4x4.