Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужен совет
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
mr.smart
Всем привет и здравствуйте!
К одной ножке PIO процессора AT91SAM7S256 подключено устройство, которое на эту ногу выдает данные с частотой 4800. Нужен совет - как организовать чтение данных с этого pin'а. Может быть через USART в режиме Асинхронного Приемника?
aaarrr
Если кодировка данных совместима с одним из режимов USART'а, и ножка PIO является по совместительству входом RX, то можно.
mr.smart
Цитата(aaarrr @ Mar 26 2011, 19:36) *
Если кодировка данных совместима с одним из режимов USART'а, и ножка PIO является по совместительству входом RX, то можно.

Походу ножка не 5ая, а 9ая. Неужели нельзя как-то переназначить вход RXD? Если нет, то как тогда читать конкретно с 9ой ноги?

Погодите... 9ая нога это же RXD Дебаг Юнита! Если настроить его на прием пакетов по 9 бит, то можно считывать информацию через DBGU! Я где-то не прав?
aaarrr
Цитата(mr.smart @ Mar 26 2011, 19:59) *
Неужели нельзя как-то переназначить вход RXD? Если нет, то как тогда читать конкретно с 9ой ноги?

Переназначить нельзя. Читать соответствующий бит в PIO_PDSR, перед этим не забыть разрешить тактирование модуля PIO.
sergeeff
Цитата(mr.smart @ Mar 26 2011, 19:29) *
Всем привет и здравствуйте!
К одной ножке PIO процессора AT91SAM7S256 подключено устройство, которое на эту ногу выдает данные с частотой 4800. Нужен совет - как организовать чтение данных с этого pin'а. Может быть через USART в режиме Асинхронного Приемника?


Сделайте его пином на вход и по прерыванию читайте.
mr.smart
Цитата(sergeeff @ Mar 26 2011, 20:08) *
Сделайте его пином на вход и по прерыванию читайте.

А прерывание будет приходить перед каждым битом разве?
sergeeff
Цитата(mr.smart @ Mar 26 2011, 21:10) *
А прерывание будет приходить перед каждым битом разве?


Если у вас всегда есть изменение сигнала - можно организовать прерывание по фронтам. Если сигнал с частотой 4800 Гц может не меняться - другое дело. Берете счетчик из числа доступных, программируете его на эти самые 4800 Гц, и по прерыванию счетчика читаете состояние этого пина.
mr.smart
Цитата(sergeeff @ Mar 26 2011, 20:41) *
Если у вас всегда есть изменение сигнала - можно организовать прерывание по фронтам. Если сигнал с частотой 4800 Гц может не меняться - другое дело. Берете счетчик из числа доступных, программируете его на эти самые 4800 Гц, и по прерыванию счетчика читаете состояние этого пина.

А если так случится, что я буду считывать уровень сигнала не с середины тактового периода, а в момент изменения уровня например? Нужно, получается, запустить таймер через 1/9600 секунды после того как будет пойман первый высокий уровень на ноге, чтобы четко снимать сигнал. Ну и вопрос разсинхронизации встает. Поправьте меня если я не прав.
sergeeff
Цитата(mr.smart @ Mar 26 2011, 22:01) *
А если так случится, что я буду считывать уровень сигнала не с середины тактового периода, а в момент изменения уровня например? Нужно, получается, запустить таймер через 1/9600 секунды после того как будет пойман первый высокий уровень на ноге, чтобы четко снимать сигнал. Ну и вопрос разсинхронизации встает. Поправьте меня если я не прав.


Ваш сигнал одиночный, без своего сигнала синхронизации. Посему, не к чему синхронизироваться (теоретически ваш сигнал может постоянно стоять в "0" или "1"). Ну и в худшем случае, при использовании своего тактирующего счетчика, будет ошибка на 1 синхротакт (очень важно в вашем случае?).
mr.smart
Друзья!!! Всем спасибо за советы! Обязательно завтра попробую в учебных целях сделать чтение данных с пина через чтение PIO_PDSR при прерывании от счетчика!
Сейчас я сделал чтение данных через блок DBGU (как никак, данные идут на девятую ножку), думаю в перспективе так и оставлю.

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