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

 
 
> Параллельное использование нескольких 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 1 2011, 09:58
Сообщение #2


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

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



Вот код main, здесь только инициализация Uartoв производится и постоянный опрос камеры.

CODE
int main(void)
{

// -- Заполняем массив состояний камер значениями 0x04(Камера выключена) --------
for(i=1; i<6; i++)
{
Status[i] = 0x04;
}
// ------------------------------------------------------------------------------

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

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

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

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

CountVK++; // Увеличение счетчика номера камеры
}



А это инициализация одного из Usartoв.

CODE
void ConfigureUsartReverse(void)
{
#define MODE_ASYNCHRONOUS (AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT)

const Pin pinsUsart[] = {USART_REVERSE_TXD, USART_REVERSE_RXD};

PIO_Configure(pinsUsart, PIO_LISTSIZE(pinsUsart));

PMC_EnablePeripheral(USART_REVERSE_ID);

USART_Configure(USART_REVERSE, MODE_ASYNCHRONOUS, 115200, BOARD_MCK);

// Configure the interrupt
AIC_ConfigureIT(USART_REVERSE_ID, AT91C_AIC_PRIOR_HIGHEST, ISR_UsartReverse);
AIC_EnableIT(USART_REVERSE_ID);

// Enable receiver & transmitter
USART_SetReceiverEnabled(USART_REVERSE, 1);
USART_SetTransmitterEnabled(USART_REVERSE, 1);
}


Правда я думаю я в прерываниях не до конца разобрался, поэтому так и выходит, что либо они все время срабатывают, либо не работают.

Еще возник вопрос, думаю сделать ретрансляцию через PDC, чтобы не загружать процессор. Правда в даташите на контроллер немного написано, да и примеров для работы с PDC под этот контроллер нет. Может кто посоветует пример для другого какого, чтобы я мог разобраться?

Сообщение отредактировал IgorKossak - Mar 3 2011, 15:18
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   Вот начал переделывать программу, чтобы использова...   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 9 2011, 17:51
- - 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 Текстовая версия Сейчас: 21st July 2025 - 12:00
Рейтинг@Mail.ru


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