User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 385
UG585 (v1.11) September 27, 2016
Chapter 14: General Purpose I/O (GPIO)
These bits can be used as general purpose outputs since the output driver is disabled at reset. The
system can start using these as outputs after the voltage mode has been read during system boot.
14.2.4 Interrupt Function
The interrupt detection logic monitors the GPIO input signal. The interrupt trigger can be a positive
edge, negative edge, either edge, Low-level or High-level. The trigger sensitivity is programmed
using the INT_TYPE, INT_POLARITY and INT_ANY registers.
If an interrupt is detected, the GPIO's INT_STAT state is set true by the interrupt detection logic. If the
INT_STAT state is enabled (unmasked), then the interrupt propagates through to a large OR function.
This function combines all interrupts for all GPIOs in all four banks to one output (IRQ ID#52) to the
interrupt controller. If the interrupt is disabled (masked), then the INT_STAT state is maintained until
cleared, but it does not propagate to the interrupt controller unless the INT_EN is later written to
disable the mask. As all GPIOs share the same interrupt, software must consider both INT_MASK and
INT_STAT to determine which GPIO is causing an interrupt.
The interrupt mask state is controlled by writing a 1 to the INT_EN and INT_DIS registers. Writing a
1 to the INT_EN register disables the mask allowing an active interrupt to propagate to the interrupt
controller. Writing a 1 to the INT_DIS register enables the mask. The state of the interrupt mask can
be read using the INT_MASK register.
If the GPIO interrupt is edge sensitive, then the INT state is latched by the detection logic. The INT
latch is cleared by writing a 1 to the INT_STAT register. For level-sensitive interrupts, the source of the
interrupt input to the GPIO must be cleared in order to clear the interrupt signal. Alternatively,
software can mask that input using the INT_DIS register.
The state of the interrupt signal going to the interrupt controller can be inferred by reading the
INT_STAT and INT_MASK registers. This interrupt signal is asserted if INT_STAT=1 and INT_MASK=0.
GPIO bank control is summarized as follows:
INT_MASK: This register is read-only and shows which bits are currently masked and which are
un-masked/enabled.
INT_EN: Writing a 1 to any bit of this register enables/unmasks that signal for interrupts.
Reading from this register returns an unpredictable value.
INT_DIS: Writing a 1 to any bit of this register masks that signal for interrupts. Reading from
this register returns an unpredictable value.
INT_STAT: This registers shows if an interrupt event has occurred or not. Writing a 1 to a bit in
this register clears the interrupt status for that bit. Writing a 0 to a bit in this register is ignored.
INT_TYPE: This register controls whether the interrupt is edge sensitive or level sensitive.
INT_POLARITY: This register controls whether the interrupt is active-Low or active High (or
falling-edge sensitive or rising-edge sensitive).
INT_ON_ANY: If INT_TYPE is set to edge sensitive, then this register enables an interrupt event
on both rising and falling edges. This register is ignored if INT_TYPE is set to level sensitive.