Jump to content

    
Sign in to follow this  
inventor

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

Recommended Posts

Пытаюсь разобраться с 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 картой, но вот с этими функциями то же не могу разобраться.

 

Share this post


Link to post
Share on other sites

Все просто.

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

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

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

Share this post


Link to post
Share on other sites
Все просто.

Число напротив пина - это номер 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:

Share this post


Link to post
Share on other sites
#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 в моем примере, то и использовать его нужно так, чтобы у него передача и прием была на одной функции и следовательно на ближайших выводах?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this