|
|
  |
AT91SAM7X256. Проблема с чтением входного сигнала контроллером PIO |
|
|
|
Nov 10 2007, 10:18
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Уважаемые специалисты! Помогите пожалуйста! Не могу прочитать входной сигнал контроллером PIO. Прследовательность действий следующая: 1. Подаю тактовую, прописывая 1 в бит 2 регистра PMC_PCER(для контроллера А) 2. Запрещаю работать линии как выход, для чего устанавливаю 1 в соответствующем бите регистра PIO_ODR3. Разрешаю управление линией контроллером PIO, для чего устанавливаю 1 в соответствующем бите регистра PIO_PER4. Читаю регистр PIO_PDSR с надеждой получить искомое значение, но там в соответствующем бите все время торчит 1. Что я не так делаю? Попутно хочу заметить, что если запрограммировать линию под работу с переферийным устройством (а конкретно модемом), то этот входной модемный сигнал читается без вопросов. Заранее благодарен за любую помощь.
|
|
|
|
|
Nov 10 2007, 18:11
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(Сергей Борщ @ Nov 10 2007, 14:48)  Да в этой последовательности на первый взгляд все правильно. Может где-то дальше записанные вами значения затираются? Или вы подаете сигнал на одну ногу, а читаете другую? Да я уже и в отладчике вручную n-ое количество раз пытался это делать, а результат - все тот же... Цитата(Leen @ Nov 10 2007, 14:59)  пин в самах должен читаться всегда - вне зависимости от того разрешен выход, или нет, перенаправлен вывод на периферию или нет. Можно попробовать сначала обновить мануал с сайта атмела (может, там новые эраты появились), а потом - дергать ногой в режиме выхода и после этого читать (с задержкой на установку уровня) и смотреть вольтметром. Когда я разрешаю работу пина на выход, то читается уже не 1, а значение, которое я прописываю. И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1. Документация тоже свежая и ничего по этому поводу не нашел...
|
|
|
|
|
Nov 10 2007, 18:21
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(Aurochs @ Nov 11 2007, 04:11)  И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояноо читается 1. А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все...
|
|
|
|
|
Nov 10 2007, 18:51
|

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

|
Цитата(Aurochs @ Nov 10 2007, 20:11)  И когда он задействован как периферийный, то тоже читается нормально. А как только перепрограммирую этот пин как чистый вход, то постояно читается 1. А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса. О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 10 2007, 19:15
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(Leen @ Nov 10 2007, 20:21)  А если так и сдклать? Понимаю, что это нехорошо, но все же? Ориентировать его как вход неиспользуемой периферии, да и все... Вряд ли это приемлемо. К сожалению входных сигналов в проекте будет далеко не один и, как я понимаю для таких целей можно будет задействовать только входные периферийные линии. Да и должен же быть способ решить эту проблему без жертв и разрушений...  Цитата(Сергей Борщ @ Nov 10 2007, 20:51)  А попадает ли входной сигнал на эту ногу? Может банальный непропай? Была похожая ситуация - когда касаюсь ноги осциллографом она прижимается к дорожке и сигнал виден. Как только отпускаю - контакт пропадает. С тех пор касаюсь щупом ножек в месте их выхода из корпуса. О какой конкретно ножке идет речь? Наблюдается ли подобная ситуация на других ножках? Я же говорю, что когда перепрограммирую линию как периферийную, то линия читается нормально. Цитата(DASM @ Nov 10 2007, 20:54)  Дурацкий совет-вопрос, но на ново компе даташита не открыть - а тактирование перефирии вообще включено ? Да вроде как включено. Может еще чего надо включить?
|
|
|
|
|
Nov 11 2007, 17:00
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(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. Большое спасибо!  Несколько раз просматривал errata, но, как по закону подлости, этот абзац не заметил. Похоже, что именно в этом и кроется причина. Я вообще-то программист и еще новичок в ARM, и полагал, что я просто неправильно программировал контроллер PIO. Буду разбираться с разработчиком платы. Когда разберемся - обязательно доложу.
|
|
|
|
|
Nov 15 2007, 09:20
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(Сергей Борщ @ Nov 11 2007, 23:06)  Попробуйте для начала просто выключить Pull-up. А я ведь предлагал убедиться, что сигнал таки доходит  К сожалению, простое отключение режима pull-up не помогает. Но проблема полностью решена изменением номиналов нагрузочных резисторов. Спасибо всем участникам обсуждения!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|