доброе время суток, вот столкнулся с такой бедой, пишу программку для
PIC18F452 на C18, и обнаружил глюк, использую стандартные функции прерывания, по идеи они отвечают за сохранения/восстановления некоторых специальных регистров ( STATUS, итд) но вот при одновременном срабатывании низко и высокоприоритетного прерывания, после их отработке, востановление этих регистров происходит не верно, ( как я подозреваю регистры после низкоприоритетного прерывания не востанавливаются) что приводит к сбою программы, вот вопрос как с этим бороться ?
//================================================== ================
// функции прерываний
//================================================== ================
#pragma interrupt MyHighInt // MyHighInt is an interrupt
#pragma code high_vector=0x08 // high_vector is at 0x0008
void high_vector(void) // the high prioity vector
{
_asm GOTO MyHighInt _endasm // goto high software
}
#pragma interruptlow MyLowInt // MyLowInt is an interrupt
#pragma code low_vector=0x18 // low vector is at 0x0018
void low_vector(void) // the low prioity vector
{
_asm GOTO MyLowInt _endasm // goto low software
}
//================================================== ===============
//================================================== ======================================
#pragma code // start code here
void MyHighInt(void) // высокоприорететные прерывания.
{
INTCONbits.TMR0IF = 0; // clear Timer 0 request
WriteTimer0( 12000 ); // Timer 0
}
void MyLowInt(void) // низкоприорететные прерывания.
{
PIR1bits.TMR1IF = 0; // clear Timer 1 request
WriteTimer1( 53047 ); // reload count
}
//================================================== ======================================