Removed flags handling in CAN driver, now it is done using the new event flags.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4672 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
f90a0f3790
commit
c145c837da
|
@ -137,7 +137,6 @@ extern "C" {
|
||||||
void canStop(CANDriver *canp);
|
void canStop(CANDriver *canp);
|
||||||
msg_t canTransmit(CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout);
|
msg_t canTransmit(CANDriver *canp, const CANTxFrame *ctfp, systime_t timeout);
|
||||||
msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout);
|
msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout);
|
||||||
canstatus_t canGetAndClearFlags(CANDriver *canp);
|
|
||||||
#if CAN_USE_SLEEP_MODE
|
#if CAN_USE_SLEEP_MODE
|
||||||
void canSleep(CANDriver *canp);
|
void canSleep(CANDriver *canp);
|
||||||
void canWakeup(CANDriver *canp);
|
void canWakeup(CANDriver *canp);
|
||||||
|
|
|
@ -95,9 +95,8 @@ CH_IRQ_HANDLER(STM32_CAN1_RX0_HANDLER) {
|
||||||
if ((rf0r & CAN_RF0R_FOVR0) > 0) {
|
if ((rf0r & CAN_RF0R_FOVR0) > 0) {
|
||||||
/* Overflow events handling.*/
|
/* Overflow events handling.*/
|
||||||
CAN1->RF0R = CAN_RF0R_FOVR0;
|
CAN1->RF0R = CAN_RF0R_FOVR0;
|
||||||
canAddFlagsI(&CAND1, CAN_OVERFLOW_ERROR);
|
|
||||||
chSysLockFromIsr();
|
chSysLockFromIsr();
|
||||||
chEvtBroadcastI(&CAND1.error_event);
|
chEvtBroadcastFlagsI(&CAND1.error_event, CAN_OVERFLOW_ERROR);
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromIsr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,16 +137,18 @@ CH_IRQ_HANDLER(STM32_CAN1_SCE_HANDLER) {
|
||||||
}
|
}
|
||||||
/* Error event.*/
|
/* Error event.*/
|
||||||
if (msr & CAN_MSR_ERRI) {
|
if (msr & CAN_MSR_ERRI) {
|
||||||
canstatus_t flags;
|
flagsmask_t flags;
|
||||||
uint32_t esr = CAN1->ESR;
|
uint32_t esr = CAN1->ESR;
|
||||||
|
|
||||||
CAN1->ESR &= ~CAN_ESR_LEC;
|
CAN1->ESR &= ~CAN_ESR_LEC;
|
||||||
flags = (canstatus_t)(esr & 7);
|
flags = (flagsmask_t)(esr & 7);
|
||||||
if ((esr & CAN_ESR_LEC) > 0)
|
if ((esr & CAN_ESR_LEC) > 0)
|
||||||
flags |= CAN_FRAMING_ERROR;
|
flags |= CAN_FRAMING_ERROR;
|
||||||
|
|
||||||
chSysLockFromIsr();
|
chSysLockFromIsr();
|
||||||
canAddFlagsI(&CAND1, flags | (canstatus_t)(flags < 16));
|
/* The content of the ESR register is copied unchanged in the upper
|
||||||
chEvtBroadcastI(&CAND1.error_event);
|
half word of the listener flags mask.*/
|
||||||
|
chEvtBroadcastFlagsI(&CAND1.error_event, flags | (flagsmask_t)(esr < 16));
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromIsr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,11 +111,6 @@
|
||||||
/* Driver data structures and types. */
|
/* Driver data structures and types. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief CAN status flags.
|
|
||||||
*/
|
|
||||||
typedef uint32_t canstatus_t;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CAN transmission frame.
|
* @brief CAN transmission frame.
|
||||||
* @note Accessing the frame data as word16 or word32 is not portable because
|
* @note Accessing the frame data as word16 or word32 is not portable because
|
||||||
|
@ -273,10 +268,6 @@ typedef struct {
|
||||||
* @brief A CAN bus error happened.
|
* @brief A CAN bus error happened.
|
||||||
*/
|
*/
|
||||||
EventSource error_event;
|
EventSource error_event;
|
||||||
/**
|
|
||||||
* @brief Error flags set when an error event is broadcasted.
|
|
||||||
*/
|
|
||||||
canstatus_t status;
|
|
||||||
#if CAN_USE_SLEEP_MODE || defined (__DOXYGEN__)
|
#if CAN_USE_SLEEP_MODE || defined (__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Entering sleep state event.
|
* @brief Entering sleep state event.
|
||||||
|
|
|
@ -79,7 +79,6 @@ void canObjectInit(CANDriver *canp) {
|
||||||
chEvtInit(&canp->rxfull_event);
|
chEvtInit(&canp->rxfull_event);
|
||||||
chEvtInit(&canp->txempty_event);
|
chEvtInit(&canp->txempty_event);
|
||||||
chEvtInit(&canp->error_event);
|
chEvtInit(&canp->error_event);
|
||||||
canp->status = 0;
|
|
||||||
#if CAN_USE_SLEEP_MODE
|
#if CAN_USE_SLEEP_MODE
|
||||||
chEvtInit(&canp->sleep_event);
|
chEvtInit(&canp->sleep_event);
|
||||||
chEvtInit(&canp->wakeup_event);
|
chEvtInit(&canp->wakeup_event);
|
||||||
|
@ -136,7 +135,6 @@ void canStop(CANDriver *canp) {
|
||||||
chSemResetI(&canp->txsem, 0);
|
chSemResetI(&canp->txsem, 0);
|
||||||
chSchRescheduleS();
|
chSchRescheduleS();
|
||||||
canp->state = CAN_STOP;
|
canp->state = CAN_STOP;
|
||||||
canp->status = 0;
|
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,24 +217,6 @@ msg_t canReceive(CANDriver *canp, CANRxFrame *crfp, systime_t timeout) {
|
||||||
return RDY_OK;
|
return RDY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Returns the current status mask and clears it.
|
|
||||||
*
|
|
||||||
* @param[in] canp pointer to the @p CANDriver object
|
|
||||||
* @return The status flags mask.
|
|
||||||
*
|
|
||||||
* @api
|
|
||||||
*/
|
|
||||||
canstatus_t canGetAndClearFlags(CANDriver *canp) {
|
|
||||||
canstatus_t status;
|
|
||||||
|
|
||||||
chSysLock();
|
|
||||||
status = canp->status;
|
|
||||||
canp->status = 0;
|
|
||||||
chSysUnlock();
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__)
|
#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Enters the sleep mode.
|
* @brief Enters the sleep mode.
|
||||||
|
|
|
@ -85,6 +85,8 @@
|
||||||
*** 2.5.1 ***
|
*** 2.5.1 ***
|
||||||
- FIX: Fixed Data available event not generated in serial_usb driver (bug
|
- FIX: Fixed Data available event not generated in serial_usb driver (bug
|
||||||
3567992).
|
3567992).
|
||||||
|
- NEW: Modified the CAN drivers to use the new event flags mechanism, the
|
||||||
|
previous flags handling has been removed.
|
||||||
- NEW: Modified serial and serial_usb drivers to use the new event flags
|
- NEW: Modified serial and serial_usb drivers to use the new event flags
|
||||||
mechanism, the previous flags handling in BaseAsynchronousChannel has
|
mechanism, the previous flags handling in BaseAsynchronousChannel has
|
||||||
been removed.
|
been removed.
|
||||||
|
|
Loading…
Reference in New Issue