Здравствуйте. Столкнулся со следующей проблемой при работе с USART-ом:
Собрал на нем интерфейсную плату USB - USART. Прошивка написана так, что при подключении платы к USB в системе появляется виртуальный serial порт, в который можно обычными
способами писать читать из него. Соотвтественно прошивка всегда ждет данных от PC (через BULK точку) и высылает их сразу в UART, и паралельно ждет данные с UART-а и отсылает их
по BULK-точке на PC. В общем обычная схема USB-Serial.
Проблема в следующем, вход RXD0 микроконтроллера у меня берется не напрямую от серийного устройства а через обычный 8 в 1 демультиплексор,
у которого соответственно есть три адресных пина АBC. В демультиплексоре использваны только несколько пинов, остальные - на землю. Итого, если при включении питания схема правильно проводит RX от серийного устройства к RXD0 пину микроконтроллера - проблем никаких не возникает, все работает прекрасно, данные из USART-а вычитываются прошивкой и далее как описано выше.
Однако, если при подаче адреса на демультиплексор например так, что кратковременно на RXD0 поступит 0 от заземленных входов то... вот тут и начинаются странности. Если после этого снова подать правильный адрес на демультиплексор , т.е. RX теперь будет правильно проходить до RXD0 пина - то на ножке RXD0 микроконтроллер удерживает уровень 0 - уже вне зависимости от того что имеем на выходе демультиплексора - этот порт притягиватся к земле самим микроконтроллером. Со стороны пошивки такое состояние USARTa выглядит как постоянная ошибка FRAME - т.е. постоянный 0 уходит и в перефирию USART-a и соответственно от этого и ошибка FRAME.
Уже перепробовал кажется все, перечитал документацию и все регистры относительно PIO и USART - результат один, что не делаю (ресет ресивера, вкл/выкл ресивера, переконфигурирование RXD0 пина во вход или выход и обратно в режим USARTa) - RXD0 остается утянутым на землю и соотвтественно чтение RX не срабатывает. Что характрено - если теперь переконфигурировать RXD0 пин как вход, то по прежнему тестером измеряется 0 на ножке RXD0 (!) хотя в обычном состоянии напряжение на пинах микроконтроллера сконфигурированых как вход имеет значения характреные при измерении в Z-состоянии.
Пробовал выпаивать демультиплексор - подавая RX напрямую и руками коротил кратковременно на землю - все повторяется в точности, т.е. демультиплексор как возможная проблема - отпал - это не выход демультиплексора имеет 0, это микроконтроллер установил его на ножке RXD0.
Наскольно я понимаю это либо какая-то защита от перегрузки или еще что-то, в общем лечится только выкл/вкл питания схемы.
Не исключаю что я что-то упустил, может есть возможность програмно сбросить такое "странное" состояние порта. Поскольку я меряю на ножке постоянный 0 и аналогично контроллер USART тоже читает 0 значит этот ноль устанавливается где-то внутри PIO контроллера. Только гле? У меня идеи закончились



Буду очень благодарен если кто поделится свом мнением на этот счет.
Сообщение отредактировал Albun - Jun 3 2009, 16:55