GPIOTE — GPIO tasks and events

The GPIO tasks and events (GPIOTE) peripheral provides functionality for accessing GPIO pins using tasks and events. Each GPIOTE channel can be assigned to one pin.

The main features of GPIOTE are the following:

A GPIOTE block enables GPIOs to generate events on pin state change which can be used to carry out tasks through the PPI system. A GPIO can also be driven to change state on system events using the PPI system. See Peripheral interface for additional information on tasks and events. GPIO is described in more detail in GPIO — General purpose input/output.

Detection of pin state changes when in low power mode is possible when in System ON or System OFF.

GPIOTE supports split-security. Each channel is assigned a security state (S/NS).

Up to three tasks can be used in each GPIOTE channel for performing write operations to a pin. Tasks SET and CLR are fixed. OUT can be configured to perform following operations:

An event can be generated in each GPIOTE channel from one of the following input conditions:

Pin events and tasks

The GPIOTE module has a number of tasks and events that can be configured to operate on individual GPIO pins.

The tasks SET[n], CLR[n], and OUT[n] can write to individual pins, and events IN[n] can be generated from input changes of individual pins.

The SET task will set the pin selected in CONFIG[n].PSEL to high. The CLR task will set the pin low.

The effect of the OUT task on the pin is configurable in CONFIG[n].POLARITY. It can set the pin high, set it low, or toggle it.

Tasks and events are configured using the CONFIG[n] registers. One CONFIG[n] register is associated with a set of SET[n], CLR[n], and OUT[n] tasks and IN[n] events.

As long as a SET[n], CLR[n], and OUT[n] task or an IN[n] event is configured to control pin n, the pin's output value will only be updated by the GPIOTE module. The pin's output value, as specified in the GPIO, will therefore be ignored as long as the pin is controlled by GPIOTE. Attempting to write to the pin as a normal GPIO pin will have no effect. When the GPIOTE is disconnected from a pin, the associated pin gets the output and configuration values specified in the GPIO module, see MODE field in CONFIG[n] register.

When conflicting tasks are triggered simultaneously (i.e. during the same clock cycle) in one channel, the priority of the tasks is as described in the following table.

Table 1. Task priorities
PriorityTask
1OUT
2CLR
3SET

When setting the CONFIG[n] registers, MODE=Disabled does not have the same effect as MODE=Task and POLARITY=None. In the latter case, a CLR or SET task occurring at the exact same time as OUT will end up with no change on the pin, based on the priorities described in the table above.

When a GPIOTE channel is configured to operate on a pin as a task, the initial value of that pin is configured in the OUTINIT field of CONFIG[n].

Port event

PORT is an event that can be generated from multiple input pins using the GPIO DETECT signal.

The event will be generated on the rising edge of the DETECT signal. See GPIO — General purpose input/output for more information about the DETECT signal.

There are two DETECT signals that come from the GPIO peripheral , the secure DETECT_SEC for pins marked as secure and the non-secure DETECT_NONSEC. Each signal has a corresponding port event, EVENTS_PORT[n].SECURE and EVENTS_PORT[n].NONSECURE. Secure events are not accessible from the non-secure side.

The GPIO DETECT signal will not wake the system up again if the system is put into System ON IDLE while the DETECT signal is high. Make sure to clear all DETECT sources before entering sleep. If the LATCH register is used as a source, a new rising edge will be generated on DETECT if any bit in LATCH is still high after clearing all or part of the register. This could occur if one of the PINx.DETECT signals is still high, for example. See Pin sense mechanism for more information.

Setting the system to System OFF while DETECT is high will cause a wakeup from System OFF reset.

This feature can be used to wake up the CPU from a WFI or WFE type sleep in System ON when all peripherals and the CPU are idle, meaning the lowest power consumption in System ON mode.

In order to prevent spurious interrupts from the PORT event while configuring the sources, the following must be performed:
  1. Disable interrupts on the PORT event (through INTENCLR.PORT).
  2. Configure the sources (PIN_CNF[n].SENSE in GPIO).
  3. Clear any potential event that could have occurred during configuration (write '0' to EVENTS_PORT).
  4. Enable interrupts (through INTENSET.PORT).

Tasks and events pin configuration

Each GPIOTE channel is associated with one physical GPIO pin through the CONFIG.PSEL field.

When Event mode is selected in CONFIG.MODE, the pin specified by CONFIG.PSEL will be configured as an input, overriding the DIR setting in GPIO. Similarly, when Task mode is selected in CONFIG.MODE, the pin specified by CONFIG.PSEL will be configured as an output overriding the DIR setting and OUT value in GPIO. When Disabled is selected in CONFIG.MODE, the pin specified by CONFIG.PSEL will use its configuration from the PIN[n].CNF registers in GPIO.

For the range of possible CONFIG.PORT values in the product, see Instances. Writing other values may lead to undefined behavior.

Note: A pin can only be assigned to one GPIOTE channel at a time. Failing to do so may result in unpredictable behavior.

Split security attribute

Individual GPIOTE channels and interrupts can have independent security attributes.

GPIOTE is implemented with split security, meaning it handles accesses from both secure and non-secure code. GPIOTE channels and interrupts can be defined as secure or non-secure.

For more information on GPIOTE security attributes, see GPIOTE.

Registers

Instances

InstanceDomainBase addressTrustZoneSplit accessDescription
MapAttDMA

GPIOTE20 : S
GPIOTE20 : NS

GLOBAL

0x500DA000
0x400DA000

USSNAYes

8 channels and 2 interrupts for GPIO port P1 and P3

GPIO tasks and events GPIOTE20

GPIOTE30 : S
GPIOTE30 : NS

GLOBAL

0x5010C000
0x4010C000

USSNAYes

4 channels and 2 interrupts for GPIO port P0

GPIO tasks and events GPIOTE30

Configuration

InstanceDomainConfiguration

GPIOTE20 : S
GPIOTE20 : NS

GLOBAL

Number of GPIOTE channels: 0..7

Number of GPIOTE port events: 0..0

Number of GPIOTE interrupts: 0..1

GPIOTE30 : S
GPIOTE30 : NS

GLOBAL

Number of GPIOTE channels: 0..3

Number of GPIOTE port events: 0..0

Number of GPIOTE interrupts: 0..1

Register overview

RegisterOffsetTZDescription
TASKS_OUT[n]0x000

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.

TASKS_SET[n]0x030

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.

TASKS_CLR[n]0x060

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.

SUBSCRIBE_OUT[n]0x080

Subscribe configuration for task OUT[n]

SUBSCRIBE_SET[n]0x0B0

Subscribe configuration for task SET[n]

SUBSCRIBE_CLR[n]0x0E0

Subscribe configuration for task CLR[n]

EVENTS_IN[n]0x100

Event from pin specified in CONFIG[n].PSEL

EVENTS_PORT[n].NONSECURE0x140NS

Non-secure port event

EVENTS_PORT[n].SECURE0x144S

Secure port event

PUBLISH_IN[n]0x180

Publish configuration for event IN[n]

PUBLISH_PORT[n].NONSECURE0x1C0NS

Publish configuration for event PORT[n].NONSECURE

PUBLISH_PORT[n].SECURE0x1C4S

Publish configuration for event PORT[n].SECURE

INTENSET00x304

Enable interrupt

INTENCLR00x308

Disable interrupt

INTENSET10x314

Enable interrupt

INTENCLR10x318

Disable interrupt

CONFIG[n]0x510

Configuration for OUT[n], SET[n], and CLR[n] tasks and IN[n] event

TASKS_OUT[n]

Address offset: 0x000 + (n × 0x4)

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_OUT

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is configured in CONFIG[n].POLARITY.

Trigger

1

Trigger task

TASKS_SET[n]

Address offset: 0x030 + (n × 0x4)

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_SET

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it high.

Trigger

1

Trigger task

TASKS_CLR[n]

Address offset: 0x060 + (n × 0x4)

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_CLR

Task for writing to pin specified in CONFIG[n].PSEL. Action on pin is to set it low.

Trigger

1

Trigger task

SUBSCRIBE_OUT[n]

Address offset: 0x080 + (n × 0x4)

Subscribe configuration for task OUT[n]

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that task OUT[n] will subscribe to

B

RW

EN

Disabled

0

Disable subscription

Enabled

1

Enable subscription

SUBSCRIBE_SET[n]

Address offset: 0x0B0 + (n × 0x4)

Subscribe configuration for task SET[n]

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that task SET[n] will subscribe to

B

RW

EN

Disabled

0

Disable subscription

Enabled

1

Enable subscription

SUBSCRIBE_CLR[n]

Address offset: 0x0E0 + (n × 0x4)

Subscribe configuration for task CLR[n]

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that task CLR[n] will subscribe to

B

RW

EN

Disabled

0

Disable subscription

Enabled

1

Enable subscription

EVENTS_IN[n]

Address offset: 0x100 + (n × 0x4)

Event from pin specified in CONFIG[n].PSEL

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_IN

Event from pin specified in CONFIG[n].PSEL

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_PORT[n]

Peripheral events.

EVENTS_PORT[n].NONSECURE

Address offset: 0x140 + (n × 0x8)

Non-secure port event

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A

RW

NS

NONSECURE

Non-secure port event

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_PORT[n].SECURE

Address offset: 0x144 + (n × 0x8)

Secure port event

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A

RW

S

SECURE

Secure port event

NotGenerated

0

Event not generated

Generated

1

Event generated

PUBLISH_IN[n]

Address offset: 0x180 + (n × 0x4)

Publish configuration for event IN[n]

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event IN[n] will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

PUBLISH_PORT[n]

Publish configuration for events

PUBLISH_PORT[n].NONSECURE

Address offset: 0x1C0 + (n × 0x8)

Publish configuration for event PORT[n].NONSECURE

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event PORT[n].NONSECURE will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

PUBLISH_PORT[n].SECURE

Address offset: 0x1C4 + (n × 0x8)

Publish configuration for event PORT[n].SECURE

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event PORT[n].SECURE will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

INTENSET0

Address offset: 0x304

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDJIHGFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A-H

RW
W1S

IN[i] (i=0..7)

Write '1' to enable interrupt for event IN[i]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

I

RW
W1S

NS

PORT0NONSECURE

Write '1' to enable interrupt for event PORT0NONSECURE

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

J

RW
W1S

S

PORT0SECURE

Write '1' to enable interrupt for event PORT0SECURE

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTENCLR0

Address offset: 0x308

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDJIHGFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A-H

RW
W1C

IN[i] (i=0..7)

Write '1' to disable interrupt for event IN[i]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

I

RW
W1C

NS

PORT0NONSECURE

Write '1' to disable interrupt for event PORT0NONSECURE

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

J

RW
W1C

S

PORT0SECURE

Write '1' to disable interrupt for event PORT0SECURE

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTENSET1

Address offset: 0x314

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDJIHGFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A-H

RW
W1S

IN[i] (i=0..7)

Write '1' to enable interrupt for event IN[i]

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

I

RW
W1S

NS

PORT0NONSECURE

Write '1' to enable interrupt for event PORT0NONSECURE

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

J

RW
W1S

S

PORT0SECURE

Write '1' to enable interrupt for event PORT0SECURE

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTENCLR1

Address offset: 0x318

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDJIHGFEDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WTZFieldValue IDValueDescription
A-H

RW
W1C

IN[i] (i=0..7)

Write '1' to disable interrupt for event IN[i]

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

I

RW
W1C

NS

PORT0NONSECURE

Write '1' to disable interrupt for event PORT0NONSECURE

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

J

RW
W1C

S

PORT0SECURE

Write '1' to disable interrupt for event PORT0SECURE

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

CONFIG[n]

Address offset: 0x510 + (n × 0x4)

Configuration for OUT[n], SET[n], and CLR[n] tasks and IN[n] event

Bit number313029282726252423222120191817161514131211109876543210
IDEDDCCCCBBBBBAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

MODE

Mode

Disabled

0

Disabled. Pin specified by PSEL will not be acquired by the GPIOTE module.

Event

1

Event mode

The pin specified by PSEL will be configured as an input and the IN[n] event will be generated if operation specified in POLARITY occurs on the pin.

Task

3

Task mode

The GPIO specified by PSEL will be configured as an output and triggering the SET[n], CLR[n] or OUT[n] task will perform the operation specified by POLARITY on the pin. When enabled as a task the GPIOTE module will acquire the pin and the pin can no longer be written as a regular output pin from the GPIO module.

B

RW

PSEL

[0..31]

GPIO number associated with SET[n], CLR[n], and OUT[n] tasks and IN[n] event

C

RW

PORT

[0..15]

Port number

D

RW

POLARITY

When In task mode: Operation to be performed on output when OUT[n] task is triggered. When In event mode: Operation on input that shall trigger IN[n] event.

None

0

Task mode: No effect on pin from OUT[n] task. Event mode: no IN[n] event generated on pin activity.

LoToHi

1

Task mode: Set pin from OUT[n] task. Event mode: Generate IN[n] event when rising edge on pin.

HiToLo

2

Task mode: Clear pin from OUT[n] task. Event mode: Generate IN[n] event when falling edge on pin.

Toggle

3

Task mode: Toggle pin from OUT[n]. Event mode: Generate IN[n] when any change on pin.

E

RW

OUTINIT

When in task mode: Initial value of the output when the GPIOTE channel is configured. When in event mode: No effect.

Low

0

Task mode: Initial value of pin before task triggering is low

High

1

Task mode: Initial value of pin before task triggering is high