пятница, 9 июня 2017 г.

Maple mini. STM32. Регистры GPIO - порты ввода/вывода. [Перевод мануала]

Рерих, Гималаи - почему бы и нет?
Самое первое что нужно изучить в любом микроконтроллере - это работа с портами ввода/вывода. Здесь будет перевод мануала (переводчик из меня так себе) главы 9.1.
Так будут помечаться мои мысли и дополнительные разъяснения.


 9.1 Описание функций GPIO.


Каждый из универсальных портов ввода/вывода (далее I/O) имеет:

  • два 32 битных конфигурационных регистра (GPIOx_CRL, GPIOx_CRH),
  • два 32 битных data регистра (GPIOx_IDR, GPIOx_ODR),
  • 32 битный регистр сброса/установки (GPIOx_BSRR), 
  • 16 битный регистр сброса (GPIOx_BRR),
  • 32 битный регистр блокировки (GPIOx_LCKR).

Теперь немножно более подробно:

GPIOx_CRL, GPIOx_CRH - регистры конфигурации(управления) портов, настройка режима работы порта: вход/вывод и тд...

GPIOx_IDR     - регистр непосредственного чтения состояния линий порта. Регистр данных.

GPIOx_ODR   - регистр конфигурации порта в режиме вывод (выход).  Регистр данных.

GPIOx_BSRR  - регистр атомарного сброса/установки битов для GPIOx_ODR регистра.

GPIOx_BRR    - регистр атомарного сброса битов для GPIOx_ODR регистра. По сути точно                                          такой же регистр, только без возможности установки битов.

GPIOx_LCKR - регистр блокировки изменений конфигурации порта.

В зависимости от конкретных аппаратных характеристик порта, которые можно найти в даташите, каждый вывод порта может программно настраиваться в следующие режимы:

  • Плавающий вход (Input floating) - вход без резисторов подтяжки. HiZ состояние. Сопротивление входа велико. Ловит любые помехи.
  • Вход с подтяжкой на плюс (Input pull-up) - вход с внутренней подтяжкой на питание "+".
  • Вход с подтяжкой на минус (Input pull-down) - вход с внутренней подтяжкой на землю "-".
  • Аналоговый вход (Analog) - аналоговый вход с использованием АЦП.

  • Выход с открытым стоком (Output open-drain) - при логическом 0 линия подтягивается через резистор к земле, при лог. 1 линия висит в воздухе, поэтому для него требуется самостоятельно подтянуть линию через резистор к питанию и добиться двухтактной работы вывода. Т.е. можно управлять нагрузкой с большим/меньшим напряжением, чем питание МК;  использовать для I2C и других аналогов.
  • Двухтактный выход (Output push-pull) - при логическом 0 линия подтягивается через резистор к земле, при лог. 1 - к питанию "+".  Т.е. линия выдает либо "+", либо землю.

  • Выход с открытым стоком альтернативной функции (Alternate function open-drain) - тоже самое что и просто выход с открытым стоком, только для альтернативных функций вывода.
  • Двухтактный выход альтернативной функции (Alternate function push-pull) - тоже самое что и просто двухтактный выход, только для альтернативных функций вывода.


Каждый вывод порта может быть отдельно запрограммирован, однако регистры I/O порта  доступны только как 32 битные слова (16 битовый или байтовый доступ не доступен).
Это утверждение я понимаю следующим образом - чтобы изменить значение регистра придется подготовить и записать в него 32х битное слово за один раз.
Основное назначение GPIOx_BSRR и GPIOx_BRR регистров - это возможность для атомарного доступа чтения/изменения (чтения !? да-да в даташите так и написано) для любого GPIO регистра. Поэтому нет риска того, что может случиться IRQ (прерывание) между процессом чтения и изменения регистра.
Благодаря этим двум регистрам обеспечивается побитовое управление GPIO регистров, более подробно далее. Плюс существует защита от прерывания во время процесса чтения и изменения регистра.


Figure 13. Базовая структура стандартной линии I/O порта
Figure 14. Базовая структура 5 Вольтовой линии I/O порта
Существует две разновидности линии ввода/вывода: обычная - работающая с 3.3В и необычная, которая может работать с 5В. Подробности в даташите.



Table 20. Таблица конфигурации линии порта
Требуемый режим
CNF1 
CNF0
MODE1
MODE0
PxODR регистр
В режиме выход
Двухтактный выход
0
0
01
10
11
см. табл. знач.
битов MODE
0 или 1
Выход с открытым стоком
1
0 или 1
В режиме альтернативный выход
Двухтактный выход
1
0
Все равно
Выход с открытым стоком
1
Все равно
В режиме вход
Аналоговый вход
0
0
00
Все равно
Плавающий вход
1
Все равно
Вход с подтяжкой на минус
1
0
0
Вход с подтяжкой на плюс
1

Table 21. Таблица значений битов MODE
MODE[1:0] Смысл
00 Зарезервированно для режима вход
01 Максимальная выходная частота 10 МГц
10 Максимальная выходная частота 2 МГц
11 Максимальная выходная частота 50 МГц

9.1.1  Порты Ввода/Вывода Общего назначения.


В течении и сразу после reset'а, альтернативные функции портов не активны и все I/O порты находятся в Режиме Плавающего Входа (CNFx[1:0]=01b, MODEx[1:0]=00b).

JTAG пины настроены на вход PU/PD после reset'a.
         PA15: JTDI in PU
         PA14: JTCK in PD
         PA13: JTMS in PU
         PB4: NJTRST in PU

Их можно сконфигурировать как выход, с помощью соответсвующей записи в Регистр Конфигурации Порта в Режиме Выход (GPIOx_ODR). А значит их можно настроить как Двухтактный Выход или как Выход с Открытым Стоком (активируется только N-MOS
 при значении 0).

Регистр Непосредственного Чтения Состояния Линий Порта (GPIOx_IDR) перехватывает и отображает значения имеющиеся на I/O выводе с каждым APB2 тактом.

Все пины GPIO когда настроенны на вход имеют встроенные слабые подтяжки на питание и на землю, котороые можно активировать или отключить.


9.1.2 Атомарный сброс и установка бита.


Нет необходимости программно отключать прерывания, когда побитово изменяешь GPIOx_ODR регистр. Существует возможность изменить только один или несколько битов за один атомарный APB2 доступ записи. Этого можно достичь если запишешь 1 в Регистре Атомарного Сброса/Установки Битов (GPIOx_BSRR, или только сброс в GPIOx_BRR), в те выделенные биты которые хочешь изменить. Не выделенные биты (со значением 0) изменятся не будут.


9.1.3 Внешние линии прерывания/пробуждения.


Все порты имеют функцию внешнего прерывания. Для использования внешнего прерывания, линия должна быть настроена как вход. Для большей информации о внешних прерываниях смотри Section 10.2:External interrupt/event controller (EXTI) и Section 10.2.3: Wakeup event management.


9.1.4 Альтернативные функции


Чтобы использовать альтернативную функцию необходимо настроить Регистр Конфигурации Бита Порта.
  • Для альтернативных функций использующих входной режим, порт необходимо настроить как вход (плавающий, с подтяжкой на питание или землю), а входная линия должна получать внешние сигналы.

Примечание: Так же возможно программно эмулировать сигналы на AFI входе (входе Альтернативной функции) настраивая GPIO контроллер. Для этого порт необходимо настроить как Выход Альтернативной Функции. И очевидно, что нельзя подавать внешние сигналы на этот порт т.к. он будет управляться программно с помощью GPIO контроллера.

  • Для альтернативных функций использующих выходной режим, порт необходимо настроить как Выход Альтернативной Функции (двухтактный или с открытым стоком).
  • Для двунапрвленных Альтернативных Функций, бит порта должен быть настроен как Выход Альтернативной Функции (двухтактный или с открытым стоком). В этом случае и входной драйвер настраивается как Плавающий Вход.
Если ты настриваешь бит порта как Выход Альтернативной Функции, это отключает его от Регистра Конфигурации Порта в Режиме выхода (GPIOx_ODR) и подключает его к выходному сигналу переферии чипа.

Если GPIO программно настроен на режим "Выход Альтернативной Функции", но переферия не активированна, то такой режим не определен.


9.1.7 Конфигурация входа


I/O вывод настроен на вход, тогда:
  • Выходной буффер (ODR регистр) не используется;
  • Входной триггер Шмидта включен;
  • Можно подключить подтягивающие резисторы(на землю или питание) или настроить как Плавающий Вход;
  • Данные на I/O выводах, отображаются в IDR регистре и обновляются с каждым тактом APB2;
  • Доступ чтения регистра IDR возвращает состояние I/O выводов.

Figure 15. Конфигурация входа



















VDD_FT - вход толерантный к 5В который немного отличается от VDD.



9.1.8 Конфигурация выхода


I/O вывод настроен на выход, тогда:
  • Выходной Буфер (ODR регистр) настроен на следующие режимы:
           - Выход с открытым стоком - при логическом 0 (в ODR регистре) линия подтягивается               через резистор к земле (N-MOS состояние), при лог. 1 линия висит в воздухе (HiZ                       состояние). P-MOS состояние недоступно (можно самому подтянуть линию через                       резистор к питанию, об этом описано выше);


           - Двухтактный выход - при логическом 0 (в ODR регистре) линия подтягивается через                 резистор к земле(N-MOS состояние), при лог. 1 - к питанию "+" (P-MOS состояние).
  • Входной Триггер Шмидта включен;
  • Резисторы подтяжки отключены;
  • Данные на I/O выводах отображаются в IDR регистре и обновляются с каждым тактом APB2;
  • Доступ чтения регистра IDR возвращает состояние I/O выводов в режиме Открытого Стока;
  • Доступ чтения регистра ODR возвращает последние записанные значения В Двухтактном режиме.

            
Figure 16. Конфигурация выхода
VDD_FT - вход толерантный к 5В который немного отличается от VDD.

На этом пока что все, в дальнейшем я буду дополнять этот пост.

Комментариев нет:

Отправить комментарий