From 8751b4194013f552baae0ea2769bc0cd1fec9e5e Mon Sep 17 00:00:00 2001 From: jcar Date: Fri, 20 Apr 2012 14:14:16 +0200 Subject: [PATCH] CAN bugs fixed after mcaltest 5567 --- arch/ppc/mpc55xx/drivers/Can.c | 16 ++++++------ communication/CanIf/CanIf.c | 45 +++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/arch/ppc/mpc55xx/drivers/Can.c b/arch/ppc/mpc55xx/drivers/Can.c index b049fb23..6ccba164 100644 --- a/arch/ppc/mpc55xx/drivers/Can.c +++ b/arch/ppc/mpc55xx/drivers/Can.c @@ -644,7 +644,7 @@ static void Can_Isr_Rx(Can_UnitType *uPtr) static void Can_Isr(int controller ) { - Can_UnitType *uPtr = &CanUnit[controller]; + Can_UnitType *uPtr = CTRL_TO_UNIT_PTR(controller); if(uPtr->cfgCtrlPtr->Can_Arc_Flags & CAN_CTRL_TX_PROCESSING_INTERRUPT ){ Can_Isr_Tx(uPtr); @@ -894,7 +894,6 @@ void Can_InitController(uint8 controller, uint8_t tq2; uint32_t clock; Can_UnitType *canUnit; - uint8 cId = controller; const Can_ControllerConfigType *cfgCtrlPtr; const Can_HardwareObjectType *hohPtr; uint8_t fifoNr; @@ -1044,10 +1043,10 @@ Can_ReturnType Can_SetControllerMode(uint8 controller, /** @req 3.1.5/CAN198 */ VALIDATE( (Can_Global.initRun == CAN_READY), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_UNINIT ); - Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller); - VALIDATE( (canUnit->state!=CANIF_CS_UNINIT), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_UNINIT ); /** @req 3.1.5/CAN199 */ VALIDATE( VALID_CONTROLLER(controller), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_PARAM_CONTROLLER ); + Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller); + VALIDATE( (canUnit->state!=CANIF_CS_UNINIT), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_UNINIT ); canHw = canUnit->hwPtr; @@ -1091,6 +1090,8 @@ void Can_DisableControllerInterrupts(uint8 controller) /** !req 3.1.5/CAN292 */ VALIDATE_NO_RV( (Can_Global.initRun == CAN_READY), CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT ); + /** @req 3.1.5/CAN206 */ + VALIDATE_NO_RV( VALID_CONTROLLER(controller) , CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_PARAM_CONTROLLER ); Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller); flexcan_t *canHw; imask_t state; @@ -1098,8 +1099,6 @@ void Can_DisableControllerInterrupts(uint8 controller) /** @req 3.1.5/CAN205 */ VALIDATE_NO_RV( (canUnit->state!=CANIF_CS_UNINIT), CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT ); - /** @req 3.1.5/CAN206 */ - VALIDATE_NO_RV( VALID_CONTROLLER(controller) , CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_PARAM_CONTROLLER ); Irq_Save(state); @@ -1140,11 +1139,10 @@ void Can_EnableControllerInterrupts(uint8 controller) /** @req 3.1.5/CAN209 */ VALIDATE_NO_RV( (Can_Global.initRun == CAN_READY), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT ); - canUnit = CTRL_TO_UNIT_PTR(controller); - VALIDATE_NO_RV( (canUnit->state!=CANIF_CS_UNINIT), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT ); - /** @req 3.1.5/CAN210 */ VALIDATE_NO_RV( VALID_CONTROLLER(controller), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_PARAM_CONTROLLER ); + canUnit = CTRL_TO_UNIT_PTR(controller); + VALIDATE_NO_RV( (canUnit->state!=CANIF_CS_UNINIT), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT ); Irq_Save(state); if (canUnit->lock_cnt > 1) { diff --git a/communication/CanIf/CanIf.c b/communication/CanIf/CanIf.c index e20a7ce8..6e9b4324 100644 --- a/communication/CanIf/CanIf.c +++ b/communication/CanIf/CanIf.c @@ -918,8 +918,15 @@ void CanIf_CancelTxConfirmation(const Can_PduType *PduInfoPtr) void CanIf_ControllerBusOff(uint8 Controller) { - // We call this a CanIf channel. Hopefully makes it easier to follow. - CanIf_Arc_ChannelIdType channel = (CanIf_Arc_ChannelIdType) Controller; + CanIf_Arc_ChannelIdType channel = 0xff; + + for(int i = 0; i < CANIF_CHANNEL_CNT; i++) + { + if(CanIf_ConfigPtr->Arc_ChannelToControllerMap[i] == Controller) + { + channel = i; + } + } VALIDATE_NO_RV( CanIf_Global.initRun, CANIF_CONTROLLER_BUSOFF_ID, CANIF_E_UNINIT ); VALIDATE_NO_RV( Controller < CANIF_CHANNEL_CNT, CANIF_CONTROLLER_BUSOFF_ID, CANIF_E_PARAM_CONTROLLER ); @@ -936,24 +943,34 @@ void CanIf_ControllerBusOff(uint8 Controller) void CanIf_SetWakeupEvent(uint8 Controller) { -#if ( CANIF_DEV_ERROR_DETECT == STD_ON ) - // We call this a CanIf channel. Hopefully makes it easier to follow. - CanIf_Arc_ChannelIdType channel = (CanIf_Arc_ChannelIdType) Controller; -#else - (void)Controller; -#endif + CanIf_Arc_ChannelIdType channel = 0xff; + + for(int i = 0; i < CANIF_CHANNEL_CNT; i++) + { + if(CanIf_ConfigPtr->Arc_ChannelToControllerMap[i] == Controller) + { + channel = i; + } + } - VALIDATE_NO_RV(FALSE, CANIF_SETWAKEUPEVENT_ID, CANIF_E_NOK_NOSUPPORT); - VALIDATE_NO_RV( CanIf_Global.initRun, CANIF_SETWAKEUPEVENT_ID, CANIF_E_UNINIT ); - VALIDATE_NO_RV( channel < CANIF_CHANNEL_CNT, CANIF_SETWAKEUPEVENT_ID, CANIF_E_PARAM_CONTROLLER ); + VALIDATE_NO_RV(FALSE, CANIF_SETWAKEUPEVENT_ID, CANIF_E_NOK_NOSUPPORT); + VALIDATE_NO_RV( CanIf_Global.initRun, CANIF_SETWAKEUPEVENT_ID, CANIF_E_UNINIT ); + VALIDATE_NO_RV( channel < CANIF_CHANNEL_CNT, CANIF_SETWAKEUPEVENT_ID, CANIF_E_PARAM_CONTROLLER ); - // Not supported + // Not supported } void CanIf_Arc_Error(uint8 Controller, Can_Arc_ErrorType Error) { - // We call this a CanIf channel. Hopefully makes it easier to follow. - CanIf_Arc_ChannelIdType channel = (CanIf_Arc_ChannelIdType) Controller; + CanIf_Arc_ChannelIdType channel = 0xff; + + for(int i = 0; i < CANIF_CHANNEL_CNT; i++) + { + if(CanIf_ConfigPtr->Arc_ChannelToControllerMap[i] == Controller) + { + channel = i; + } + } VALIDATE_NO_RV( CanIf_Global.initRun, CANIF_ARCERROR_ID, CANIF_E_UNINIT ); VALIDATE_NO_RV( channel < CANIF_CHANNEL_CNT, CANIF_ARCERROR_ID, CANIF_E_PARAM_CONTROLLER ); -- 2.39.2