Вообщем я реализовал обработчик прерывании в виде ассемблерной функции и из этого обработчика вызываю сишную функцию. Вглядит это примерно так:
rset: B _c_int0
int1: B xxxx
int2: B xxxx
int3: B xxxx
int4: B xxxx
int5: B xxxx
int6: B xxxx
......
xxxx:
... //cохранение контекста
LDP #PIVR >> 7
LACL PIVR
XOR #002Fh
CC function, eq
... //выход из обработчика
сам обработчик:
void function()
{
A = A + 1; // A,B - объявлены как глобальные в main.c
B = B + 2;
... //сброс флага прерывания
}
Теперь проблема: при попытке использования А,В в main.c программа вылетает в NMI. Есть подозрения что делаю что-то не так при сохранении контекста.