#define Dem_ReportErrorStatus(...)\r
#endif\r
\r
-static sint8 IfRegId = 0;\r
+//static sint8 IfRegId = 0;\r
\r
/* Macro for waiting until busy flag is 0 */\r
#define DCAN_WAIT_UNTIL_NOT_BUSY(ControllerId, IfRegId) \\r
static CanIf_ControllerModeType ControllerMode[CAN_ARC_CTRL_CONFIG_CNT];\r
\r
/* Used to switch between IF1 and IF2 of DCAN */\r
+static uint8 IfRegId = 0;\r
+\r
\r
/* Used to order Data Bytes according to hardware registers in DCAN */\r
static const uint8 ElementIndex[] = {3, 2, 1, 0, 7, 6, 5, 4};\r
CanRegs[Controller]->CTL = 0x02001641 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8) | (CanControllerConfigData[Controller].CanBusOffProcessing >> 7);\r
#else\r
CanRegs[Controller]->CTL = 0x00001641 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8) | (CanControllerConfigData[Controller].CanBusOffProcessing >> 7);\r
+\r
+ /* Parity Off */\r
+ CanRegs[Controller]->CTL = 0x00020043 | DCAN_IRQ_MASK | (CanControllerConfigData[Controller].Can_Arc_Loopback << 7);// | (CanControllerConfigData[Controller].CanWakeupProcessing >> 8);\r
#endif \r
/* LEC 7, TxOk, RxOk, PER */\r
CanRegs[Controller]->SR = 0x0000011F;\r
+ //CanRegs[Controller]->SR = 0x0000031F; // according to HalCoGen\r
\r
/* Test Mode only for Development time: Silent Loopback */\r
if (CanControllerConfigData[Controller].Can_Arc_Loopback) {\r
*(ControllerConfig[Controller].CancelPtr + MsgNr) = 0;\r
*(ControllerConfig[Controller].TxPtr + MsgNr) = 0;\r
\r
+ CanRegs[Controller]->ABOT = 0; // added manually according to HalCoGen, maybe delete???\r
+\r
DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId);\r
\r
// Initialize all message objects for this controller to invalid state.\r
CanRegs[Controller]->IFx[IfRegId].ARB = 0x00000000;\r
/* Start writing Arbitration Bits */\r
CanRegs[Controller]->IFx[IfRegId].COM = 0x00A80000 | (MsgNr + 1);\r
+ // CanRegs[Controller]->IFx[IfRegId].COM = 0x00F80000 | (MsgNr + 1); maybe right, later it's used again??\r
\r
/* Use IFx[0] and IFx[1] alternating */\r
IfRegId ^= 1;\r
| (CanControllerConfigData[Controller].CanTxProcessing << 1) // Tx confirmation interrupt enabled\r
| (Eob & ~(hoh->CanObjectType >> 22)); // Eob, only for Rx.\r
\r
+ //CanRegs[Controller]->IFx[IfRegId].MC = 0x00001008;\r
+\r
//CanRegs[Controller]->IFx[IfRegId].MC = 0x00001008 | CanControllerConfigData[Controller].CanRxProcessing | (CanControllerConfigData[Controller].CanTxProcessing) | Eob & ~(hoh->CanObjectType >> 17);\r
\r
if(hoh->CanIdType == CAN_ID_TYPE_STANDARD) /* Standard Identifiers */\r
{\r
/* Only Standard-Ids are accepted, Set Mask */\r
+ // HalCoGen\r
CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF);\r
/* Message valid, Id, Direction */\r
CanRegs[Controller]->IFx[IfRegId].ARB = 0x80000000 | ((hoh->CanIdValue & 0x7FF) << 18) | hoh->CanObjectType;\r
else if(hoh->CanIdType == CAN_ID_TYPE_EXTENDED) /* Extended Identifiers */\r
{\r
/* Only Extended-Ids are accepted, Set Mask */\r
- CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF);\r
+ CanRegs[Controller]->IFx[IfRegId].MASK = 0xC0000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF); // HalCoGen\r
+ // C = bit 30: The message direction bit (Dir) is used for acceptance filtering.\r
+ // CanRegs[Controller]->IFx[IfRegId].MASK = 0x80000000 | ((*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF);\r
/* Message valid, Id, Direction */\r
CanRegs[Controller]->IFx[IfRegId].ARB = 0xC0000000 | (hoh->CanIdValue & 0x1FFFFFFF) | hoh->CanObjectType;\r
}\r
/* Set Bit Timing Register */\r
CanRegs[Controller]->BTR = Can_CalculateBTR(Controller);\r
\r
- /* Reset CCE Bit */\r
+ /* Reset CCE Bit, i.e. disable configuration change */\r
CanRegs[Controller]->CTL &= ~0x00000040;\r
\r
#if(CAN_DEV_ERROR_DETECT == STD_ON)\r
\r
DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId);\r
\r
- /* Read actual MaskRegister value of MessageObject */\r
+ /* Read actual MaskRegister value of MessageObject; TxRqst/NewDat */\r
CanRegs[Controller]->IFx[IfRegId].COM = 0x004C0000 | (MsgNr);\r
\r
DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(Controller, IfRegId);\r
/* Set new Mask */\r
CanRegs[Controller]->IFx[IfRegId].MASK |= (*(hoh->CanFilterMaskRef)) & 0x1FFFFFFF;\r
/* Write new Mask to MaskRegister */\r
- CanRegs[Controller]->IFx[IfRegId].COM = 0x00C80000 | (MsgNr);\r
+ CanRegs[Controller]->IFx[IfRegId].COM = 0x00C80000 | (MsgNr); // E8??\r
\r
IfRegId ^= 1;\r
}\r
break;\r
\r
case CAN_T_SLEEP:\r
- /* Set PDR Bit */\r
+ /* Set PDR Bit - Local Power Down Mode requested */\r
CanRegs[Controller]->CTL |= 0x01000000;\r
/* Save actual Register status */\r
RegBuf = CanRegs[Controller]->CTL;\r
uint8 *CurTxRqstPtr;\r
imask_t state;\r
\r
- CurSduPtr = PduInfo->sdu;\r
+ CurSduPtr = PduInfo->sdu; // e.g. ComArcIPduBuffer_TX_PDU\r
\r
\r
/* DET Error Check */\r
continue; // This message object is not part of this hoh.\r
}\r
/* Check if TxRqst Bit of MsgObject is set */\r
- if(CanRegs[ControllerId]->TRx[MsgNr >> 5] & (1 << (MsgNr & 0x1F)))\r
+ if(CanRegs[ControllerId]->TRx[MsgNr >> 5] & (1 << (MsgNr & 0x1F))) // (1 << (MsgNr & 0x1F)) - bitIndex\r
{\r
continue;\r
}\r