From 48f3740bd53926392c55fb72010932f283b5eacf Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 5 Oct 2019 08:03:56 +0000 Subject: [PATCH] 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 --- os/hal/include/hal_can.h | 2 ++ os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c | 14 ++++++++++++++ os/hal/ports/STM32/LLD/CANv1/hal_can_lld.h | 2 ++ os/hal/src/hal_can.c | 18 ++++++++++++++++++ os/hal/templates/hal_can_lld.c | 15 +++++++++++++++ os/hal/templates/hal_can_lld.h | 2 ++ readme.txt | 2 ++ 7 files changed, 55 insertions(+) diff --git a/os/hal/include/hal_can.h b/os/hal/include/hal_can.h index 6b41d8065..0ff028468 100644 --- a/os/hal/include/hal_can.h +++ b/os/hal/include/hal_can.h @@ -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, diff --git a/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c b/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c index 879836ad0..f56f7f137 100644 --- a/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c +++ b/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.c @@ -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. diff --git a/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.h b/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.h index 1a7a924c8..e4eb6f6d2 100644 --- a/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.h +++ b/os/hal/ports/STM32/LLD/CANv1/hal_can_lld.h @@ -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); diff --git a/os/hal/src/hal_can.c b/os/hal/src/hal_can.c index 031e5dee2..4b63d8217 100644 --- a/os/hal/src/hal_can.c +++ b/os/hal/src/hal_can.c @@ -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 diff --git a/os/hal/templates/hal_can_lld.c b/os/hal/templates/hal_can_lld.c index 30223a085..57d62bb98 100644 --- a/os/hal/templates/hal_can_lld.c +++ b/os/hal/templates/hal_can_lld.c @@ -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. diff --git a/os/hal/templates/hal_can_lld.h b/os/hal/templates/hal_can_lld.h index ae468e979..6128f25ba 100644 --- a/os/hal/templates/hal_can_lld.h +++ b/os/hal/templates/hal_can_lld.h @@ -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); diff --git a/readme.txt b/readme.txt index 36a62777c..c2df70712 100644 --- a/readme.txt +++ b/readme.txt @@ -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.