#include "Det.h"\r
#include "CanIf_Cbk.h"\r
#include "Os.h"\r
-#include "irq.h"\r
+#include "isr.h"\r
#include "Mcu.h"\r
#include "arc.h"\r
\r
#define Dem_ReportErrorStatus(...)\r
#endif\r
\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
{ \\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
/* 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
uint8 *SduPtr;\r
\r
/* Wait until Busy Flag is 0 */\r
- DCAN_WAIT_UNTIL_NOT_BUSY_NO_RV(controller, IfRegId);\r
+ DCAN_WAIT_UNTIL_NOT_BUSY(controller, IfRegId);\r
\r
// Read message control\r
uint32 mc = CanRegs[controller]->IFx[IfRegId].MC;\r
uint8 MsgNr;\r
uint32 ErrCounter;\r
uint32 Eob;\r
+ imask_t state;\r
\r
/* DET Error Check */\r
#if(CAN_DEV_ERROR_DETECT == STD_ON)\r
}\r
#endif \r
\r
- imask_t i_state = McuE_EnterCriticalSection();\r
+ Irq_Save(state);\r
\r
// TODO This should be used instead of other variables in the Can_Lcfg file.\r
CurConfig = Config;\r
#endif\r
\r
// Install interrupt handlers\r
- TaskType tid;\r
if (CanControllerConfigData[Controller].CanControllerId == DCAN1) {\r
- tid = Os_Arc_CreateIsr(Can1_InterruptHandler, 2 ,"DCAN1Level0");\r
- Irq_AttachIsr2(tid, NULL, 16);\r
-\r
- tid = Os_Arc_CreateIsr(Can1_InterruptHandler, 2, "DCAN1Level1");\r
- Irq_AttachIsr2(tid, NULL, 29);\r
+ ISR_INSTALL_ISR2("DCAN1Level0",Can1_InterruptHandler,CAN1_LEVEL_0,2,0);\r
+ ISR_INSTALL_ISR2("DCAN1Level1",Can1_InterruptHandler,CAN1_LEVEL_1,2,0);\r
\r
} else if (CanControllerConfigData[Controller].CanControllerId == DCAN2) {\r
- tid = Os_Arc_CreateIsr(Can2_InterruptHandler, 2 ,"DCAN2Level0");\r
- Irq_AttachIsr2(tid, NULL, 35);\r
-\r
- tid = Os_Arc_CreateIsr(Can2_InterruptHandler, 2, "DCAN2Level1");\r
- Irq_AttachIsr2(tid, NULL, 42);\r
+ ISR_INSTALL_ISR2("DCAN2Level0",Can2_InterruptHandler,CAN2_LEVEL_0,2,0);\r
+ ISR_INSTALL_ISR2("DCAN2Level1",Can2_InterruptHandler,CAN2_LEVEL_1,2,0);\r
\r
} else if (CanControllerConfigData[Controller].CanControllerId == DCAN3) {\r
- tid = Os_Arc_CreateIsr(Can3_InterruptHandler, 2 ,"DCAN3Level0");\r
- Irq_AttachIsr2(tid, NULL, 45);\r
-\r
- tid = Os_Arc_CreateIsr(Can3_InterruptHandler, 2, "DCAN3Level1");\r
- Irq_AttachIsr2(tid, NULL, 55);\r
+ ISR_INSTALL_ISR2("DCAN3Level0",Can3_InterruptHandler,CAN3_LEVEL_0,2,0);\r
+ ISR_INSTALL_ISR2("DCAN3Level1",Can3_InterruptHandler,CAN3_LEVEL_1,2,0);\r
\r
}\r
\r
ModuleState = CAN_READY;\r
#endif\r
\r
- McuE_ExitCriticalSection(i_state);\r
+ Irq_Restore(state);\r
+\r
+}\r
+\r
+// Unitialize the module\r
+void Can_DeInit()\r
+{\r
\r
+ return;\r
}\r
\r
\r
{\r
uint8 MsgNr;\r
uint32 ErrCounter;\r
+ imask_t state;\r
\r
#if(CAN_DEV_ERROR_DETECT == STD_ON)\r
if(Config == NULL)\r
}\r
#endif \r
\r
- imask_t i_state = McuE_EnterCriticalSection();\r
+ Irq_Save(state);\r
\r
ErrCounter = CAN_TIMEOUT_DURATION;\r
\r
/* Clear CCE Bit */\r
CanRegs[Controller]->CTL &= ~0x00000040;\r
\r
- McuE_ExitCriticalSection(i_state);\r
+ Irq_Restore(state);\r
}\r
\r
\r
Can_PduType *CurPduArrayPtr;\r
uint8 *CurCancelRqstPtr;\r
uint8 *CurTxRqstPtr;\r
+ imask_t state;\r
\r
CurSduPtr = PduInfo->sdu;\r
\r
DCAN_WAIT_UNTIL_NOT_BUSY(ControllerId, IfRegId);\r
\r
// We cannot allow an interrupt or other task to play with the COM, MC and ARB registers here.\r
- imask_t i_state = McuE_EnterCriticalSection();\r
+ Irq_Save(state);\r
\r
\r
/* Set NewDat, TxIE (dep on ControllerConfig), TxRqst, EoB and DLC */\r
| (0x000F & PduInfo->length) // Set DLC\r
| (CanControllerConfigData[ControllerId].CanTxProcessing << 1); // Tx confirmation interrupt enabled\r
\r
-\r
/* Set ArbitrationRegister */\r
CanRegs[ControllerId]->IFx[IfRegId].ARB = ArbRegValue;\r
\r
+\r
/* Set Databytes */\r
for(DataByteIndex = 0; DataByteIndex < PduInfo->length; DataByteIndex++)\r
{\r
\r
IfRegId ^= 1;\r
\r
- McuE_ExitCriticalSection(i_state);\r
+ Irq_Restore(state);\r
return CAN_OK;\r
}\r
\r