GPIO

General Purpose Input Output (General Purpose Input/Output) is abbreviated as GPIO, or bus extender.

There are high-speed GPIO (GPIOHS) and general-purpose GPIO on K210
On K210, GPIO has the following characteristics:

  • High-speed GPIO:

    The high-speed GPIO is GPIOHS, 32 in total. It has the following characteristics:

    • Configurable input and output signals
    • Each IO has an independent interrupt source
    • Interrupt supports edge trigger and level trigger
    • Each IO can be assigned to one of the 48 pins on FPIOA
    • Configurable up and down
  • General GPIO:

    There are 8 general-purpose GPIOs with the following characteristics:

    • 8 IOs use one interrupt source
    • Configurable input and output signals
    • Configurable trigger IO total interrupt, edge trigger and level trigger
    • Each IO can be assigned to one of the 48 pins on FPIOA

note:

The following GPIOHS has been used by default, try not to use it unless necessary in the program:

GPIOHS Function
GPIOHS31 LCD_DC
GPIOHS30 LCD_RST
GPIOHS29 SD_CS
GPIOHS28 MIC_LED_CLK
GPIOHS27 MIC_LED_DATA

Constructor

class GPIO(ID, MODE, PULL, VALUE)

Create a new SPI object with the specified parameters

Parameters

  • ID: the used GPIO pin (must use the constant in GPIO to specify)

  • MODE: GPIO mode

    • GPIO.IN is the input mode

    • GPIO.OUT is the output mode

  • PULL: GPIO pull-up mode

    • GPIO.PULL_UP pull up

    ​• GPIO.PULL_DOWN pull down

    ​• GPIO.PULL_NONE neither pull up nor pull down

Method

value

Modify/read GPIO pin status

GPIO.value([value])

Parameters

  • [value]: Optional parameter, if this parameter is not empty, it returns the current GPIO pin status

return value

If the [value] parameter is not empty, return the current GPIO pin status

irq

Configure an interrupt handler to be called when the trigger source of pin is active. If the pin mode is pin.in, the trigger source is the external value on the pin.

GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION,GPIO.WAKEUP_NOT_SUPPORT,PRORITY)

Parameters

  • CALLBACK_FUNC: Interrupt callback function, which is called when the interrupt is triggered, an entry function pin_num

    ​• PIN_NUM returns the GPIO pin number that triggered the interrupt (only GPIOHS supports interrupts, so the pin number here is also the pin number of GPIOHS)

  • TRIGGER_CONDITION: Interrupt trigger mode of GPIO pin

    ​• GPIO.IRQ_RISING rising edge trigger

    ​• GPIO.IRQ_FALLING falling edge trigger

    ​• GPIO.IRQ_BOTH triggers on both rising and falling edges

return value

no

disirq

Close interrupt

GPIO.disirq()

Parameters

no

return value

no

mode

Set GPIO input and output mode

GPIO.mode(MODE)

Parameters

  • MODE

    GPIO.IN input mode

    GPIO.PULL_UP pull-up input mode

    GPIO.PULL_DOWN pull-down input mode

    GPIO.OUT output mode

return value

no

Constant

  • GPIO0: GPIO0
  • GPIO1: GPIO1
  • GPIO2: GPIO2
  • GPIO3: GPIO3
  • GPIO4: GPIO4
  • GPIO5: GPIO5
  • GPIO6: GPIO6
  • GPIO7: GPIO7
  • GPIOHS0: GPIOHS0
  • GPIOHS1: GPIOHS1
  • GPIOHS2: GPIOHS2
  • GPIOHS3: GPIOHS3
  • GPIOHS4: GPIOHS4
  • GPIOHS5: GPIOHS5
  • GPIOHS6: GPIOHS6
  • GPIOHS7: GPIOHS7
  • GPIOHS8: GPIOHS8
  • GPIOHS9: GPIOHS9
  • GPIOHS10: GPIOHS10
  • GPIOHS11: GPIOHS11
  • GPIOHS12: GPIOHS12
  • GPIOHS13: GPIOHS13
  • GPIOHS14: GPIOHS14
  • GPIOHS15: GPIOHS15
  • GPIOHS16: GPIOHS16
  • GPIOHS17: GPIOHS17
  • GPIOHS18: GPIOHS18
  • GPIOHS19: GPIOHS19
  • GPIOHS20: GPIOHS20
  • GPIOHS21: GPIOHS21
  • GPIOHS22: GPIOHS22
  • GPIOHS23: GPIOHS23
  • GPIOHS24: GPIOHS24
  • GPIOHS25: GPIOHS25
  • GPIOHS26: GPIOHS26
  • GPIOHS27: GPIOHS27
  • GPIOHS28: GPIOHS28
  • GPIOHS29: GPIOHS29
  • GPIOHS30: GPIOHS30
  • GPIOHS31: GPIOHS31
  • GPIO.IN: input mode
  • GPIO.OUT: output mode
  • GPIO.PULL_UP: pull up
  • GPIO.PULL_DOWN: pull down
  • GPIO.PULL_NONE: neither pull up nor pull down
  • GPIO.IRQ_RISING: rising edge trigger
  • GPIO.IRQ_FALLING: falling edge trigger
  • GPIO.IRQ_BOTH: trigger on both rising and falling edges

DEMO1: Turn on the LED

board_info is related to the board, and different board configurations are different. Manual configuration is required before use.

import utime
from Maix import GPIO
from board import board_info
from fpioa_manager import fm

fm.register(board_info.LED_R,fm.fpioa.GPIO0)
led_r=GPIO(GPIO.GPIO0,GPIO.OUT)
utime.sleep_ms(500)
led_r.value()
fm.unregister(board_info.LED_R)

DEMO2: Press the button to light up the LED

board_info is related to the board, and different board configurations are different. Manual configuration is required before use.

import utime
from Maix import GPIO
from board import board_info
from fpioa_manager import fm

fm.register(board_info.LED_R,fm.fpioa.GPIO0)
led_b = GPIO(GPIO.GPIO0,GPIO.OUT)
led_b.value(1)

fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS1)
key = GPIO(GPIO.GPIOHS1, GPIO.IN)

utime.sleep_ms(100)
while True:
    if key.value() == 0: # Wait for the button to be pressed
        led_b.value(0)
        utime.sleep_ms(1000)
        break
    utime.sleep_ms(10)


led_b.value(1)

fm.unregister(board_info.LED_R)
fm.unregister(board_info.BOOT_KEY)

DEMO3: Wait for the key to trigger an interrupt within 3 seconds

board_info is related to the board, and different board configurations are different. Manual configuration is required before use.

import utime
from Maix import GPIO
from board import board_info
from fpioa_manager import fm

def test_irq(pin_num):
    print("key", pin_num, "\n")

fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS0)
key = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_NONE)

utime.sleep_ms(100)
key.irq(test_irq, GPIO.IRQ_BOTH, GPIO.WAKEUP_NOT_SUPPORT,7)
utime.sleep_ms(3000) # Wait for the trigger within 3 seconds

key.disirq() # Disable interrupt
fm.unregister(board_info.BOOT_KEY)