Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Данные в UART1 шлются в прерывании таймера. Так приходится делать, потому что их надо послать в священный момент времени, таймслот.
Проблема в том, что данные, передаваемые UART1, портятся. Это происходит, по моим понятиям, потому, что в момент копирования строчки в функцию посылки в УАРТ может придти прерывание таймера, и начнется отсылка недокопированной строчки.
Вопрос: можно ли как-то запретить прерывание таймера на время копирования строчки, не потеряв само прерывание.
__disable_interrupt не работает.
Запрешение в VIC похоже сбрасывает прерывание.
Может, еще какие-то способы есть?
ОС нет. IAR4.30A
Код обработчика таймера
void TIMER1Interrupt (void)
{
T1IR |= (1 << 0);//reset irq flag
T1TCR = 0; //stop timer. TIMER1 is enabled again at EINT2, when 1PPS comes
if(datardy == 1)
{
Send1String(mt2send);
datardy = 0;
}
Led2Toggle();
VICVectAddr = 0;
}
Сорри за путаное изложение....мозги в кучку...