Есть проблема с вызовом обработчика прерывания при изменении смещения таблицы векторов.
Оборудование:
Микроконтроллер К1921ВК01Т (стартеркит от НИИЭТ)
Микроконтроллер 1921ВК01Т1 с ромбиком (своя разработка)
Среда разработки:
Keil 5.24.2 Lite (32K ограничение кода)
NIIET.K1921VK01T_DFP.2.0.5 (и DFP.2.0.4 пробовал)
Отладчик:
ST-LINK/V2 ISOL
Работающая ситуация:
Код: Выделить всё
// назначение обработчика прерывания от PWM3.
IRQ_HandlerInit (PWM3_IRQn, Interrupt_PWM3_Event_CheckSystem);
Код: Выделить всё
Vectors[79] 0x00001881 Interrupt_PWM3_Event_CheckSystem
Код: Выделить всё
vtable 0x20000080 Section 600 niietcm4_irq.o(vtable)
Vectors 0x20000080 Data 600 niietcm4_irq.o(vtable)
Немного добавил кода, глобальных и статических переменных .
Под отладчиком видим в массиве :
Код: Выделить всё
Vectors[79] 0x00001881 Interrupt_PWM3_Event_CheckSystem
После разрешения прерывания:
Код: Выделить всё
__Энвик_EnableIRQ(PWM3_IRQn);
Код: Выделить всё
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
>> B .
ENDP
В файле Project.map(не рабочий) находим положение таблицы векторов прерываний в ОЗУ МК:
Код: Выделить всё
vtable 0x20000100 Section 600 niietcm4_irq.o(vtable)
Vectors 0x20000100 Data 600 niietcm4_irq.o(vtable)
Код: Выделить всё
void SysTick_Handler(void){
PWM_ET_StatusClear(NT_PWM3, PWM_ET_Status_A);
PWM_ITStatusClear(NT_PWM3);
PWM_ITPendClear(NT_PWM3);
}
В файле Project.map(жизнь наладилась) находим положение таблицы векторов прерываний:
Код: Выделить всё
vtable 0x20000100 Section 600 niietcm4_irq.o(vtable)
Vectors 0x20000100 Data 600 niietcm4_irq.o(vtable)
Код: Выделить всё
15 System Tick Timer SYSTICK Enable -------- --------
...
79 ExtIRQ63 ExtIRQ63 Enable -------- Active
Похоже ошибка в железе или при инициализации оного… Да и инициализация вроде верна… Может я чего-то не понимаю?