|
Дополнительный UART |
|
|
|
Jun 21 2006, 13:09
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032

|
Цитата(rezident @ Jun 21 2006, 17:40)  А программный UART не устраивает (вопрос чисто теоретический)? Ну честно говоря даже на задумывался. Делал раньше его, но тогда и UARTa на крисиалле не было совсем. Не думал что когда-то придется к этому вернуться. В принципе если есть возможность найти на LPC готовый код программного УАРТа, который с небольшими переделками реально воткнуть, то вообщем это хороший вариант. Насчет SPI->UART, есть готовые типа MAX3100, но с ними не работал. Смотрю я на них - они вроде бы включены слэйвом - так что получается их опрашивать постоянно надо - не лучше чем программый.
|
|
|
|
|
Jun 21 2006, 13:37
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032

|
Цитата(aaarrr @ Jun 21 2006, 18:15)  У MAX3100 на прием есть FIFO и прерывание, так что опрашивать постоянно не придется. С передачей несколько хуже, так как буферизация отсутствует, но если не нужно гнать большой поток - вполне нормальный вариант. Сорри, IRQ не заметил. Кстати буферизация выходная на один байт все равно получается есть? Регистра то два - буфер и шифтер. Значит непрерывная передача возможна.
|
|
|
|
|
Jun 21 2006, 14:08
|

Частый гость
 
Группа: Участник
Сообщений: 92
Регистрация: 26-06-04
Пользователь №: 192

|
ну вот мой софтверный уарт на 9600 при 4 сэмплах на бит. для LPC2138. алгоритм типа оверсемплинга. что там что уже не помню (давно делал и больше не возвращался), выдрал из проекта если заинтересует или чтото будет непонятно отвечу конкретно. p.s. там что-то лишнее, что может смутить - не обращай внимания  p.p.s да, все переменные там 32 битные
Сообщение отредактировал Romario - Jun 21 2006, 14:10
Прикрепленные файлы
uart.txt ( 4.54 килобайт )
Кол-во скачиваний: 144
|
|
|
|
|
Jun 21 2006, 14:08
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032

|
Цитата(rezident @ Jun 21 2006, 18:50)  Я указал "чисто теоретически" потому, что непосредственно с ARM я не работал. Но на MSP430 делал UART, используя функции Capture и Compare в режиме PWM таймера. Может тут тоже нечто подобное (аппартно-полупрограммное) замутить? ИМХО имеет смысл для RS485, т.к. все равно там полудуплекс. Да хватило бы таймера, можно и сделать. А разницы на 485 или 232 большой нет. Тем более что у меня и на 232 похоже будет полудуплекс. Вопрос теперь что проще - запрограммировать SPI или написать программный УАРТ.
|
|
|
|
|
Jun 21 2006, 14:21
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032

|
Цитата(Romario @ Jun 21 2006, 19:08)  ну вот мой софтверный уарт на 9600 при 4 сэмплах на бит. для LPC2138. алгоритм типа оверсемплинга. что там что уже не помню (давно делал и больше не возвращался), выдрал из проекта если заинтересует или чтото будет непонятно отвечу конкретно. p.s. там что-то лишнее, что может смутить - не обращай внимания  p.p.s да, все переменные там 32 битные Взял. Посмотрю. А почему 4? Я делал на 3 с мажоритарным выбором. Все равно 8дата+старт+стоп=10, с четностью 11, ну стартовый опрашивается в начале, в данные не попадает, пусть 9..10, умножить на 4=36...40 в 32 не помещаются? Или стоповый тоже надо проверять отдельно. Четность наверное тоже нужна.
|
|
|
|
|
Jun 21 2006, 14:37
|

Частый гость
 
Группа: Участник
Сообщений: 92
Регистрация: 26-06-04
Пользователь №: 192

|
Цитата Взял. Посмотрю. А почему 4? Я делал на 3 с мажоритарным выбором. Все равно 8дата+старт+стоп=10, с четностью 11, ну стартовый опрашивается в начале, в данные не попадает, пусть 9..10, умножить на 4=36...40 в 32 не помещаются? Или стоповый тоже надо проверять отдельно. Четность наверное тоже нужна. - почему 4? да так захотелось  можно было 2 но опасно. Мажоритарный сэмплинг и то что у меня там (а вернее модификация аппликухи от чипкона) немного разные вещи. При мажоритарной выборке не сохраняется предыстория (3 выборки, выбрал, определил бит и забыл) а алгоритм оверсемплинга ее требует. - твои цифры я не понял. 32 битные потому, что если, например, взять 8 битные то в операция сравнения компилер будет делать ненужные and 0xff а это всетаки ISR  вобщем пяток 32 битных переменных наверное не будет жалко  . p.s. еще оптимизацию включить обязательно и тогда эта isr'ка довольно компактная - я пытался переписать ее на asm но замучался и понял что выиграю совсем тьфу.
Сообщение отредактировал Romario - Jun 21 2006, 14:41
|
|
|
|
|
Jun 22 2006, 03:15
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(dmyl @ Jun 21 2006, 20:08)  Цитата(rezident @ Jun 21 2006, 18:50)  Я указал "чисто теоретически" потому, что непосредственно с ARM я не работал. Но на MSP430 делал UART, используя функции Capture и Compare в режиме PWM таймера. Может тут тоже нечто подобное (аппартно-полупрограммное) замутить? ИМХО имеет смысл для RS485, т.к. все равно там полудуплекс.
Да хватило бы таймера, можно и сделать. А разницы на 485 или 232 большой нет. Тем более что у меня и на 232 похоже будет полудуплекс. Вопрос теперь что проще - запрограммировать SPI или написать программный УАРТ. Вопрос тиражности изделия. Если изделие единичное, можно поставить дополнительную периферию. Хотя еще не факт, что програмно с ней проще будет работать, чем с программным uart. На LPC 60МГц можно сделать программный uart до скоростей 19200 достаточно просто. Для облегчения задачи завести Rx на пин, который может детектировать прерывание по заднему фронту. Можно uart сделать в fiq, а прерывания готовности приемника/передатчика сделать через программные прерывания и irq. Тогда критические секции не будут влиять на работу uart и добавлять джиттер. Цитата(acex2 @ Jun 21 2006, 23:01)  Если нет боязни пропустить важные данные или предусматривается работа запрос-ответ, то самым дешевым способом будет внешний мультиплексор. Имхо, самый дешевый способ - програмный uart. Стоимость ~ == строимости 3-4 часов работы программиста, единовременно.
--------------------
Пасу котов...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|