Ножки портов ввода/вывода общего назначения (general purpose input/output, GPIO) организованы как один порт, у которого до 32 сигналов ввода/вывода (конкретное количество ножек портов зависит от используемого корпуса). Это позволяет считывать уровни входов и управлять уровнями выходов внешних ножек портов через один 32-битный порт. К каждой ножке GPIO можно получать доступ индивидуально.
Примечание: расшифровку терминов и сокращений см. в словарике [5].
У GPIO имеются следующие конфигурируемые пользователем функции:
• 8 фиксированных GPIO, которые могут работать как аналоговые входные каналы для SAADC, COMP или LPCOMP. • Нагрузочная способность выхода настраивается. • Можно подключать встроенные верхние (pull-up) и нижние (pull-down) подтягивающие резисторы. • Пробуждение от появления высокого или низкого уровня на любой из ножек порта. • Прерывание по изменению состояния любой из ножек порта. • Все ножки портов могут использоваться подсистемой задач и событий PPI (PPI task/event system). • Один или большее количество выходов GPIO может управляться через PPI и каналы GPIOTE. • Все выводы могут быть индивидуально отображены на блоки интерфейса периферийных устройств, что дает большую гибкость в разводке печатной платы. • Изменения состояния GPIO захваченные на сигнале SENSE, могут быть сохранены в регистре LATCH.
Периферийное устройство портов GPIO реализует до 32 ножек выводов портов, с именами PIN0 .. PIN31. Каждая из этих ножек может быть индивидуально сконфигурирована в регистрах PIN_CNF[n] (n = 0 .. 31). В этих регистрах можно сконфигурировать следующие параметры:
• Direction (направление работы - вход или выход). • Drive strength (нагрузочная способность выхода). • Разрешение pull-up и pull-down резисторов. • Pin sensing (настройка чувствительности к определенным перепадам уровня). • Input buffer disconnect (отключение входного буфера). • Analog input (аналоговый вход для выбранных ножек).
Регистры PIN_CNF относятся к сохраняемым (retained) регистрам, т. е. их содержимое сохраняется при переходе в состояние пониженного энергопотребления, для дополнительной информации по retained-регистрам см. [2].
[Конфигурация ножки вывода GPIO]
Ножки могут быть индивидуально сконфигурированы полем SENSE в регистре PIN_CNF[n], чтобы детектировать либо высокий уровень, либо низкий уровень на своем входе.
Когда корректный уровень был детектирован на любой из сконфигурированных ножек, механизм установит сигнал DETECT в состояние лог. 1. У каждой ножки есть отдельный сигнал DETECT, и поведение по умолчанию, как определяется регистром DETECTMODE, работает так, что сигналы DETECT от всех ножек порта GPIO комбинируются друг с другом в общий сигнал DETECT, который проходит по всей системе. Этот общий сигнал может использоваться другими периферийными устройствами, см. рис. 1. Механизм сигналов DETECT функционален в обоих режимах System ON и System OFF.
Рис. 1. Внутренняя структура порта GPIO.
На рис. 1 показано, что порт GPIO содержит 32 отдельных выводов ножек PIN0 .. PIN31, где PIN0 изображен более подробно. Все сигналы в левой стороне иллюстрации используются другими периферийными устройствами в системе, и поэтому они недоступны для CPU напрямую.
Убедитесь, что на выводе такой уровень, который не сможет вызвать срабатывание механизма sense перед его разрешением. Детектирование сработает немедленно, если условие sense, сконфигурированное в регистрах PIN_CNF, удовлетворяет действующему уровню, когда разрешается механизм sense. Это приведет к срабатыванию события порта (PORT event), если сигнал DETECT был в лог. 0 перед разрешением механизма sense, см. [3].
См. описание следующих периферийных устройств для дополнительной информации о том, как используется сигнал DETECT:
• POWER: использует сигнал DETECT для выхода из состояния System OFF. • GPIOTE: использует сигнал DETECT для генерации PORT event.
Когда сигнал PINx.DETECT переходит в лог. 1, в регистре LATCH установится соответствующий флаг, например когда PIN0.DETECT переходит в лог. 1, в регистре LATCH бит 0 установится в '1'.
Бит LATCH очистится только если CPU явно очистит его путем записи '1' в него. Например, регистр LATCH не изменится, когда сигнал PINx.DETECT установится в лог. 0.
Если CPU выполнит операцию очистки бита в регистре LATCH, когда соответствующий сигнал PINx.DETECT находится в лог. 1, то этот бит в регистре LATCH не очистится.
Сигнал LDETECT установится в лог. 1, когда один или большее количество бит в регистре LATCH находятся в состоянии '1'. Сигнал LDETECT установится в 0, когда все биты в регистре LATCH были успешно очищены и находятся в состоянии '0'.
Если один или большее количество бит в регистре находятся в состоянии '1' после того, как CPU выполнил операцию очистки над регистрами LATCH, сгенерируется фронт нарастания сигнала LDETECT, что показано на рис. 2.
Важное замечание: CPU может прочитать регистр LATCH в любой момент, чтобы проверить, удовлетворяется ли условие SENSE на одной или большем количестве ножек GPIO, даже если это условие больше не удовлетворяется в момент опроса регистра LATCH. Таким образом, регистр LATCH работает как защелка, запоминая возникающие события SENSE. Этот механизм будет работать даже если сигнал LDETECT не используется в качестве сигнала DETECT.
Сигнал LDETECT по умолчанию не подсоединен к сигналу DETECT порта GPIO. Однако через регистр DETECTMODE можно поменять поведение по умолчанию сигнала DETECT порта GPIO, которое было описано выше, чтобы вместо этого сигнал DETECT формировался напрямую из сигнала LDETECT, см. рис. 1. На рис. 2 показано поведение сигнала DETECT для двух этих альтернатив.
Рис. 2. Поведение сигнала DETECT.
Входной буфер разряда GPIO может быть отключен от ножки вывода, чтобы задействовать экономию потребляемой энергии, когда ножка не используется как вход, см. рис. 1. Входы должны быть подключены, чтобы получать корректное значение входа в регистре IN, и чтобы для этой ножки работал механизм sense.
Другие периферийные устройства в системе могут подключаться к ножкам GPIO, меняя тем самым выходное значение подключенных ножек GPIO и их конфигурацию, или считывать их аналоговый или цифровой уровень, см. рис. 1.
Выбранные ножки также поддерживают ввод аналоговых входных сигналов, см. ANAIN на рис. 1. Аналоговые выводы могут быть назначены только на определенных разрядах порта, см. цоколевку корпуса используемого микроконтроллера (например см. [4]).
Важное замечание: когда ножка порта сконфигурирована как цифровой вход, следует позаботиться при разработке схемы nRF52832, чтобы минимизировать потребляемый ток, когда входное напряжение находится между VIL и VIH. Однако хорошей практикой будет гарантировать, что внешняя схема не переводит на длительное время уровень на ножке входа в диапазон между VIL и VIH.
[GPIO, расположенные близко к RADIO]
На параметры радиотракта, такие как чувствительность, могут повлиять высокочастотные сигналы цифровых ножек ввода/вывода, через которые втекает/вытекает большой ток, и когда эти ножки находятся близко к выводам питания радиотракта и выводам подключения антенны.
Для оптимальной разводки печатной платы, обеспечивающей лучшие параметры радиотракта, см. рекомендации в разделе Pin assignments документации на используемый чип (например см. [4]).
Запись 1 в разряд регистра установит соответствующий выход драйвера порта в лог. 1. Запись 0 не оказывает никакого эффекта. Чтение покажет значение регистра OUT.
Биты регистра OUTSET:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
f
e
d
c
b
a
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
PIN0
Запись 1 в разряд установит на выходе P0.0 уровень лог. 1. Запись 0 не окажет никакого действия. Чтение покажет значение разряда 0 регистра OUT.
...
f
RW
PIN31
Запись 1 в разряд установит на выходе P0.31 уровень лог. 1. Запись 0 не окажет никакого действия. Чтение покажет значение разряда 31 регистра OUT.
Запись 1 в разряд регистра установит соответствующий выход драйвера порта в лог. 0. Запись 0 не оказывает никакого эффекта. Чтение покажет значение регистра OUT.
Биты регистра OUTCLR:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
f
e
d
c
b
a
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
PIN0
Запись 1 в разряд установит на выходе P0.0 уровень лог. 0. Запись 0 не окажет никакого действия. Чтение покажет значение разряда 0 регистра OUT.
...
f
RW
PIN31
Запись 1 в разряд установит на выходе P0.31 уровень лог. 0. Запись 0 не окажет никакого действия. Чтение покажет значение разряда 31 регистра OUT.
Позволяет настроить на выход выбранные разряды порта GPIO. Запись 1 в определенный разряд настраивает его на выход, запись 0 не оказывает никакого действия. Чтение показывает значение регистра DIR.
Биты регистра DIRSET:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
f
e
d
c
b
a
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
PIN0
Запись 1 настроит P0.0 на выход, запись 0 не оказывает никакого действия. Чтение показывает значение разряда 0 регистра DIR.
...
f
RW
PIN31
Запись 1 настроит P0.31 на выход, запись 0 не оказывает никакого действия. Чтение показывает значение разряда 31 регистра DIR.
Позволяет настроить на вход выбранные разряды порта GPIO. Запись 1 в определенный разряд настраивает его на вход, запись 0 не оказывает никакого действия. Чтение показывает значение регистра DIR.
Биты регистра DIRCLR:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
f
e
d
c
b
a
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
PIN0
Запись 1 настроит P0.0 на вход, запись 0 не оказывает никакого действия. Чтение показывает значение разряда 0 регистра DIR.
...
f
RW
PIN31
Запись 1 настроит P0.31 на вход, запись 0 не оказывает никакого действия. Чтение показывает значение разряда 31 регистра DIR.
Это регистр защелки, который показывает, какие ножки GPIO удовлетворили критерию, установленному в регистрах PIN_CNF[n].SENSE. Регистр работает по принципу W1C, т. е. для сброса разряда надо записать в него лог. 1.
Биты регистра LATCH:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
f
e
d
c
b
a
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
PIN0
Показывает статус удовлетворения критерию, установленному в регистре PIN_CNF0.SENSE. Для очистки запишите в этот бит 1. 0: NotLatched, не было соответствия критерию. 1: Latched, было соответствие критерию.
...
f
RW
PIN31
Показывает статус удовлетворения критерию, установленному в регистре PIN_CNF31.SENSE. Для очистки запишите в этот бит 1. 0: NotLatched, не было соответствия критерию. 1: Latched, было соответствие критерию.
Рис. 6. Зависимость максимального вытекающего тока GPIO от напряжения, высокая нагрузочная способность.
Рис. 7. Зависимость времени нарастания и спада уровня от температуры, изменение уровня в диапазоне 10% - 90%, емкость нагрузки 25 пФ, VDD = 3.0V.
[Ссылки]
1. GPIO General purpose input/output site:infocenter.nordicsemi.com. 2. nRF52 Series POWER Power supply site:infocenter.nordicsemi.com. 3. nRF5x GPIOTE: события и задачи GPIO. 4. nRF52832 QFN48 pin assignments site:infocenter.nordicsemi.com. 5. Bluetooth: аббревиатуры и термины.