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

 
 
 
Reply to this topicStart new topic
> UART через PDC в AT91RM9200
Renik
сообщение Oct 23 2007, 04:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 29-05-07
Пользователь №: 28 025



Привет всем.

Есть платка от аргуссофта 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 берет из памяти за одну транзакцию?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 05:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



PDC, по идее, должен брать по 2 байта на символ для 9-бит режима UART.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 23 2007, 12:54
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(aaarrr @ Oct 23 2007, 09:52) *
PDC, по идее, должен брать по 2 байта на символ для 9-бит режима UART.


USART передает байт данных в различных форматах, но всегда единицей информации длины для него будет 1 байт. Соответственно и PDC должен работать с байтовыми буферами.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 13:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Не поленился даже проверить. В 9-бит режиме PDC выбирает 2 байта на символ.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 23 2007, 16:13
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



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


Прошу пардона. А что это за 9-битный режим, если не секрет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 16:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Режим с девятью битами данных, несколько экзотичный. Включается битом MODE9 в USART_MR.
О работе PDC этом режиме в документации упомянуть забыли, видимо посчитав это очевидным.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 23 2007, 16:28
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(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.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 16:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff @ Oct 23 2007, 20:28) *
Да вот вычитал у Atmel (doc1354.pdf): p.105

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

С UART'ом, кстати, через PDC на них было крайне неудобно работать - как только кончался буфер (а он был один) приходилось начинать пляски с бубном, переключая прием на прерывания и перепрограммируя в это время PDC.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 23 2007, 17:01
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



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

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


Про старые процессоры - это правильно. Но ведь у спросившего коллеги в этом режиме PDC тоже не работает? Поэтому, мне думается, что mode9 с pdc и в новых процессорах может не дружить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2007, 17:18
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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

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

Завесить контроллер при помощи PDC, по-моему, можно только записав с его помощью данные не по тому адресу, т.е. при неправильной конфигурации PDC.
Go to the top of the page
 
+Quote Post
Renik
сообщение Oct 24 2007, 04:35
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 29-05-07
Пользователь №: 28 025



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


Я понимаю что PDC в 9-битном режиме UART должен брать по 2 байта. НО что-то не работает пока.(
Можно взглянуть на работающую программу?
Go to the top of the page
 
+Quote Post
Renik
сообщение Nov 7 2007, 13:37
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 29-05-07
Пользователь №: 28 025



Вот листинг программы которая по идее должна посылать в порт через ПДП 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;" посылки в порт идут...
В чем может быть дело?
Go to the top of the page
 
+Quote Post

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

 


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


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