Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; 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 работать без прерывания, то нужно либо нагло вырубить прерывание таймера, либо разрешить вложенные. Я с вложенными не дружу

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

Ответы


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

Сообщение:

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

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

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

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