Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [need help]PIO контроллер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Sergei_K
Соб-но при прочтении даташита возник следующий вопрос..

Судя по даташиту в данном микроконтроллере есть 2 PIO контроллера A и B (см.рис)
это тем более подкрепляется тем, что в кейловском файле с описанием регистров определяются адреса для обоих контроллеров:

#define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address
#define AT91C_BASE_PIOB ((AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address


При этом с соответствующими портами контролеров A и B вроде как можно работать, обращаясь к соответствующим ногам микроконтроллера, например ножке 85 соответствует порт PA3, 34 - PB5(см. рис).

Так вот.. вроде все понятно, но.. читая дальше раздел PIO контроллера, мы узнаем, что помимо 32 ножек-входов, соответствующие ножки могут иметь еще две (или меньше) периферийные функции A и B. Вот здесь-то и появляется вопрос... Во-первых, судя из таблички, что я привел, у PIO ножек нету двух периферийных функций, максимум одна, либо вообще ноль.. Так, скажем, 9 нога может быть либо входом 0 АЦПшки, либо 27 портом контроллера PIO B (если настроена..) Тогда напрашивается вопрос, что вообще за периферийные функции A и B и какая, скажем, в приведенном выше примере функция AD0 для 9 ноги: A или B? blink.gif
Ну или рад бы был тогда услышать, что вообще такое периферийные функции A и B?
amw
Цитата(Sergei_K @ Apr 23 2007, 13:20) *
Соб-но при прочтении даташита возник следующий вопрос..

Судя по даташиту в данном микроконтроллере есть 2 PIO контроллера A и B (см.рис)
это тем более подкрепляется тем, что в кейловском файле с описанием регистров определяются адреса для обоих контроллеров:

#define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address
#define AT91C_BASE_PIOB ((AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address


При этом с соответствующими портами контролеров A и B вроде как можно работать, обращаясь к соответствующим ногам микроконтроллера, например ножке 85 соответствует порт PA3, 34 - PB5(см. рис).

Так вот.. вроде все понятно, но.. читая дальше раздел PIO контроллера, мы узнаем, что помимо 32 ножек-входов, соответствующие ножки могут иметь еще две (или меньше) периферийные функции A и B. Вот здесь-то и появляется вопрос... Во-первых, судя из таблички, что я привел, у PIO ножек нету двух периферийных функций, максимум одна, либо вообще ноль.. Так, скажем, 9 нога может быть либо входом 0 АЦПшки, либо 27 портом контроллера PIO B (если настроена..) Тогда напрашивается вопрос, что вообще за периферийные функции A и B и какая, скажем, в приведенном выше примере функция AD0 для 9 ноги: A или B? blink.gif

PIO контроллеры одинаковые для всей серии AT91SAM7. В SAM7S, например, есть выводы на которых три функции.
Включив вывод как IO можем манипулировать пином. Бит в PIO_PER регистре равен 1.
Если включить периферийную функцию, то доступен выбор первой или второй функции. Бит в PIO_PER регистре равен 0, а бит в PIO_ABSR выбирает фукцию A или B.
В разделах PIO Controller A Multiplexing и PIO Controller B Multiplexing есть таблица с описанием функций.
В частности там указано что PA2 имеет три функции:
PA2, SCK0, SPI1_NPCS1.
wodya
Вопрос из этой же темы.

У меня в проекте используется FIQ. Вроде бы нужно настроить PA19 на Peripheral B. Однако прерывание срабатывает как при настройке на Peripheral B, так и на Peripheral A. Проверял.
Да и в примерах указано, что для настройки FIQ нужно писать
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AdcSdOut,0);
, что расходится с описанием, т.к. если судить по описанию нужно писать
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,0,AdcSdOut);
amw
Цитата(wodya @ Apr 23 2007, 14:27) *
Вопрос из этой же темы.

У меня в проекте используется FIQ. Вроде бы нужно настроить PA19 на Peripheral B. Однако прерывание срабатывает как при настройке на Peripheral B, так и на Peripheral A. Проверял.
Да и в примерах указано, что для настройки FIQ нужно писать
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AdcSdOut,0);
, что расходится с описанием, т.к. если судить по описанию нужно писать
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,0,AdcSdOut);

К сожалению здесь помочь не могу. Не пользовал и не изучал FIQ на внешнем выводе.
AT91F_PIO_CfgPeriph и им подобные не использую, так что ...
Сергей Борщ
Цитата(wodya @ Apr 23 2007, 13:27) *
У меня в проекте используется FIQ. Вроде бы нужно настроить PA19 на Peripheral B. Однако прерывание срабатывает как при настройке на Peripheral B, так и на Peripheral A.
У меня создалось впечатление, что входы периферии подключены к выводам всегда. Настройка PER/PDR и ASR/BSR переключают выходы соответствующей периферии. Ибо наблюдал устойчивый прием в DBGU хотя нога была ошибочно сконфигурирована на Peripheral B.
А в ваших примерах скорее всего банальная ошибка, поскольку периферия B на этой ножке тоже может работать только на ввод - она не мешает и таким образом скрывает ошибку.

P.S. Посмотрел внимательно даташит - действительно, на рис.28-3 показано, что входы периферии не мультиплексируются, подключены прямо к выходу входного буфера.
vmp
Цитата(wodya @ Apr 23 2007, 15:27) *
У меня в проекте используется FIQ. Вроде бы нужно настроить PA19 на Peripheral B. Однако прерывание срабатывает как при настройке на Peripheral B, так и на Peripheral A. Проверял.


Прочитай Раздел PIO, Product dependencies, External Interrupt Lines. Там сказано, что линии запроса прерывания всегда подключены. Это следует и из рисунка I/O line control logic - входы периферии всегда подключены.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.