Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Продолжительное действие выполнять в обработчике прерывания как-то нехорошо.
Отправлено
Vit 10 февраля 2007 г. 15:29
В ответ на:
LPC2138. Запретить - разрешить прерывание. отправлено
yurich 10 февраля 2007 г. 14:57
Отдалённо-приблизительный вариант для работы с UART по прерыванию
#define LOCKED -1
#define UNLOCKED 0
volatile char Lock = UNLOCKED;
unsigned char * pBuffer;
signed int post_data(unsigned char * Buffer, unsigned char Len){
if(Lock) return (Lock = LOCKED);
pBuffer = Buffer;
while(!TxFIFO_NOT_FULL);
if(Len--)Post_Symbol(*pBuffer++);
// Post FIRST Symbol by FIFO EMPTY or NOT FULL
return Len;
}void UART_ISR(void){
if(Len--)Post_Symbol(*pBuffer++);
else Lock = UNLOCKED;
};
void Post_Symbol(unsigned char data){
//while(!TxFIFO_NOT_FULL);
UARTxBUF = data;
}
void TIMER1Interrupt (void){
if( post_data(&mt2send, sizeof(mt2send))== LOCKED ) set_overrun_flag();
}
Если с UART работать без прерывания, то нужно либо нагло вырубить прерывание таймера, либо разрешить вложенные. Я с вложенными не дружу
Составить ответ | Вернуться на конференцию
Ответы