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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> UART с управлением паритета, Опциональная передача символа Mark и Space
aerolog
сообщение Apr 16 2009, 14:02
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 11-01-06
Пользователь №: 13 058



Доброе время суток!
Кто сталкивался в LPC210x с необходимостью управления битами паритета Mark и Space, для эмуляции 9-битного варианта передачи данных?
Пробовал делать путем ручного переключения этих битов и вылазит такая картина. В пошаговом режиме байты пересылаются нормально (отслеживаю по осцилу). Как только переходит в сплошной поток - то ли LPC не успевает переключаться, то ли еще что-то, но Mark и Space не изменяются.
Go to the top of the page
 
+Quote Post
meister
сообщение Apr 16 2009, 14:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(aerolog @ Apr 16 2009, 18:02) *
для эмуляции 9-битного варианта передачи данных


Хоть я и противник программных решений, но ИМХО, тут лучше сделать UART самому. Или вставлять паузы между символами "потока".
Go to the top of the page
 
+Quote Post
aerolog
сообщение Apr 16 2009, 15:06
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 11-01-06
Пользователь №: 13 058



Но ведь не хочется огород городить. В обычном COM порте работает такая штука. Даже в MSP есть. А тут вот такой "Кузьмич".
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 17 2009, 16:57
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Мне эта тема тоже интересна. Филипс как всегда "прорвался" и сделал офигенный супер - пуппер чип с UART по какому-то там стандарту, в результате чего сделал недоступными функции независимого управления девятым битом. Как результат, этот чип, похоже, нельзя использовать для реализации шины MDB, а как хотелось бы. Очень интересно, если из этого что-нибудь получится. Я делал подобные вещи на более простом UART на микроконтроллерах P16F628 Microchip. Правда, это не имеет отношения к ARM.

Кстати, насчёт сделать UART самому - если хотите изобретать велосипед, готовьтесь быть аутсайдером smile.gif Этот форум не для Вас.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Apr 17 2009, 17:45
Сообщение #5





Guests






Цитата(IgorMarx @ Apr 17 2009, 20:57) *
... Я делал подобные вещи на более простом UART на микроконтроллерах P16F628 Microchip. Правда, это не имеет отношения к ARM.
Кстати, насчёт сделать UART самому - если хотите изобретать велосипед, готовьтесь быть аутсайдером smile.gif Этот форум не для Вас.

По моему, Вы много на себя берете...
Для нормального программиста на МК - UART есть всегда. Вне зависимости от того, есть соответствующий аппаратный модуль или нет. Есть кварцевый генератор или используется встроенный, либо некалиброванный внешний. Программная реализация, нередко, занимает меньше места и работает надежнее, чем обслуживание встроенного UART-а. На тех же PIC-х я делал программый UART для всей линейки: PIC10-PIC12-PIC16, с автоподстройкой под текущую частоту генератора и c автоопределением скорости обмена от 4800 до 115200...
P.S. Если Вы никогда этого не делали и не знаете как (или делали один раз), то я бы на Вашем месте воздержался от оценок и советов на этом форуме.
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 17 2009, 19:00
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Цитата(@Ark @ Apr 17 2009, 21:45) *
P.S. Если Вы никогда этого не делали и не знаете как (или делали один раз), то я бы на Вашем месте воздержался от оценок и советов на этом форуме.


Я это делал на том же PIC16F628. Мне нужно было 2 порта. Второй порт я сэмулировал, используя второй таймер и внешнее перывание. По старт биту срабатывает внешнее прерывание, затем в обработчике запускается второй таймер, дальше защёлкивание битов идёт уже по таймеру. Второй таймер очень удобен, если хотите, чтобы вообще что-то получилось. Помучался долго и сумел реализовать скорость 115200 при частоте кварца 18.432 MHz, причем задача стояла, чтобы это работало именно в прерываниях.
В своё время я писал аппаратные реализации драйверов загрузки с магнитной лентой, причем с необходимостью синхронного вывода графики на некий экран.
У меня есть собственные реализации алгоритма шифрования AES-128, который при чтении с COM порта расшифровывает поток "на лету".
Тему я хорошо знаю, поэтому не советую заниматься этой ботвой, если только вообще нечем заняться.

Один раз, хм... А сколько раз нужно на швабру наступать, если не один?

aerolog, не мучайтесь с этим UARTом, @Ark прав, используйте CAPTURE регистры. Здесь готовое решение: http://www.nxp.com/acrobat_download/applic...s/AN10689_1.pdf

Сообщение отредактировал IgorMarx - Apr 17 2009, 19:13
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Apr 17 2009, 19:16
Сообщение #7





Guests






Цитата(IgorMarx @ Apr 17 2009, 23:00) *
Я это делал на том же PIC16F628...
Тему я хорошо знаю...

Я Вам еще раз предлагаю воздержаться от оценок и советов, поскольку тему реализации программного UART-а
Вы не знаете (без обид). В экстремальном случае все делается и на 4МГц и даже без использования таймеров...
Но это крайний случай... Я просто Вам ответственно могу заявить - для нормального программера не бывает такой ситуации - нет UART-а. UART есть всегда! По определению. laughing.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 17 2009, 19:25
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(aerolog @ Apr 16 2009, 17:02) *
В пошаговом режиме байты пересылаются нормально (отслеживаю по осцилу). Как только переходит в сплошной поток - то ли LPC не успевает переключаться, то ли еще что-то, но Mark и Space не изменяются.
Дело скорее всего в том, что там имеется FIFO, в которое попадают данные, но не бит управления четностью. Когда вы отлаживаете пошагово, байт успевает передаться и влияние FIFO незаметно. Надо отключить FIFO.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 17 2009, 19:59
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Споры - дело дурное. Каждый в любом случае останется при своём мнении. Очень интересно, получится ли управлять девятым битом. Сейчас мне заняться этим просто некогда, но если что-то выйдет, поделюсь. Соответственно, надеюсь, что тут будет опубликован результат, если у кого что получится.

P.S. А может, любезный @Ark найдёт решение? Спец же по портам smile.gif Будем ему благодарны smile.gif

aerolog, попробуйте, как говорит Сергей, отключить фифо и перед записью в THR выставлять требуемые значения битов Parity Select регистра LCR со включенным Parity Enable. Возможно перед этим нужно дожидаться, чтобы освободился буфер передатчика (установился бит THRE или TEMT (какой конкретно нужнопроверять).
Go to the top of the page
 
+Quote Post
meister
сообщение Apr 17 2009, 20:36
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Сергей Борщ @ Apr 17 2009, 23:25) *
Надо отключить FIFO.


Зачем же Вы плохое советуете?

Код
UART0 FIFOs are disabled. Must not be used in the application.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 17 2009, 20:46
Сообщение #11


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(meister @ Apr 17 2009, 23:36) *
Зачем же Вы плохое советуете?
Код
UART0 FIFOs are disabled. Must not be used in the application.

Имеется в виду установить Trigger level 0 (1 character or 0x01). Неоднократо обсуждалось.
Go to the top of the page
 
+Quote Post
meister
сообщение Apr 17 2009, 20:51
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(HARMHARM @ Apr 18 2009, 00:46) *
Имеется в виду установить Trigger level 0 (1 character or 0x01). Неоднократо обсуждалось.


Это скажется на передаче?
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 17 2009, 20:54
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Насчёт отключения FIFO. Вот вопрос: что будет, если в фифо несколько байт на передачу, а вы измените настройку Parity? Повлияет ли это на последующую передачу байта из FIFO, или это повлияет на данные, которые вы толкнёте в FIFO после этого? Мне кажется, скорее первое, чем второе.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 17 2009, 21:12
Сообщение #14


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(meister @ Apr 17 2009, 23:51) *
Это скажется на передаче?

Нет.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Apr 17 2009, 22:48
Сообщение #15





Guests






Цитата(IgorMarx @ Apr 17 2009, 23:59) *
... А может, любезный @Ark найдёт решение? Спец же по портам smile.gif Будем ему благодарны smile.gif


Если верить тому, что написано в ДШ на этот камень, его UART совместим по регистрам со стандартом 16550. В PC такой же UART стоит на COM-портах (точнее, стоял). Известная вещь. Берем описание и читаем...

Перед выбором режима управления четностью рекомендуется очистить очередь приемника и передатчика - установкой 1-го и 2-го бита соответственно в регистре управления буферизацией...
Кстати, управлять напрямую значением девятого бита нельзя, можно лишь выбрать один из режимов - контроль четности, контроль нечетности, нет контроля. Если в последнем случае задать 2 стоп бита, то девятый бит всегда будет 1...

Итого: если хотите самостоятельно управлять девятым битом, придется FIFO отключить совсем. Перед передачей каждого байта выбирать режим четность/нечетность таким образом, чтобы девятый бит принимал нужное значение... Короче - геморрой. Проще сделать программно...
Go to the top of the page
 
+Quote Post

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

 


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


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