GPIO
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器。
K210上有高速gpio和通用gpio 在 K210 上, GPIO 有一下特征:
高速 GPIO:
高速 GPIO 为 GPIOHS,共 32 个。具有如下特点:
- 可配置输入输出信号
- 每个 IO 具有独立中断源
- 中断支持边沿触发和电平触发
- 每个 IO 可以分配到 FPIOA 上 48 个管脚之一
- 可配置上下拉,或者高阻
通用 GPIO:
通用 GPIO 共 8 个,具有如下特点:
- 8 个 IO 使用一个中断源
- 可配置输入输出信号
- 可配置触发 IO 总中断,边沿触发和电平触发
- 每个 IO 可以分配到 FPIOA 上 48 个管脚之一
注意:
一下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:
GPIOHS | 功能 |
---|---|
GPIOHS31 | LCD_DC |
GPIOHS30 | LCD_RST |
GPIOHS29 | SD_CS |
GPIOHS28 | MIC_LED_CLK |
GPIOHS27 | MIC_LED_DATA |
1. 构造函数
class GPIO(ID,MODE,PULL,VALUE)
通过指定的参数新建一个 SPI 对象
1.1. 参数
ID
: 使用的GPIO引脚(一定要使用GPIO里带的常量来指定)MODE
: GPIO模式 • GPIO.IN就是输入模式
• GPIO.OUT就是输出模式
PULL
: GPIO上下拉模式 • GPIO.PULL_UP 上拉
• GPIO.PULL_DOWN 下拉
• GPIO.PULL_NONE 即不上拉也不下拉
2. 方法
2.1. value
修改/读取GPIO引脚状态
GPIO.value([value])
参数
[value]
: 可选参数,如果此参数不为空,则返回当前GPIO引脚状态
返回值
如果[value]
参数不为空,则返回当前GPIO引脚状态
2.2. irq
配置一个中断处理程序,当pin的触发源处于活动状态时调用它。如果管脚模式为pin.in,则触发源是管脚上的外部值。
GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION,GPIO.WAKEUP_NOT_SUPPORT,PRORITY)
参数
CALLBACK_FUNC
:回调函数,当中断触发的时候被调用,他拥有两个参数,GPIO和PIN_NUM • GPIO返回的是GPIO对象
• PIN_NUM返回的是触发中断的GPIO引脚号(只有GPIOHS支持中断,所以这里的引脚号也是GPIOHS的引脚号)
TRIGGER_CONDITION
:当GPIO引脚处于这个状态时触发中断 • GPIO.IRQ_RISING 上升沿触发
• GPIO.IRQ_RISING 下降沿触发
• GPIO.IRQ_BOTH 上升沿和下降沿都触发
返回值
无
2.3. disirq
关闭中断
GPIO.disirq()
参数
无
返回值
无
2.4. mode
GPIO模式
GPIO.mode(MODE)
参数
MODE
• GPIO.IN就是输入模式
• GPIO.OUT就是输出模式
返回值
无
2.5. pull
GPIO上下拉模式
GPIO.pull(PULL)
参数
PULL
• GPIO.IRQ_RISING 上升沿触发
• GPIO.IRQ_RISING 下降沿触发
• GPIO.IRQ_BOTH 上升沿和下降沿都触发
返回值
无
3. 常量
GPIO0
: GPIO0GPIO1
: GPIO1GPIO2
: GPIO2GPIO3
: GPIO3GPIO4
: GPIO4GPIO5
: GPIO5GPIO6
: GPIO6GPIO7
: GPIO7GPIOHS0
: GPIOHS0GPIOHS1
: GPIOHS1GPIOHS2
: GPIOHS2GPIOHS3
: GPIOHS3GPIOHS4
: GPIOHS4GPIOHS5
: GPIOHS5GPIOHS6
: GPIOHS6GPIOHS7
: GPIOHS7GPIOHS8
: GPIOHS8GPIOHS9
: GPIOHS9GPIOHS10
: GPIOHS10GPIOHS11
: GPIOHS11GPIOHS12
: GPIOHS12GPIOHS13
: GPIOHS13GPIOHS14
: GPIOHS14GPIOHS15
: GPIOHS15GPIOHS16
: GPIOHS16GPIOHS17
: GPIOHS17GPIOHS18
: GPIOHS18GPIOHS19
: GPIOHS19GPIOHS20
: GPIOHS20GPIOHS21
: GPIOHS21GPIOHS22
: GPIOHS22GPIOHS23
: GPIOHS23GPIOHS24
: GPIOHS24GPIOHS25
: GPIOHS25GPIOHS26
: GPIOHS26GPIOHS27
: GPIOHS27GPIOHS28
: GPIOHS28GPIOHS29
: GPIOHS29GPIOHS30
: GPIOHS30GPIOHS31
: GPIOHS31GPIO.IN
: 输入模式GPIO.OUT
:输出模式GPIO.PULL_UP
:上拉GPIO.PULL_DOWN
:下拉GPIO.PULL_NONE
:即不上拉也不下拉GPIO.IRQ_RISING
:上升沿触发GPIO.IRQ_RISING
:下降沿触发GPIO.IRQ_BOTH
:上升沿和下降沿都触发
3.1. DEMO1
import utime
from Maix import GPIO
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,fm.fpioa.GPIO0)
3.2. DEMO2
import utime
from Maix import GPIO
fm.register(board_info.LED_R,fm.fpioa.GPIO0)
led_r=GPIO(GPIO.GPIO0,GPIO.IN)
utime.sleep_ms(500)
led_r.value()
fm.unregister(board_info.LED_R,fm.fpioa.GPIO0)
3.3. DEMO3
import utime
from Maix import GPIO
def test_irq(GPIO,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(500)
key.value()
key.irq(test_irq,GPIO.IRQ_BOTH,GPIO.WAKEUP_NOT_SUPPORT,7)
key.disirq()
fm.unregister(board_info.BOOT_KEY,fm.fpioa.GPIOHS0)