реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> [need help]PIO контроллер, AT91SAM7X
Sergei_K
сообщение Apr 23 2007, 13:20
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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? blink.gif
Ну или рад бы был тогда услышать, что вообще такое периферийные функции A и B?

Сообщение отредактировал Sergei_K - Apr 23 2007, 13:28
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 23 2007, 13:30
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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? 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.

Сообщение отредактировал amw - Apr 23 2007, 13:35


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
wodya
сообщение Apr 23 2007, 14:27
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 27-03-07
Пользователь №: 26 549



Вопрос из этой же темы.

У меня в проекте используется 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);
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 23 2007, 14:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2007, 14:55
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
vmp
сообщение Apr 23 2007, 15:01
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(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 - входы периферии всегда подключены.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 21:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016