Port Interrupt Functions

group group_gpio_functions_interrupt

Functions

uint32_t Cy_GPIO_GetInterruptStatus(GPIO_PRT_Type *base, uint32_t pinNum)

Returns the current unmasked interrupt state of the pin.

The core processor’s NVIC is triggered by the masked interrupt bits. This function allows reading the unmasked interrupt state. Whether the bit positions actually trigger the interrupt are defined by the interrupt mask bits.

Return

0 = Pin interrupt condition not detected 1 = Pin interrupt condition detected

Function Usage


    /* Scenario: Clear stale (unmasked) port interrupts before reconfiguration */
    
    if(1UL == Cy_GPIO_GetInterruptStatus(P0_3_PORT, P0_3_NUM))
    {
        /* Clear the P0.3 interrupt */
        Cy_GPIO_ClearInterrupt(P0_3_PORT, P0_3_NUM);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register Bit position 8 is the routed pin through the port glitch filter.

void Cy_GPIO_ClearInterrupt(GPIO_PRT_Type *base, uint32_t pinNum)

Clears the triggered pin interrupt.

Function Usage


    /* Scenario: Inside the interrupt service routine of port 0 interrupt */
    
    /* Clear the P0.3 interrupt */
    Cy_GPIO_ClearInterrupt(P0_3_PORT, P0_3_NUM);

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register Bit position 8 is the routed pin through the port glitch filter.

void Cy_GPIO_SetInterruptMask(GPIO_PRT_Type *base, uint32_t pinNum, uint32_t value)

Configures the pin interrupt to be forwarded to the CPU NVIC.

note

This function modifies a port register in a read-modify-write operation. It is not thread safe as the resource is shared among multiple pins on a port.

Function Usage


    /* Scenario: Need port interrupt to trigger on P0.3 */
    
    /* Get the interrupt mask of P0.3 */
    if(0UL == Cy_GPIO_GetInterruptMask(P0_3_PORT, P0_3_NUM))
    {
        /* Set the interrupt mask of P0.3 */
        Cy_GPIO_SetInterruptMask(P0_3_PORT, P0_3_NUM, 1UL);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

  • value: 0 = Pin interrupt not forwarded to CPU interrupt controller 1 = Pin interrupt masked and forwarded to CPU interrupt controller

uint32_t Cy_GPIO_GetInterruptMask(GPIO_PRT_Type *base, uint32_t pinNum)

Returns the state of the pin interrupt mask.

This mask is used to determine whether the pin is configured to be forwarded to the CPU NVIC.

Return

0 = Pin interrupt not forwarded to CPU interrupt controller 1 = Pin interrupt masked and forwarded to CPU interrupt controller

Function Usage


    /* Scenario: Need port interrupt to trigger on P0.3 */
    
    /* Get the interrupt mask of P0.3 */
    if(0UL == Cy_GPIO_GetInterruptMask(P0_3_PORT, P0_3_NUM))
    {
        /* Set the interrupt mask of P0.3 */
        Cy_GPIO_SetInterruptMask(P0_3_PORT, P0_3_NUM, 1UL);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

uint32_t Cy_GPIO_GetInterruptStatusMasked(GPIO_PRT_Type *base, uint32_t pinNum)

Return the pin’s current interrupt state after being masked.

The core processor’s NVIC is triggered by the masked interrupt bits. This function allows reading this masked interrupt state. Note that the bits that are not masked will not be forwarded to the NVIC.

Return

0 = Pin interrupt not detected or not forwarded to CPU interrupt controller 1 = Pin interrupt detected and forwarded to CPU interrupt controller

Function Usage


    /* Scenario: Inside the interrupt service routine of port 0 interrupt */
    
    if(1UL == Cy_GPIO_GetInterruptStatusMasked(P0_3_PORT, P0_3_NUM))
    {
        /* Clear the P0.3 interrupt */
        Cy_GPIO_ClearInterrupt(P0_3_PORT, P0_3_NUM);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

void Cy_GPIO_SetSwInterrupt(GPIO_PRT_Type *base, uint32_t pinNum)

Force a pin interrupt to trigger.

Function Usage


    /* Scenario: Test that the port interrupt triggers */
    
    /* Set the P0.3 interrupt through software */
    Cy_GPIO_SetSwInterrupt(P0_3_PORT, P0_3_NUM);

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

void Cy_GPIO_SetInterruptEdge(GPIO_PRT_Type *base, uint32_t pinNum, uint32_t value)

Configures the type of edge that will trigger a pin interrupt.

note

This function modifies a port register in a read-modify-write operation. It is not thread safe as the resource is shared among multiple pins on a port.

Function Usage


    /* Scenario: Update the port interrupt trigger type to falling edge */
    
    /* Get the interrupt edge setting of P0.3 */
    if(CY_GPIO_INTR_RISING == Cy_GPIO_GetInterruptEdge(P0_3_PORT, P0_3_NUM))
    {
        /* Set the interrupt trigger type to falling edge for P0.3 */
        Cy_GPIO_SetInterruptEdge(P0_3_PORT, P0_3_NUM, CY_GPIO_INTR_FALLING);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

  • value: Pin interrupt mode. Options are detailed in Interrupt trigger type macros

uint32_t Cy_GPIO_GetInterruptEdge(GPIO_PRT_Type *base, uint32_t pinNum)

Returns the current pin interrupt edge type.

Return

Pin interrupt mode. Options are detailed in Interrupt trigger type macros

Function Usage


    /* Scenario: Update the port interrupt trigger type to falling edge */
    
    /* Get the interrupt edge setting of P0.3 */
    if(CY_GPIO_INTR_RISING == Cy_GPIO_GetInterruptEdge(P0_3_PORT, P0_3_NUM))
    {
        /* Set the interrupt trigger type to falling edge for P0.3 */
        Cy_GPIO_SetInterruptEdge(P0_3_PORT, P0_3_NUM, CY_GPIO_INTR_FALLING);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • pinNum: Position of the pin bit-field within the port register. Bit position 8 is the routed pin through the port glitch filter.

void Cy_GPIO_SetFilter(GPIO_PRT_Type *base, uint32_t value)

Configures which pin on the port connects to the port-specific glitch filter.

Each port contains a single 50ns glitch filter. Any of the pins on the port can be routed to this filter such that the input signal is filtered before reaching the edge-detect interrupt circuitry. The state of the filtered pin can also be read by calling the Cy_GPIO_Read() function.

note

This function modifies a port register in a read-modify-write operation. It is not thread safe as the resource is shared among multiple pins on a port.

note

The filtered pin does not have an associated HSIOM connection. Therefore it cannot be routed directly to other peripherals in hardware.

Function Usage


    /* Scenario: Utilize the glitch filter for input signal on P0.3 */
    
    /* Get the source of the port 0 glitch filter */
    if(P0_3_NUM != Cy_GPIO_GetFilter(P0_3_PORT))
    {
        /* Set the port 0 glitch filter source to be P0.3 */
        Cy_GPIO_SetFilter(P0_3_PORT, P0_3_NUM);
    }

Parameters
  • base: Pointer to the pin’s port register base address

  • value: The number of the port pin to route to the port filter (0…7)

uint32_t Cy_GPIO_GetFilter(GPIO_PRT_Type *base)

Returns which pin is currently configured to connect to the port-specific glitch filter.

Each port contains a single 50ns glitch filter. Any of the pins on the port can be routed to this filter such that the input signal is filtered before reaching the edge-detect interrupt circuitry. The state of the filtered pin can also be read by calling the Cy_GPIO_Read() function.

Return

The number of the port pin routed to the port filter (0…7)

Function Usage


    /* Scenario: Utilize the glitch filter for input signal on P0.3 */
    
    /* Get the source of the port 0 glitch filter */
    if(P0_3_NUM != Cy_GPIO_GetFilter(P0_3_PORT))
    {
        /* Set the port 0 glitch filter source to be P0.3 */
        Cy_GPIO_SetFilter(P0_3_PORT, P0_3_NUM);
    }

Parameters
  • base: Pointer to the pin’s port register base address

__STATIC_INLINE uint32_t Cy_GPIO_GetInterruptCause0 (void)

Returns the interrupt status for ports 0 to 31.

Return

0 = Interrupt not detected on port 1 = Interrupt detected on port

Function Usage


    /* Scenario: Inside the interrupt service routine of "all port" interrupt */
    
    #define PORT0_INTR_MASK  0x00000001UL
    uint32_t intrSrc = Cy_GPIO_GetInterruptCause0();
    
    /* Check if the interrupt was from port 0 */
    if(PORT0_INTR_MASK == (intrSrc & PORT0_INTR_MASK))
    {
        if(1UL == Cy_GPIO_GetInterruptStatusMasked(P0_3_PORT, P0_3_NUM))
        {
            /* Clear the P0.3 interrupt */
            Cy_GPIO_ClearInterrupt(P0_3_PORT, P0_3_NUM);
        }
    }       

__STATIC_INLINE uint32_t Cy_GPIO_GetInterruptCause1 (void)

Returns the interrupt status for ports 32 to 63.

Return

0 = Interrupt not detected on port 1 = Interrupt detected on port

Function Usage

Refer to the Cy_GPIO_GetInterruptCause0() example.

__STATIC_INLINE uint32_t Cy_GPIO_GetInterruptCause2 (void)

Returns the interrupt status for ports 64 to 95.

Return

0 = Interrupt not detected on port 1 = Interrupt detected on port

Function Usage

Refer to the Cy_GPIO_GetInterruptCause0() example.

__STATIC_INLINE uint32_t Cy_GPIO_GetInterruptCause3 (void)

Returns the interrupt status for ports 96 to 127.

Return

0 = Interrupt not detected on port 1 = Interrupt detected on port

Function Usage

Refer to the Cy_GPIO_GetInterruptCause0() example.