Перейти к содержанию
    

Периферийные функции AVR32 UC3A3

Пытаюсь разобраться с GPIO и мне не совсем понятно как это работает.

Как я понял (может неправильно) каждая периферия может быть отображена на различные линии с помощью четырех функций.

Я запрограммировал порт USART3 - он у меня работает, но вот настройку GPIO для него я делал как шаман с бубном.

 

На моей плате USART3 выведен с выводов RxD - PX57 и TxD - PX58

смотрю по даташыту-

 

Each GPIO line can be assigned to one of 4 peripheral functions; A, B, C, or D. The following

table define how the I/O lines on the peripherals A, B, C, or D are multiplexed by the GPIO.

 

так оно и есть, выводы RxD и TxD USART выведены на PX57 и PX58 и периферийная функция "C"

 

Потом смотрю файл avr32/uc3a256.h

 

/* USART3 */ 
#define AVR32_USART3_ADDRESS               0xFFFF2000
#define AVR32_USART3                       (*((volatile avr32_usart_t*)AVR32_USART3_ADDRESS))
#define AVR32_USART3_IRQ                   256
#define AVR32_USART3_PDCA_ID_RX            3
#define AVR32_USART3_PDCA_ID_TX            14
#define AVR32_USART3_CLK_0_PIN             30
#define AVR32_USART3_CLK_0_FUNCTION        1
#define AVR32_USART3_CTS_0_0_PIN           67
#define AVR32_USART3_CTS_0_0_FUNCTION      1
#define AVR32_USART3_CTS_0_1_PIN           28
#define AVR32_USART3_CTS_0_1_FUNCTION      2
#define AVR32_USART3_RTS_0_0_PIN           66
#define AVR32_USART3_RTS_0_0_FUNCTION      1
#define AVR32_USART3_RTS_0_1_PIN           27
#define AVR32_USART3_RTS_0_1_FUNCTION      2
#define AVR32_USART3_RXD_0_0_PIN           36
#define AVR32_USART3_RXD_0_0_FUNCTION      1
#define AVR32_USART3_RXD_0_1_PIN           59
#define AVR32_USART3_RXD_0_1_FUNCTION      1
#define AVR32_USART3_RXD_0_2_PIN           108
#define AVR32_USART3_RXD_0_2_FUNCTION      2
#define AVR32_USART3_TXD_0_0_PIN           29
#define AVR32_USART3_TXD_0_0_FUNCTION      1
#define AVR32_USART3_TXD_0_1_PIN           60
#define AVR32_USART3_TXD_0_1_FUNCTION      1
#define AVR32_USART3_TXD_0_2_PIN           105
#define AVR32_USART3_TXD_0_2_FUNCTION      1
#define AVR32_USART3_TXD_0_3_PIN           109
#define AVR32_USART3_TXD_0_3_FUNCTION      2

 

Что это за числа здесь стоят в описании пинов и функций - Х.З.

То есть я рассуждал так, если функция С то и нужно брать второй пин и вторую функцию

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

потом когда выбрал

 

/* USART Settings */
#define EXAMPLE_USART                 (&AVR32_USART3)
#define EXAMPLE_USART_RX_PIN          AVR32_USART3_RXD_0_2_PIN
#define EXAMPLE_USART_RX_FUNCTION     AVR32_USART3_RXD_0_2_FUNCTION


/*  Передача 3-го усарта на 3-й функции! */
#define EXAMPLE_USART_TX_PIN          AVR32_USART3_TXD_0_3_PIN
#define EXAMPLE_USART_TX_FUNCTION     AVR32_USART3_TXD_0_3_FUNCTION
#define EXAMPLE_USART_IRQ             AVR32_USART3_IRQ
#define EXAMPLE_USART_BAUDRATE        9600

 

Все заработало. Но все равно, как правильно установить функцию мне не понятно, поясните кто знает!

Щас пытаюсь разобраться с SD картой, но вот с этими функциями то же не могу разобраться.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все просто.

Число напротив пина - это номер GPIO.

Число напротив функции - это номер функции (0, 1, 2, 3 соответствует функциям A, B, C, D).

Смотите таблицу GPIO Controller Function Multiplexing в даташите, все станет понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все просто.

Число напротив пина - это номер GPIO.

Число напротив функции - это номер функции (0, 1, 2, 3 соответствует функциям A, B, C, D).

Смотите таблицу GPIO Controller Function Multiplexing в даташите, все станет понятно.

 

Тогда получается что

USART3 RxD вывод PX57 вывод GPIO108 2 функция С - совпадает

USART3 TxD вывод PX58 вывод GPIO109- но в дадашите нету 3-й функции для этого вывода, а у меня работает.

Щас попробую изменить на вторую функцию TxD

 

 

 

Тогда получается что

USART3 RxD вывод PX57 вывод GPIO108 2 функция С - совпадает

USART3 TxD вывод PX58 вывод GPIO109- но в дадашите нету 3-й функции для этого вывода, а у меня работает.

Щас попробую изменить на вторую функцию TxD

 

Не хочет работать со второй функцией

с третьей, которой нету в даташите-работает :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#define AVR32_USART3_TXD_0_3_PIN 109

#define AVR32_USART3_TXD_0_3_FUNCTION 2

 

PX59 GPIO 109 функция 2, т.е C, если смотреть по таблице.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#define AVR32_USART3_TXD_0_3_PIN 109

#define AVR32_USART3_TXD_0_3_FUNCTION 2

 

PX59 GPIO 109 функция 2, т.е C, если смотреть по таблице.

 

 

О... КАЖИСЬ ПОНЕЛ, НУЖНО БЫЛО СМОТРЕТЬ ЗНАЧЕНИЕ а не ее название.

 

И еще пара вопростов

1) то есть все эти макросы нужно употреблять парами, то есть если PIN3 то и FUNCTION3 ?

2) Можно сделать таким образом,чтобы например RxD был на функции С и на порте PX

а TxD на какомнибудь другом порте Например PA, то есть имеется ввиду, что если используется целиковое устройство, как USART в моем примере, то и использовать его нужно так, чтобы у него передача и прием была на одной функции и следовательно на ближайших выводах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...