2016-09-16 7 views
0

Я пытаюсь создать проход UART для одного из моих проектов. Но я не мог понять, как я должен связывать контакты микроконтроллера. Я использую встроенный C & Keil для программирования.Как создать UART Pass в микроконтроллере

  1. Я использую микроконтроллер NXP p89lpc954 (на основе 8051) для этой цели.
  2. Мое требование, как показано ниже на рис enter image description here

  3. Я контрольного датчика через порт UART. При нормальной работе программа микроконтроллера взаимодействует с датчиком через порт UART-1. Но когда я подключаю порт UART-0 микроконтроллера к хост-компьютеру, я хочу, чтобы хост-компьютер напрямую связывался с датчиком, создав пропуск между UART-0 & UART-1.

Может ли кто-нибудь предложить любую идею о том, как мы можем достичь этого.

+0

Есть много талантов в переполнении стека, но я думаю, что вы получите лучшие ответы в другом месте. Вы можете попробовать [Электротехнический стековый обмен] (http://electronics.stackexchange.com/) и вернуться к переполнению стека, когда у вас есть вопросы программирования и разработки. Я недостаточно разбираюсь в этой теме, но она кажется довольно широкой, и она может не отвечать на кворум, такой как сеть Stack Exchange. – jww

+2

@jww: ... кроме этого это * есть * как проблема программного обеспечения, что Vinod * думает * является аппаратной проблемой. – Clifford

+0

Непонятно, почему компьютер не может быть подключен непосредственно к датчику. Вы можете использовать аппаратное обеспечение, чтобы решить, кто с ним разговаривает. Почему данные должны проходить через микроконтроллер? – Lundin

ответ

0

Я бы рекомендовал посмотреть, есть ли проход UART через бит в регистре конфигурации UART или в регистре маршрутизации. Помимо этого, я просто использовал бы пролетные провода от ПК UART к датчику UART.

4

Обычно невозможно напрямую и прозрачно подключать один UART к другому. Вам необходимо будет предоставить соответствующее программное обеспечение для передачи данных с одного UART на другой.

Если оба UART-устройства работают с одинаковой скоростью передачи данных, это может быть относительно простым: вы можете прочитать регистр Rx из одного UART и записать значение в регистр TX другого (и наоборот для двунаправленных сообщений) , Если вы реализуете это с помощью обработчиков прерываний UART, он может быть более или менее прозрачным для другого кода, запущенного на MCU. Чтобы это работало без буферизации, вы должны быть уверены, что можете перенести данные с одного UART на другой до того, как произойдет переполнение оборудования - ваше оборудование может иметь или не иметь FIFO, поэтому аппаратная буферизация может быть такой же, как Rx регистр и регистр сдвига ввода (два байта). Если есть другие программные операции, которые могут помешать этой операции, вам все равно может понадобиться буферизация.

Если скорость передачи данных различна, вам необходимо будет обеспечить буферизацию, по крайней мере, до более медленного двух портов, и вы не сможете передавать данные с быстрого порта на медленный, должны быть паузы в поток данных для предотвращения исчерпания буфера.

На некоторых устройствах можно значительно снизить накладные расходы на программное обеспечение, используя передачи DMA (вряд ли с вашей стороны я представляю).

Однако вы это сделаете, вам по-прежнему понадобится программное обеспечение для включения и настройки UART - нет сквозного решения с аппаратным или простым «штыревым контактом».

+0

@dwelch: Как следует из названия, в * асинхронных * сообщениях небольшое рассогласование часов на самом деле не проблема.Приемник синхронизируется на каждом стартовом бите, используя его для определения точки отсчета для следующего кадра (бит данных, дополнительный бит четности, стоп-бит), поэтому потоковая передача возможна даже с тактовой частотой, несоответствующей на +/- 5% для 10-битного кадра N, 8,1 - приемник просто работает с частотой кадров * передатчика. Два рассматриваемых UART находятся в * таком же микроконтроллере и, следовательно, (скорее всего) тактовой домене, поэтому потенциально не требуется буферизация для одинаковой скорости передачи в бодах. – Clifford

+0

Фактически, тот факт, что у них одинаковые часы *, не обязательно означает, что он будет работать без буферизации. Если отправитель работает немного быстрее, но все еще находится в пределах диапазона приема, он может производить больше символов за единицу времени, чем MCU может повторно отправить на свое представление о правильном времени. Однако, если входящий канал остается заполненным, даже буферизация не будет устранять проблему, поскольку буфер будет в конечном итоге переполняться. Конечно, большинство приложений не поддерживают постоянный поток трубы, а скорее имеют всплески данных с промежутками между ними. –

+0

@ChirsStratton: Я еще раз объясню: стоповый бит - это время повторной синхронизации следующего кадра, по сути, это вынужденный пробел. UART выполняет повторную синхронизацию на переднем фронте стартового бита и устанавливает, чтобы точка выборки достигла номинального центра каждого бита для следующего кадра. Часовые часы UART работают быстрее, чем скорость передачи битов, обычно 5x, чтобы быть в пределах 10% от битового центра, что дает широкий допуск к рассогласованию в битовой скорости. – Clifford

 Смежные вопросы

  • Нет связанных вопросов^_^