Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7X256. Проблема с чтением входного сигнала контроллером PIO
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aurochs
Уважаемые специалисты!
Помогите пожалуйста!

Не могу прочитать входной сигнал контроллером PIO.
Прследовательность действий следующая:
1. Подаю тактовую, прописывая 1 в бит 2 регистра PMC_PCER(для контроллера А)
2. Запрещаю работать линии как выход, для чего устанавливаю 1 в соответствующем бите регистра PIO_ODR
3. Разрешаю управление линией контроллером PIO, для чего устанавливаю 1 в соответствующем бите регистра PIO_PER
4. Читаю регистр PIO_PDSR с надеждой получить искомое значение, но там в соответствующем бите все время торчит 1.
Что я не так делаю? help.gif
Попутно хочу заметить, что если запрограммировать линию под работу с переферийным устройством (а конкретно модемом), то этот входной модемный сигнал читается без вопросов.

Заранее благодарен за любую помощь.
Сергей Борщ
Цитата(Aurochs @ Nov 10 2007, 12:18) *
Что я не так делаю?
Да в этой последовательности на первый взгляд все правильно. Может где-то дальше записанные вами значения затираются? Или вы подаете сигнал на одну ногу, а читаете другую?
Leen
пин в самах должен читаться всегда - вне зависимости от того разрешен выход, или нет, перенаправлен вывод на периферию или нет. Можно попробовать сначала обновить мануал с сайта атмела (может, там новые эраты появились), а потом - дергать ногой в режиме выхода и после этого читать (с задержкой на установку уровня) и смотреть вольтметром.
Aurochs
Цитата(Сергей Борщ @ Nov 10 2007, 14:48) *
Да в этой последовательности на первый взгляд все правильно. Может где-то дальше записанные вами значения затираются? Или вы подаете сигнал на одну ногу, а читаете другую?


Да я уже и в отладчике вручную n-ое количество раз пытался это делать, а результат - все тот же...

Цитата(Leen @ Nov 10 2007, 14:59) *
пин в самах должен читаться всегда - вне зависимости от того разрешен выход, или нет, перенаправлен вывод на периферию или нет. Можно попробовать сначала обновить мануал с сайта атмела (может, там новые эраты появились), а потом - дергать ногой в режиме выхода и после этого читать (с задержкой на установку уровня) и смотреть вольтметром.


Когда я разрешаю работу пина на выход, то читается уже не 1, а значение, которое я прописываю.
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1.
Документация тоже свежая и ничего по этому поводу не нашел...
Leen
Цитата(Aurochs @ Nov 11 2007, 04:11) *
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1.
А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все...
Сергей Борщ
Цитата(Aurochs @ Nov 10 2007, 20:11) *
И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояно читается 1.
А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса.
О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках?
DASM
Дурацкий совет-вопрос, но на ново компе даташита не открыть - а тактирование перефирии вообще включено ?
Aurochs
Цитата(Leen @ Nov 10 2007, 20:21) *
А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все...


Вряд ли это приемлемо. К сожалению входных сигналов в проекте будет далеко не один и, как я понимаю для таких целей можно будет задействовать только входные периферийные линии.
Да и должен же быть способ решить эту проблему без жертв и разрушений... laughing.gif

Цитата(Сергей Борщ @ Nov 10 2007, 20:51) *
А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса.
О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках?


Я же говорю, что когда перепрограммирую линию как периферийную, то линия читается нормально.

Цитата(DASM @ Nov 10 2007, 20:54) *
Дурацкий совет-вопрос, но на ново компе даташита не открыть - а тактирование перефирии вообще включено ?


Да вроде как включено. Может еще чего надо включить?
DASM
Ну не знаю тогда.. может чего из серии глупых ошибок ? Например PCER |= 2 а не PCER |= (1 << 2) ?
Leen
Вот-вот.. Давно кому-нибудь пора произнести коронную фразу: код в студию!
DmitryM
А на такую строку в errata обращали внимание???

41.2.4.3 PIO: Drive Low NRST, PA0-PA30 and PB0-PB26
When NRST or PA0 - PA30 or PB0 - PB26 are set as digital inputs with pull-up enabled, driving
the I/O with an output impedance higher than 500 ohms may not drive the I/O to a logical zero.
Problem Fix/Workaround
Output impedance must be lower than 500 ohms.
Aurochs
Цитата(DmitryM @ Nov 11 2007, 15:42) *
А на такую строку в errata обращали внимание???

41.2.4.3 PIO: Drive Low NRST, PA0-PA30 and PB0-PB26
When NRST or PA0 - PA30 or PB0 - PB26 are set as digital inputs with pull-up enabled, driving
the I/O with an output impedance higher than 500 ohms may not drive the I/O to a logical zero.
Problem Fix/Workaround
Output impedance must be lower than 500 ohms.


Большое спасибо! a14.gif Несколько раз просматривал errata, но, как по закону подлости, этот абзац не заметил. Похоже, что именно в этом и кроется причина.
Я вообще-то программист и еще новичок в ARM, и полагал, что я просто неправильно программировал контроллер PIO. Буду разбираться с разработчиком платы.
Когда разберемся - обязательно доложу.
Сергей Борщ
Цитата(Aurochs @ Nov 11 2007, 19:00) *
Буду разбираться с разработчиком платы.
Попробуйте для начала просто выключить Pull-up. А я ведь предлагал убедиться, что сигнал таки доходит wink.gif
Aurochs
Цитата(Сергей Борщ @ Nov 11 2007, 23:06) *
Попробуйте для начала просто выключить Pull-up. А я ведь предлагал убедиться, что сигнал таки доходит wink.gif


К сожалению, простое отключение режима pull-up не помогает.
Но проблема полностью решена изменением номиналов нагрузочных резисторов.

Спасибо всем участникам обсуждения!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.