Other Parts Discussed in Thread: HALCOGEN
I am implementing the DCAN on the AVSDK & VisionMid(TI8148).
In the TMS570(use the HALCoGen), I can be obtained the Interrupt from the VIM(Vectored Interrupt Manager Module).
As follows:
24.2 Device Level Interrupt Management of TMS570_TRM.PDF
==============================
[sys_startup.c]
typedef volatile struct vimRam
{
t_isrFuncPTR ISR[VIM_CHANNELS];
} vimRAM_t;
#define vimRAM ((vimRAM_t *)0xFFF82000U)
static const t_isrFuncPTR s_vim_init[] =
{
...
can1HighLevelInterrupt,
...
can1LowLevelInterrupt,
...
};
----------------------------------------
/* enable interrupts */
vimREG->REQMASKSET0 = 1U
...
| (1U << 16)
...
| (1U << 29)
...;
----------------------------------------
[dcan.c]
#pragma INTERRUPT(can1HighLevelInterrupt, IRQ)
void can1HighLevelInterrupt(void)
{
unsigned value = canREG1->INT;
...
if (value == 0x8000U)
{
canErrorNotification(canREG1, canREG1->ES & 0xE0U);
return;
}
...
}
#pragma INTERRUPT(can1LowLevelInterrupt, IRQ)
void can1LowLevelInterrupt(void)
{
unsigned messageBox = canREG1->INT >> 16U;
...
}
----------------------------------------
[*.dil]
DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt
DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt
==============================
but,
In the VisionMid(TI8148), There is no explanation even in DM814x_TRM.PDF.
I don't have the foggiest idea what to the CAN Interrupt processing on the AVSDK.
Could you please help me the way?