|
[need help]PIO контроллер, AT91SAM7X |
|
|
|
Apr 23 2007, 13:20
|
Участник

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346

|
Соб-но при прочтении даташита возник следующий вопрос.. Судя по даташиту в данном микроконтроллере есть 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?  Ну или рад бы был тогда услышать, что вообще такое периферийные функции A и B?
Сообщение отредактировал Sergei_K - Apr 23 2007, 13:28
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
(1 - 5)
|
Apr 23 2007, 13:30
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(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?  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.
Сообщение отредактировал amw - Apr 23 2007, 13:35
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 23 2007, 14:38
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(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 и им подобные не использую, так что ...
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 23 2007, 14:55
|

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

|
Цитата(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 показано, что входы периферии не мультиплексируются, подключены прямо к выходу входного буфера.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|