Я нашел здесь, что кажется правильным, однако это не работает:
*** Bootloader Vector.c: *******
ISR (AS1_InterruptTx)
{
как м
{
pshh
ldhx # $ DFD4
pshx
jmp DO_ISR
}
}
....... Аналогично для других векторов с другим адресом ...........
............................................... ...................
void DO_ISR ()
{
как м
{
pulx
лдхх, х
cphx # $ FFFF
beq DI1
JSR, х
ЦВЕ 1:
pulh
Rti
}
}
************ В заявке Vector.c ******************
Я изменил:
ISR (AS1_InterruptTx)
{
...........
...........
}
Кому:
void AS1_InterruptTx ()
{
..........
..........
}
Кроме того, я сохранил Векторы на месте по умолчанию в Bootloader, то есть 0xFFC4, и перенаправил таблицу Векторов в коде приложения на 0xDFC4.
Значение NVPROT_INIT равно 0xDE, а NVOPT_INIT равно 0x7E. Хотя это противоречит тому, что должно быть для кода приложения (NVOPT = 0x3E для перенаправления), но мы не можем перезаписать этот регистр, поскольку они защищены. Однако всякий раз, когда возникает прерывание, оно отправляется в таблицу векторов, расположенную в 0xFFC4, которая затем отправляет его в 0xDFC4.
Это хороший способ справиться с этой проблемой?