есть прерывание от таймера 0:
void interrupt my_isr(void) { /* Спец. функция уровня прерывания */
if ((TMR0IE)&&(TMR0IF)) { /* Проверка флагов прерывания от таймера */
TIMER0_TC++;
TMR0IF=0;
SPI_Led_Key(); /* Обработка клавиатурной и светодиодной матрицы */
}
if ((TXIE)&&(TXIF)) { /* Проверка флагов прерывания от передатчика UART */
UARTTxIRQ ();
}
if ((RCIE)&&(RCIF)) { /* Проверка флагов прерывания от приемника UART */
UARTRxIRQ ();
}
}
Вот функция SPI_Led_Key();
void SPI_Led_Key ( void ) {
CLR_PL();
SET_PL();
Array_Keys [0] = SPIRWChar(Array_Leds[0]);
Array_Keys [1] = SPIRWChar(Array_Leds[1]);
Array_Keys [2] = SPIRWChar(Array_Leds[2]);
SPIRWChar(Array_Leds[3]);
SET_ST_CP();
CLR_ST_CP();
}
}
Вот функция SPIRWChar() -
INT08U SPIRWChar(INT08U spi_out) {
SSPBUF = spi_out;
while (!SSPIF);
SSPIF = 0;
return SSPBUF;
}
Выходит так что внутри обработки прерывания от таймера 0 должно произойти прерывание которой установит SSPIF, но этого не происходит.
Вероятно это связано с приоритетами. Подскажите как сделать? Спасибо!