Использую демопроект motorcontrol (оттуда взята инициализация тактирования и пинов, остальное всё убрано). При инициализации CAN срабатывает какое-то прерывание и контроллер переходит на defaultISRhandler:
Код: Выделить всё
void main ()
{
InitCLK();
CanDrv_init(); // инициализация CAN
...
//sm_sys.init(&sm_sys);
//EINT;//разрешение прерываний
}
// Инициализация CAN
void CanDrv_init()
{
// D11 - CAN0_TX, E2 - CAN0_RX
NT_GPIOG->ALTFUNCSET |= 1<<11; // вкл альт. ф.
NT_COMMON_REG->GPIODENG |= 1<<11; // вход активен
NT_GPIOE->ALTFUNCSET |= 1<<2; // вкл альт. ф.
NT_COMMON_REG->GPIODENE |= 1<<2; // вход активен
NT_CAN->CLC_bit.DISR = 1; // запустить механизм выключения
while(NT_CAN->CLC_bit.DISS == 0); // ожидание выключения
while(NT_CAN->PANCTR_bit.BUSY | NT_CAN->PANCTR_bit.RBUSY);
NT_CAN->CAN_Node[NCAN].NCR_bit.INIT = 1; // начало инициализации
NT_CAN->CAN_Node[NCAN].NCR_bit.CCE = 1; // бит разрешения изменения конфигурации узла. Разрешает доступ в NBTRx, NPCRx и NECNTx
NT_CAN->CAN_Node[NCAN].NPCR_bit.LBM = 0;// loop-back=0
NT_CAN->CAN_Node[NCAN].NIPR = 0;// Регистр указателя прерываний узла
....
}