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)