реклама на сайте
подробности

 
 
> scmRTOS: Прерывание от UARTа, что-то не так...
Colobox
сообщение Jan 16 2008, 07:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 31-10-07
Пользователь №: 31 901



Доброго времени суток!
Начал юзать scmRTOS v.3, написал простенькую тест-прогу с применением UART-прерывания:
....
#define scmRTOS_ISRW_TYPE TISRW_SS
...
#define scmRTOS_CONTEXT_SWITCH_SCHEME 0
...
#define OS_INTERRUPT __interrupt __raw
...
OS_PROCESS void TProc1::Exec()//sys tick=6 ms
{
for(;;)
{
LED1=1;//горит
Sleep(60);
LED1=0;//не горит
Sleep(60);

}
}
...

#pragma vector = USART_RXC_vect
OS_INTERRUPT void RX(void)
{
//
OS::scmRTOS_ISRW_TYPE ISR;
U_Rx();
}
//-------------------------------------------------------------------------
void U_Rx(void)
{
LED2=1;
}
...
Так вот в чем проблема: запуск, светодиод 1 мигает с периодом менее 1 сек.- типа процесс 1 работает. При посылке байта в УАРТ светодиод 2 честно загорается, но! период миганий первого светодиода становится уже не менее 6 сек. Что же с процессом?! Аналогичная задачка с применением внешнего прерывания по-спаду к такому эффекту не приводит.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
_Sam_
сообщение Jan 16 2008, 10:04
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Проблема в том что вы из UDR не читаете и после посылки одного байта прерывание генерируется постоянно.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 16 2008, 10:05
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Colobox @ Jan 16 2008, 13:29) *
...
Так вот в чем проблема: запуск, светодиод 1 мигает с периодом менее 1 сек.- типа процесс 1 работает. При посылке байта в УАРТ светодиод 2 честно загорается, но! период миганий первого светодиода становится уже не менее 6 сек. Что же с процессом?! Аналогичная задачка с применением внешнего прерывания по-спаду к такому эффекту не приводит.

А флаг прерывания у вас сбрасывается? Если речь идет об AVR (не увидел, какой проц, пытаюсь догадаться), то у него, насколько помню, флаг прерывания сбрасывается путем чтения из регистра данных. Если все так, то у вас проц просто живет в прерывании - выходит, делает одну команду и снова туда...


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 16 2008, 10:11
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Вопрос не по scmRTOS, а по работе прерывания от USART, см. описание на микроконтроллер.
Цитата
When interrupt-driven data reception is used, the receive complete routine must read the received data from UDR in order to clear the RXC Flag, otherwise a new interrupt will occur once the interrupt routine terminates.
Итого при несброшенном RXC процессор продолжает обрабатывать прерывания друг за дружкой, успевая сделать по одной команде между выходом из прерывания и входом в новое.

А вот флаг от врнешнего прерывания по спаду сам сбрасывается при входе в обработчик, потому и проблем нет.
Добавьте
Код
//-------------------------------------------------------------------------
void U_Rx(void)
{
    (void)UDR; /* или, если ИАР такое не ест - unsigned char dummy = UDR; */
    LED2=1;
}

и всё должно затикать нормально.

Кстати, теги code придуманы для того, чтобы облегчить чтение кода. Если Вам нужна помощь, то именно Вы должны позаботиться о том, чтобы помогающему было легче разбираться.

Если, конечно, интересует результат. (С) Жванецкий


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Colobox
сообщение Jan 16 2008, 11:09
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 31-10-07
Пользователь №: 31 901



Большое спасибо всем ответившим! ...но как же сам не дошел?!- так все просто.
Уж точно, если ничо не идет- посмотри же в даташит, наконец. ...Да, проц - АтМега8.
Насчет тегов,- даже в голову не пришло. Извиняйте, второй раз в форум код пишу,-
в следующий раз не премину воспользоваться.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016