From: Leos Mikulka Date: Fri, 3 May 2013 08:50:30 +0000 (+0200) Subject: Temporary changes for the CAN communication X-Git-Url: http://rtime.felk.cvut.cz/gitweb/arc.git/commitdiff_plain/9582db92f155813a0382bbf2ce8db3304fb1f8a9?hp=c030240a9c5b883baeb4a908c24bb14881830362 Temporary changes for the CAN communication --- diff --git a/arch/arm/arm_cr4/drivers/Can.c b/arch/arm/arm_cr4/drivers/Can.c index 3f17ac90..040093a5 100644 --- a/arch/arm/arm_cr4/drivers/Can.c +++ b/arch/arm/arm_cr4/drivers/Can.c @@ -41,7 +41,7 @@ #define Dem_ReportErrorStatus(...) #endif -static sint8 IfRegId = 0; +//static sint8 IfRegId = 0; /* Macro for waiting until busy flag is 0 */ #define DCAN_WAIT_UNTIL_NOT_BUSY(ControllerId, IfRegId) \ @@ -106,6 +106,8 @@ static Can_StateType ModuleState = CAN_UNINIT; static CanIf_ControllerModeType ControllerMode[CAN_ARC_CTRL_CONFIG_CNT]; /* Used to switch between IF1 and IF2 of DCAN */ +static uint8 IfRegId = 0; + /* Used to order Data Bytes according to hardware registers in DCAN */ static const uint8 ElementIndex[] = {3, 2, 1, 0, 7, 6, 5, 4}; @@ -407,9 +409,13 @@ void Can_Init(const Can_ConfigType *Config) CanRegs[Controller]->CTL = 0x02001641 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8) | (CanControllerConfigData[Controller].CanBusOffProcessing >> 7); #else CanRegs[Controller]->CTL = 0x00001641 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8) | (CanControllerConfigData[Controller].CanBusOffProcessing >> 7); + + /* Parity Off */ + CanRegs[Controller]->CTL = 0x00020043 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8); #endif /* LEC 7, TxOk, RxOk, PER */ CanRegs[Controller]->SR = 0x0000011F; + //CanRegs[Controller]->SR = 0x0000031F; // according to HalCoGen /* Test Mode only for Development time: Silent Loopback */ if (CanControllerConfigData[Controller].Can_Arc_Loopback) { @@ -423,6 +429,8 @@ void Can_Init(const Can_ConfigType *Config) *(ControllerConfig[Controller].CancelPtr + MsgNr) = 0; *(ControllerConfig[Controller].TxPtr + MsgNr) = 0; + CanRegs[Controller]->ABOT = 0; // added manually according to HalCoGen, maybe delete??? + DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId); // Initialize all message objects for this controller to invalid state. @@ -430,6 +438,7 @@ void Can_Init(const Can_ConfigType *Config) CanRegs[Controller]->IFx[IfRegId].ARB = 0x00000000; /* Start writing Arbitration Bits */ CanRegs[Controller]->IFx[IfRegId].COM = 0x00A80000 | (MsgNr + 1); + // CanRegs[Controller]->IFx[IfRegId].COM = 0x00F80000 | (MsgNr + 1); maybe right, later it's used again?? /* Use IFx[0] and IFx[1] alternating */ IfRegId ^= 1; @@ -474,11 +483,14 @@ void Can_Init(const Can_ConfigType *Config) | (CanControllerConfigData[Controller].CanTxProcessing << 1) // Tx confirmation interrupt enabled | (Eob & ~(hoh->CanObjectType >> 22)); // Eob, only for Rx. + //CanRegs[Controller]->IFx[IfRegId].MC = 0x00001008; + //CanRegs[Controller]->IFx[IfRegId].MC = 0x00001008 | CanControllerConfigData[Controller].CanRxProcessing | (CanControllerConfigData[Controller].CanTxProcessing) | Eob & ~(hoh->CanObjectType >> 17); if(hoh->CanIdType == CAN_ID_TYPE_STANDARD) /* Standard Identifiers */ { /* Only Standard-Ids are accepted, Set Mask */ + // HalCoGen CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF); /* Message valid, Id, Direction */ CanRegs[Controller]->IFx[IfRegId].ARB = 0x80000000 | ((hoh->CanIdValue & 0x7FF) << 18) | hoh->CanObjectType; @@ -486,7 +498,9 @@ void Can_Init(const Can_ConfigType *Config) else if(hoh->CanIdType == CAN_ID_TYPE_EXTENDED) /* Extended Identifiers */ { /* Only Extended-Ids are accepted, Set Mask */ - CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF); + CanRegs[Controller]->IFx[IfRegId].MASK = 0xC0000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF); // HalCoGen + // C = bit 30: The message direction bit (Dir) is used for acceptance filtering. + // CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF); /* Message valid, Id, Direction */ CanRegs[Controller]->IFx[IfRegId].ARB = 0xC0000000 | (hoh->CanIdValue & 0x1FFFFFFF) | hoh->CanObjectType; } @@ -510,7 +524,7 @@ void Can_Init(const Can_ConfigType *Config) /* Set Bit Timing Register */ CanRegs[Controller]->BTR = Can_CalculateBTR(Controller); - /* Reset CCE Bit */ + /* Reset CCE Bit, i.e. disable configuration change */ CanRegs[Controller]->CTL &= ~0x00000040; #if(CAN_DEV_ERROR_DETECT == STD_ON) @@ -603,7 +617,7 @@ void Can_InitController(uint8 Controller, const Can_ControllerConfigType* Config DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId); - /* Read actual MaskRegister value of MessageObject */ + /* Read actual MaskRegister value of MessageObject; TxRqst/NewDat */ CanRegs[Controller]->IFx[IfRegId].COM = 0x004C0000 | (MsgNr); DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId); @@ -612,7 +626,7 @@ void Can_InitController(uint8 Controller, const Can_ControllerConfigType* Config /* Set new Mask */ CanRegs[Controller]->IFx[IfRegId].MASK |= (*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF; /* Write new Mask to MaskRegister */ - CanRegs[Controller]->IFx[IfRegId].COM = 0x00C80000 | (MsgNr); + CanRegs[Controller]->IFx[IfRegId].COM = 0x00C80000 | (MsgNr); // E8?? IfRegId ^= 1; } @@ -677,7 +691,7 @@ Can_ReturnType Can_SetControllerMode(uint8 Controller, Can_StateTransitionType T break; case CAN_T_SLEEP: - /* Set PDR Bit */ + /* Set PDR Bit - Local Power Down Mode requested */ CanRegs[Controller]->CTL |= 0x01000000; /* Save actual Register status */ RegBuf = CanRegs[Controller]->CTL; @@ -806,7 +820,7 @@ Can_ReturnType Can_Write(Can_Arc_HTHType Hth, Can_PduType *PduInfo) uint8 *CurTxRqstPtr; imask_t state; - CurSduPtr = PduInfo->sdu; + CurSduPtr = PduInfo->sdu; // e.g. ComArcIPduBuffer_TX_PDU /* DET Error Check */ @@ -847,7 +861,7 @@ Can_ReturnType Can_Write(Can_Arc_HTHType Hth, Can_PduType *PduInfo) continue; // This message object is not part of this hoh. } /* Check if TxRqst Bit of MsgObject is set */ - if(CanRegs[ControllerId]->TRx[MsgNr >> 5] & (1 << (MsgNr & 0x1F))) + if(CanRegs[ControllerId]->TRx[MsgNr >> 5] & (1 << (MsgNr & 0x1F))) // (1 << (MsgNr & 0x1F)) - bitIndex { continue; } diff --git a/boards/mpc5567qrtech/examples/rte_simple/config/Com_PbCfg.c b/boards/mpc5567qrtech/examples/rte_simple/config/Com_PbCfg.c index a887a98d..011a129d 100644 --- a/boards/mpc5567qrtech/examples/rte_simple/config/Com_PbCfg.c +++ b/boards/mpc5567qrtech/examples/rte_simple/config/Com_PbCfg.c @@ -242,11 +242,29 @@ const ComSignal_type * const ComIPduSignalRefs_FreqReq[] = { }; const ComSignal_type * const ComIPduSignalRefs_RX_PDU[] = { &ComSignal[ Arg1 ], - &ComSignal[ Arg2 ], + &ComSignal[ Arg2 ], + /* &ComSignal [ H ], + * &ComSignal [ E ], + * &ComSignal [ R ], + * &ComSignal [ C ], + * &ComSignal [ U ], + * &ComSignal [ L ], + * &ComSignal [ E ], + * &ComSignal [ S ], + */ NULL, }; const ComSignal_type * const ComIPduSignalRefs_TX_PDU[] = { - &ComSignal[ ResultSig ], + &ComSignal[ ResultSig ], + /* &ComSignal [ H ], + * &ComSignal [ E ], + * &ComSignal [ R ], + * &ComSignal [ C ], + * &ComSignal [ U ], + * &ComSignal [ L ], + * &ComSignal [ E ], + * &ComSignal [ S ], + */ NULL, }; diff --git a/boards/ti_tms570ls/examples/rte_simple/config/CanIf_Cfg.h b/boards/ti_tms570ls/examples/rte_simple/config/CanIf_Cfg.h index 757e30a5..7b1eed0a 100644 --- a/boards/ti_tms570ls/examples/rte_simple/config/CanIf_Cfg.h +++ b/boards/ti_tms570ls/examples/rte_simple/config/CanIf_Cfg.h @@ -37,7 +37,7 @@ #define CANIF_TRANSCEIVER_API STD_OFF // Not supported #define CANIF_TRANSMIT_CANCELLATION STD_OFF // Not supported - +// TODO: check whether FreqReq, FreqInd necessary #define CANIF_PDU_ID_RX_PDU 0 #define CANIF_PDU_ID_FreqReq 1 diff --git a/system/EcuM/EcuM_Callout_Stubs.c b/system/EcuM/EcuM_Callout_Stubs.c index 5356f576..955eacf9 100644 --- a/system/EcuM/EcuM_Callout_Stubs.c +++ b/system/EcuM/EcuM_Callout_Stubs.c @@ -143,6 +143,7 @@ void EcuM_AL_DriverInitOne(const EcuM_ConfigType *ConfigPtr) #if defined(USE_PORT) // Setup Port Port_Init(ConfigPtr->PortConfig); + //Dmm_Reset(ConfigPtr->PortConfig); #endif