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

 
 
> Параллельное использование нескольких USART, Как настроить прерывания?
wmakc
сообщение Jan 31 2011, 10:33
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768



AT91C_BASE_US0->US_IER = AT91C_US_RXRDY; // 1
AT91C_BASE_US0->US_IER = AT91C_US_RXBUFF; // 2

1. Как я понял это прерывание срабатывает при появлении данных
2. А это при заполнении буфера

Если обмен данных идет по другому usart, то при первом случае прерывание не срабатывает, пока не закончится обмен. А при втором, прерывание вызывается всегда, даже когда нет обмена с этим usartом.

Мне нужно организовать передачу по 4 usartам.
1)По одному идет обмен с устройством. Для него должен быть минимальный приоритет.
2)По второму обмен с датчиком. При срабатывании датчика, должен происходить обмен с ним. У него максимальный приоритет.
3)По последним двум проводится ретрансляция данных.

Забыл написать контроллер Atmel At91sam9g20.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
wmakc
сообщение Feb 9 2011, 17:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768



Разобрался, прерывания нормально работают. Проблема в том, что у меня на одном UARTе висит камера, которую нужно постоянно опрашивать. Примерно раз в 10 секунд. Интерфейс 485, поэтому либо передача либо прием. С другого USARTа приходят команды управления камерой, поэтому когда они приходят, их нужно перенаправлять на нее. После этого камера отсылает ответ. Так вот ответ работает по прерыванию. Проблема возникает как я понимаю из-за того, что камера иногда может отсылать посылки с задержками, при этом контроллер, так как нет прерывания возвращается в функцию опроса. Мне бы сделать так, чтобы после обработки прерывания он возвращался не в точку, где закончил выполнение программы, а куда-нибудь в другое место.

CODE
int main(void)
{
// -- Заполняем массив состояний камер значениями 0x04(Камера выключена) --------
for(i=1; i<6; i++)
{
Status[i] = 0x04;
}
// ------------------------------------------------------------------------------
// Status[1] = 0x01;
GetNumberBLVS(); // Получение номера БЛВС
PIO(); // Включаем порты управления передатчиками и приемниками


ConfigureUsartDirect(); // Конфигурация Usart, ретранслирующего от ПЭВМ к БЛВС и ВК
ConfigureUsartReverse(); // Конфигурация Usart, ретранслирующего от ВК, БЛВС к ПЭВМ
ConfigureUsartVk(); // Конфигурация Usart для работы с ВК
ConfigureUsartAlarm(); // Конфигурация Usart для работы со средством обнаружения

ConfigurePDC(); // Конфигурация PDC

USART_DIRECT->US_IER = AT91C_US_RXRDY; // Включение прерываний по USART_DIRECT
USART_REVERSE->US_IER = AT91C_US_RXRDY; //AT91C_US_ENDRX;//AT91C_US_RXBUFF;
// Включение прерываний по USART_REVERSE
USART_VK->US_IER = AT91C_US_RXRDY;//AT91C_US_RXRDY; // Включение прерываний по USART_VK
USART_ALARM->US_IER = AT91C_US_ENDRX;//AT91C_US_RXRDY; // Включение прерываний по USART_ALARM

unsigned char CountVK = 1; // Счетчик номера опрашиваемой камеры

while(1)
{
CommandVk = 0x00;

if(CountVK==6) //Сбрасываем счетчик, когда опрошено 5 камер
{
CountVK=1;
}

USART_VK->US_IDR = AT91C_US_RXRDY;
Query(NumBLVS, CountVK); //В этой функции проводится опрос камер
USART_VK->US_IER = AT91C_US_RXRDY; //А сюда мне бы надо попасть после обработки ответа от камеры

CountVK++; // Увеличение счетчика номера камеры
}
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- wmakc   Параллельное использование нескольких USART   Jan 31 2011, 10:33
- - aaarrr   Цитата(wmakc @ Jan 31 2011, 13:33) Если о...   Jan 31 2011, 10:49
|- - wmakc   Цитата(aaarrr @ Jan 31 2011, 13:49) Это, ...   Feb 1 2011, 08:06
- - Aaron   1. если у вас прямо так жёстко надо прервать обраб...   Feb 1 2011, 08:23
- - wmakc   Дело в том, что с датчиком просто идет обмен данны...   Feb 1 2011, 08:37
- - Aaron   поподробнее опишите, что ли. что и как используетс...   Feb 1 2011, 09:04
- - wmakc   Вот код main, здесь только инициализация Uartoв пр...   Feb 1 2011, 09:58
- - wmakc   Вот начал переделывать программу, чтобы использова...   Feb 2 2011, 16:31
- - Aaron   я сам PDC не использую, потому как ещё не было так...   Feb 3 2011, 11:55
- - wmakc   Разобрался в инициализации PDC. Завтра выложу, что...   Feb 3 2011, 17:42
- - wmakc   Сделал PDC для всех используемых USARTов. Немного ...   Feb 8 2011, 15:18
|- - DmitryM   Цитата(wmakc @ Feb 8 2011, 18:18) Возникл...   Feb 8 2011, 18:01
- - wmakc   Продолжаю писать программу, столкнулся с такой про...   Feb 25 2011, 19:18
- - wmakc   Сделал так чтобы контроллер реагировал на прерыван...   Mar 3 2011, 15:14
- - Aaron   тут вопрос даже не в том, тратит PDC ресурс МК (не...   Mar 5 2011, 10:03
- - wmakc   Цитата(Aaron @ Mar 5 2011, 13:03) тут воп...   Mar 10 2011, 15:39


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

 


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


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