\r
/** @reqSettings DEFAULT_SPECIFICATION_REVISION=3.1.5 */\r
\r
-/*\r
- * Generator TODO:\r
- * - Generate the Rx, Tx masks in as const\r
- * - CLK_SRC\r
- * Not avail: MPC5606S\r
- * Avail: MPC5516 (XOSC, See 3.3)\r
+/* Code TODO\r
+ * - REMOVE1\r
+ * - REMOVE2\r
+ * - Enable SOFT_RESET to guarantee that we get the same state every time\r
+ * (do in Can_InitController ?)\r
*/\r
\r
-\r
/* ----------------------------[information]----------------------------------*/\r
/*\r
* Author: mahi\r
* **) The flexcan hardware cannot detect wakeup (at least now the ones\r
* this driver supports)\r
*\r
- * Devices\r
- * MPC560x\r
- * MPC551x\r
- * MPC5567\r
- * MPC5668\r
+ * Devices CLK_SRC\r
+ * ----------------------------------------------\r
+ * MPC5604B ?\r
+ * MPC5606S Only sys-clk it seems\r
+ * MPC551x Both sys-clk and XOSC, See 3.3\r
+ * MPC5567 ?\r
+ * MPC5668 ?\r
*\r
* MPC5554 is NOT supported (no individual mask)\r
*\r
while (iFlag & uPtr->Can_Arc_RxMbMask) {\r
\r
/* Find mailbox */\r
- mbNr = ilog2_64(iFlag);\r
+ mbNr = ilog2_64(iFlag & uPtr->Can_Arc_RxMbMask);\r
iFlag ^= 1ull << mbNr;\r
\r
/* Check for FIFO interrupt */\r
\r
static void Can_BuildMaps(Can_UnitType *uPtr)\r
{\r
+ (void)uPtr;\r
#if 0\r
uint8_t mbNr = 8;\r
uint8_t fifoNr = 0;\r
\r
Can_BuildMaps(unitPtr);\r
\r
+ /* REMOVE2: Can_InitController() should probably not be called from Can_Init() at all\r
+ * This is done by CanIf */\r
Can_InitController(cfgCtrlPtr->CanControllerId,unitPtr->cfgCtrlPtr);\r
\r
switch (cfgCtrlPtr->CanControllerId) {\r
-#if defined(CFG_MPC5606X)\r
+#if defined(CFG_MPC560X)\r
case CAN_CTRL_A:\r
ISR_INSTALL_ISR2( "Can", Can_A_BusOff, FLEXCAN_0_ESR_BOFF_INT, 2, 0);\r
ISR_INSTALL_ISR2( "Can", Can_A_Err, FLEXCAN_0_ESR_ERR_INT, 2, 0 );\r
ISR_INSTALL_ISR2( "Can", Can_E_Isr, FLEXCAN_E_IFLAG1_BUF31_16I, 2, 0 );\r
ISR_INSTALL_ISR2( "Can", Can_A_Isr, FLEXCAN_E_IFLAG1_BUF63_32I, 2, 0 );\r
break;\r
-#endif\r
-#if defined(CFG_MPC5516) || defined(CFG_MPC5517)\r
+ #if defined(CFG_MPC5516) || defined(CFG_MPC5517)\r
case CAN_CTRL_F:\r
ISR_INSTALL_ISR2( "Can", Can_F_BusOff, FLEXCAN_F_ESR_BOFF_INT, 2, 0 );\r
ISR_INSTALL_ISR2( "Can", Can_F_Err, FLEXCAN_F_ESR_ERR_INT, 2, 0 );\r
ISR_INSTALL_ISR2( "Can", Can_F_Isr, FLEXCAN_F_IFLAG1_BUF31_16I, 2, 0 );\r
ISR_INSTALL_ISR2( "Can", Can_A_Isr, FLEXCAN_F_IFLAG1_BUF63_32I, 2, 0 );\r
break;\r
+ #endif\r
#endif\r
default:\r
assert(0);\r
canHw->MCR.B.MAXMB = cfgCtrlPtr->Can_Arc_MailboxMax - 1;\r
\r
\r
- /* Disable selfreception, if not loopback */\r
+ /* Disable self-reception, if not loopback */\r
canHw->MCR.B.SRXDIS = (config->Can_Arc_Flags & CAN_CTRL_LOOPBACK) ? 0 : 1;\r
\r
/* Clock calucation\r
}\r
\r
canUnit->mbTxFree = canUnit->Can_Arc_TxMbMask;\r
+ /* @req 3.1.5/CAN260 */\r
canUnit->state = CANIF_CS_STOPPED;\r
+\r
+ // Release FREEZE to be able to write to mem mapped registers ( see 25.4.8.1 )\r
+\r
+ /* REMOVE1: Remove this cause CAN260 says it should not be able to communicate */\r
+ canHw->MCR.B.FRZ = 0;\r
+ canHw->MCR.B.HALT = 0;\r
+\r
Can_EnableControllerInterrupts(cId);\r
\r
return;\r
imask_t state;\r
Can_ReturnType rv = CAN_OK;\r
\r
- Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller);\r
-\r
/** @req 3.1.5/CAN198 */\r
- VALIDATE( (canUnit->state!=CANIF_CS_UNINIT), 0x3, CAN_E_UNINIT );\r
+ VALIDATE( (Can_Global.initRun == CAN_READY), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_UNINIT );\r
+ Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller);\r
+ VALIDATE( (canUnit->state!=CANIF_CS_UNINIT), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_UNINIT );\r
/** @req 3.1.5/CAN199 */\r
- VALIDATE( VALID_CONTROLLER(controller), 0x3, CAN_E_PARAM_CONTROLLER );\r
+ VALIDATE( VALID_CONTROLLER(controller), CAN_SETCONTROLLERMODE_SERVICE_ID, CAN_E_PARAM_CONTROLLER );\r
\r
canHw = canUnit->hwPtr;\r
\r
/** !req 3.1.5/CAN204 */\r
/** !req 3.1.5/CAN292 */\r
\r
+ VALIDATE_NO_RV( (Can_Global.initRun == CAN_READY), CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT );\r
Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller);\r
flexcan_t *canHw;\r
imask_t state;\r
flexcan_t *canHw;\r
imask_t state;\r
\r
- canUnit = CTRL_TO_UNIT_PTR(controller);\r
/** @req 3.1.5/CAN209 */\r
+ VALIDATE_NO_RV( (Can_Global.initRun == CAN_READY), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT );\r
+ canUnit = CTRL_TO_UNIT_PTR(controller);\r
VALIDATE_NO_RV( (canUnit->state!=CANIF_CS_UNINIT), CAN_ENABLECONTROLLERINTERRUPTS_SERVICE_ID, CAN_E_UNINIT );\r
\r
/** @req 3.1.5/CAN210 */\r
/** !req 3.1.5/CAN363 */\r
\r
/* NOT SUPPORTED */\r
+ (void)controller;\r
}\r
\r
\r
\r
void Can_Arc_GetStatistics(uint8 controller, Can_Arc_StatisticsType *stats)\r
{\r
- Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller);\r
- *stats = canUnit->stats;\r
+ if(Can_Global.initRun == CAN_READY)\r
+ {\r
+ Can_UnitType *canUnit = CTRL_TO_UNIT_PTR(controller);\r
+ *stats = canUnit->stats;\r
+ }\r
}\r
#endif\r
\r