Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART через PDC в AT91RM9200
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Отладочные платы
Renik
Привет всем.

Есть платка от аргуссофта AS9200.
В datasheet на микроконтроллер написано, что предусмотрен режим ПДП для работы с последовательным портом. Также написано что формат обмена PDC может быть разным: «Depending on the type of transfer (byte, half-word or word), the memory pointer is incremented by 1, 2 or 4, respectively for peripheral transfers…».

Настраивал UART в 9-битный режим через PDC и контроллер завис.
Однако, при настройке в восьмибитный режим через ПДП - передача работала, равно как и при настройке в 9-битный режим без ПДП.

В чем может быть трабл? По сколько битов PDC для UART берет из памяти за одну транзакцию?
aaarrr
PDC, по идее, должен брать по 2 байта на символ для 9-бит режима UART.
sergeeff
Цитата(aaarrr @ Oct 23 2007, 09:52) *
PDC, по идее, должен брать по 2 байта на символ для 9-бит режима UART.


USART передает байт данных в различных форматах, но всегда единицей информации длины для него будет 1 байт. Соответственно и PDC должен работать с байтовыми буферами.
aaarrr
Цитата(sergeeff @ Oct 23 2007, 16:54) *
USART передает байт данных в различных форматах, но всегда единицей информации длины для него будет 1 байт. Соответственно и PDC должен работать с байтовыми буферами.

Не поленился даже проверить. В 9-бит режиме PDC выбирает 2 байта на символ.
sergeeff
Цитата(aaarrr @ Oct 23 2007, 17:30) *
Не поленился даже проверить. В 9-бит режиме PDC выбирает 2 байта на символ.


Прошу пардона. А что это за 9-битный режим, если не секрет?
aaarrr
Цитата(sergeeff @ Oct 23 2007, 20:13) *
А что это за 9-битный режим, если не секрет?

Режим с девятью битами данных, несколько экзотичный. Включается битом MODE9 в USART_MR.
О работе PDC этом режиме в документации упомянуть забыли, видимо посчитав это очевидным.
sergeeff
Цитата(aaarrr @ Oct 23 2007, 20:21) *
Режим с девятью битами данных, несколько экзотичный. Включается битом MODE9 в USART_MR.
О работе PDC этом режиме в документации упомянуть забыли, видимо посчитав это очевидным.


Да вот вычитал у Atmel (doc1354.pdf): p.105
Each USART channel is closely connected to a corresponding Peripheral Data Controller
channel. One is dedicated to the receiver. The other is dedicated to the transmitter.
Note: The PDC is disabled if 9-bit character length is selected (MODE9 = 1) in US_MR.
aaarrr
Цитата(sergeeff @ Oct 23 2007, 20:28) *
Да вот вычитал у Atmel (doc1354.pdf): p.105

doc1354 - это даташит на AT91M40800 и его производные. Эти контроллеры относятся к предыдущему поколению, и PDC у них совсем другой.

С UART'ом, кстати, через PDC на них было крайне неудобно работать - как только кончался буфер (а он был один) приходилось начинать пляски с бубном, переключая прием на прерывания и перепрограммируя в это время PDC.
sergeeff
Цитата(aaarrr @ Oct 23 2007, 20:47) *
doc1354 - это даташит на AT91M40800 и его производные. Эти контроллеры относятся к предыдущему поколению, и PDC у них совсем другой.

С UART'ом, кстати, через PDC на них было крайне неудобно работать - как только кончался буфер (а он был один) приходилось начинать пляски с бубном, переключая прием на прерывания и перепрограммируя в это время PDC.


Про старые процессоры - это правильно. Но ведь у спросившего коллеги в этом режиме PDC тоже не работает? Поэтому, мне думается, что mode9 с pdc и в новых процессорах может не дружить.
aaarrr
Цитата(sergeeff @ Oct 23 2007, 21:01) *
Про старые процессоры - это правильно. Но ведь у спросившего коллеги в этом режиме PDC тоже не работает? Поэтому, мне думается, что mode9 с pdc и в новых процессорах может не дружить.

Я проверял на SAM7X - работает. PDC у него точно такой же, как и у RM9200. И предупреждений, подобных процитированному Вами, в документации ни у того, ни у другого нет.

Коллега Renik пишет:
Цитата
Настраивал UART в 9-битный режим через PDC и контроллер завис.

Завесить контроллер при помощи PDC, по-моему, можно только записав с его помощью данные не по тому адресу, т.е. при неправильной конфигурации PDC.
Renik
Цитата(aaarrr @ Oct 23 2007, 21:18) *
Я проверял на SAM7X - работает. PDC у него точно такой же, как и у RM9200. И предупреждений, подобных процитированному Вами, в документации ни у того, ни у другого нет.


Я понимаю что PDC в 9-битном режиме UART должен брать по 2 байта. НО что-то не работает пока.(
Можно взглянуть на работающую программу?
Renik
Вот листинг программы которая по идее должна посылать в порт через ПДП 9-битные символы, но не работает.((

Цитата
// ----- PIOB
#define PIOB_PER *(unsigned int *)0xFFFFF600
#define PIOB_PDR *(unsigned int *)0xFFFFF604
#define PIOB_OER *(unsigned int *)0xFFFFF610
#define PIOB_SODR *(unsigned int *)0xFFFFF630
#define PIOB_CODR *(unsigned int *)0xFFFFF634
#define PIOB_MDDR *(unsigned int *)0xFFFFF654

#define PMC_PCER *(unsigned int *)0xFFFFFC10

// ----- UART1
#define US_CR *(unsigned int *)0xFFFC4000
#define US_MR *(unsigned int *)0xFFFC4004
#define US_CSR *(unsigned int *)0xFFFC4014
#define US_BRGR *(unsigned int *)0xFFFC4020
#define US_IDR *(unsigned int *)0xFFFC400C

#define PDC_TPR *(unsigned int *)0xFFFC4108
#define PDC_TCR *(unsigned int *)0xFFFC410C
#define PDC_PTCR *(unsigned int *)0xFFFC4120

unsigned short int buffer;

void main()
{
PIOB_OER = 0xFFFFFFFF;
PIOB_MDDR = 0xFFFFFFFF;
PMC_PCER = 0xfffffffd;
PIOB_PDR = 0xFFFFFFF0;

US_MR = 0x000208C0; // Normal mode, 1 stop bit, no parity, async mode, 9 bits.

US_IDR = 0xffffffff; // Disable all USART interrupts.

US_BRGR = 42;

US_CR = 0x000000a0; // Disable receiver, disable transmitter.
US_CR = 0x0000010c; // Reset status bits, reset rx/tx.
US_CR = 0x00000050; // Enable receiver, enable transmitter.

buffer = 0x155;
PDC_PTCR = 0x100;

while(1){
PDC_TPR = (unsigned int) &buffer;
PDC_TCR = 0x001;

for (int i = 1; i<5535; i++){
PIOB_SODR = 0x01; //TEST_PIN;
PIOB_CODR = 0x01; //TEST_PIN;
}
}
}


При смене режима работы на 8-битный режим, то есть при замене строчки "US_MR = 0x000208C0;" на "US_MR = 0x000008C0;" посылки в порт идут...
В чем может быть дело?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.