Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Прерывание в прерывании у Pic-ов (+)

Отправлено Двоешник (92.240.98.10) 10 января 2011, г. 17:55


есть прерывание от таймера 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, но этого не происходит.
Вероятно это связано с приоритетами. Подскажите как сделать? Спасибо!


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 3 в два раза:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru