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

 
 
> ATxmega128A1 USART, как задействовать все порты
NikP
сообщение Apr 10 2012, 10:43
Сообщение #1


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

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Возникла необходимость опрашивать 6 устройств по USART, выбрали ATxmega128A1, т.к. по описанию очень похоже на то что надо. Опыта работы с ним нет, сроки жмут, так что читаю даташит (к сожалению, с английским слабо, идет медленно) и параллельно задаю вопросы .
1. В ДШ написано, что имеется 8 одинаковых устройств (Eight Identical USART peripherals). Насколько они независимы? Т.е. можно ли устанавливать на каждый порт свою скорость обмена, или эти установки одни для всех?
2. Как влияет чтение -запись в одном канале на работу других? В том смысле, что возникающее прерывание при , например , приеме пакета данных в одном канале будет "тормозить" работу других и возникнут пропуски информации, или нет?.
Поделитесь опытом , если можно рабочие примеры или ссылки на такие . Я конечно скачал с сайта Atmel примеры , но дается тяжко, слишком большой объем. Мне бы что покороче , но так чтобы понятно было.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Юрий_СВ
сообщение Apr 10 2012, 11:51
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Многое уже сказано выше. В дополнение могу поделиться своей функцией настройки передатчика УАПП.
CODE
void TX_On() // Включить передатчик УАПП
{
USARTx_BRR=0x01A1; // делитель формирователя битового интервала
// DIV_Mantissa[11:0]=0x01A // целая часть делителя USART
// DIV_Fraction[3:0] =0x1 // дробная часть делителя USART
// т.к. максимальная битовая частота УАПП
// в 8/16 раз (определяется битом OVER8 в регистре USARTx_CR1)
// меньше частоты синхронизации шины ввода/вывода
// соответсвенно дробная часть включает до 8 или 16 частей
// т.е. дробная часть указывается в восьмых или шестнадцатых долях
// битовая частота = частота синхронизации / (8 * (2-OVER8) * делитель)
// для скорости 57600 при частоте синхронизации шины 24 МГц:
// DIV_Mantissa[11:0]=26
// DIV_Fraction[3:0] = 1
// т.е. делитель=26,0625 для OVER8=0
// можно считать и по-другому (по крайней мере для OVER8=0)
// USARTx_BRR=частота шины/битовую частоту

USARTx_CR2=0x0000;
// LINEN=0 // режим LIN (0 - выкл)
// STOP[1:0]=00 // кол-во стоп-битов (00-1)
// CLKEN=0 // разрешение вывода синхронизации (0 - выкл)
// CPOL=0 // полярность вывода синхронизации (не используется)
// CPHA=0 // фаза вывода синхронизации (не используется)
// LBCL=0 // импульс синхронизации по выдаче последнего бита (не используется)
// LBDIE=0 // разрешение прерываний по сигналу обрыв в режиме LIN (не используется)
// LBDL=0 // длина сигнала обрыв в режиме LIN (не используется)
// ADD[3:0]=0000 // адрес узла в мультипроцессорном режиме (не используется)

USARTx_CR3=0x0000;
// ONEBITE=0 // ? кол-во выборок на бит 0 - 3 выборки, 1 - 1 выборка
// CTSIE=0 // разрешение прерывание по CTS (0 - выкл)
// CTSE=0 // разрешение управление потоком по CTS (0 - выкл)
// RTSE=0 // разрешение управление потоком по RTS (0 - выкл)
// SCEN=0 // режим работы со смарткартами (0 - выкл)
// NACK=0 // разрешение посылки NACK при ошибках
// в режиме работы со смарткартами (0 - выкл)
// HDSEL=0 // режим полудуплекса для однопроводного обмена (0 - выкл)
// IRLP=0 // режим низкого потребления режиме IrDA (0 - выкл)
// IREN=0 // режим IrDA (0 - выкл)
// EIE=0 // разрешение прерывание по ошибкам (0 - выкл)

USARTx_GTPR=0x0000;
// GT[7:0]=0x00 // длина защитного интервала при работе со смарткартами
// PSC[7:0]=0x00 // ?? входной делитель синхронизации (00 или 01)
// описан только для IrDA и смарткарт
// проверено: в режиме обычного асинхронного УАПП
// поле PSC[7:0] на передачу не влияет

USARTx_CR1=0x2008;
// OVER8=0 //
// UE=1 // разрешение работы УАПП (1 - разрешён)
// (разрешает входной делитель и выходы)
// M=0 // длина слова (0 - 8 бит, 1 - 9 бит)
// WAKE=0 // выбор события для просыпания (не используется)
// PCE=0 // разрешение проверки чётности (0 - выкл)
// PS=0 // выбор режима проверки чётности
// PEIE=0 // разрешение прерывания по ошибкам чётности (0 - выкл)
// TXEIE=0 // разрешение прерывания по опустошению (0 - выкл)
// регистра данных передачи
// TCIE=0 // разрешение прерывания по окончанию передачи (0 - выкл)
// RXNEIE=0 // разрешение прерывания по приёму (0 - выкл)
// IDLEIE=0 // разрешение прерывания по состоянию покоя в линии (0 - выкл)
// TE=1 // разрешение передатчика
// RE=0 // разрешение приёмника
// RWU=0 // ??
// SBK=0 // передача слова "обрыв"
}


Сообщение отредактировал IgorKossak - Apr 10 2012, 14:09
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 01:38
Рейтинг@Mail.ru


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