1、I/O
IO即 Input Output,是计算机中的输入输出系统,用于 CPU 与外界进行信息交互。例如CPU 读内存数据需要 I/O 系统,CPU 输出数据到屏幕显示出来也需要 I/O 系统,信息在 I/O 系统上传输有并行或并行,所谓串行就是数据在一条线上传输,并行就是数据在多条线上传输,即并行一次传输多个bit,串行每次传输一个bit。
2、GPIO
GPIO,英文全称为General-Purpose IO ports,也就是通用I/O口。在微控制器芯片上一般都会提供一个“通用可编程I/O接口”。接口至少有两个寄存器,即“控制方向寄存器”与“数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向是输入还是输出,则能够通过控制寄存器中相应位独立的加以设置。这样,有无 IO 接口也就成为微控制器差别于微处理器的一个特征。(不同MCU,寄存器配置不一样)
K210使用的是FPIOA (现场可编程 IO 阵列),所以每次使用硬件 IO 口前都需要对硬件 IO口进行引脚映射。而且在软件中调用的也是软件映射后的软件 GPIO允许用户将 255 个内部功能映射到芯片外围的 48 个自由IO 上:
• 支持IO 的可编程功能选择
• 支持IO 输出的8 种驱动能力选择
• 支持IO 的内部上拉电阻选择
• 支持IO 的内部下拉电阻选择
• 支持IO 输入的内部施密特触发器设置
• 支持IO 输出的斜率控制
• 支持内部输入逻辑的电平设置
MAIX BIT上以下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:
GPIOHS | 功能 |
---|---|
GPIOHS31 | LCD_DC |
GPIOHS30 | LCD_RST |
GPIOHS29 | SD_CS |
GPIOHS28 | MIC_LED_CLK |
GPIOHS27 | MIC_LED_DATA |
更多可以查看MAIX BIT的原理图
1、
class GPIO(ID, MODE, PULL, VALUE)
通过指定的参数新建一个 SPI 对象
参数说明:
ID: 使用的 GPIO 引脚(一定要使用 GPIO 里带的常量来指定,如GPIO0、GPIO1)
MODE: GPIO模式
• GPIO.IN就是输入模式
• GPIO.OUT就是输出模式
PULL: GPIO上下拉模式
• GPIO.PULL_UP 上拉
• GPIO.PULL_DOWN 下拉
• GPIO.PULL_NONE 即不上拉也不下拉
2、
GPIO.value([value])
修改/读取 GPIO 引脚状态
参数说明:
[value]: 可选参数,如果此参数不为空,则返回当前 GPIO 引脚状态
3、
GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION,GPIO.WAKEUP_NOT_SUPPORT,PRORITY)
配置一个中断处理程序,当 pin 的触发源处于活动状态时调用它。如果管脚模式为 pin.in,则触发源是管脚上的外部值。
参数说明:
CALLBACK_FUNC:中断回调函数,当中断触发的时候被调用,一个入口函数 pin_num
• PIN_NUM 返回的是触发中断的 GPIO 引脚号(只有GPIOHS支持中断,所以这里的引脚号也是GPIOHS的引脚号)
TRIGGER_CONDITION:GPIO 引脚的中断触发模式
• GPIO.IRQ_RISING 上升沿触发
• GPIO.IRQ_FALLING 下降沿触发
• GPIO.IRQ_BOTH 上升沿和下降沿都触发
4、
GPIO.disirq()
关闭中断
5、
GPIO.mode(MODE)
设置 GPIO 输入输出模式
参数说明:
MODE:
• GPIO.IN 输入模式
• GPIO.PULL_UP 上拉输入模式
• GPIO.PULL_DOWN 下拉输入模式
• GPIO.OUT 输出模式
K210 支持每个外设随意映射到任意引脚, 使用 FPIOA 功能来实现,点击这里查看外设表
1、help(func)
显示外设及其简要描述
from Maix import FPIOA
fpioa = FPIOA()
fpioa.help()
fpioa.help(0)
fpioa.help(fpioa.JTAG_TCLK)
参数说明:
func: 外设名(功能/编号),可以不传参, 则以表格的形式显示所有外设名即简要描述,这个表格也可以在本页的末尾找到(附录:外设表);如果传参,则传一个整型值, 找到该编号对应的外设后会打印外设名和描述,比如 FPIOA.JTAG_TCLK 或者 fm.fpioa.JTAG_TCLK(fm在本页后面介绍) 或者 0
2、set_function(pin, func)
设置引脚对应的外设功能, 即引脚映射
fpioa = FPIOA()
fpioa.set_function(board_info.LED_G, fm.fpioa.GPIOHS0)
参数说明:
pin: 引脚编号,取值 [0, 47], 具体的引脚连接请看电路图, 也可以使用 board_info. 然后按 TAB 按键补全来获得板子的常用引脚,比如 board_info.LED_G
func: 外设功能,传一个整型值,可以通过 fm.fpioa.help()或者查外设表
比如 需要将连接 绿色 LED 的引脚映射到 高速 GPIO0 上:
3、get_Pin_num(func)
获取外设映射到哪个引脚上了
既然了解了MAIX BIT的GPIO和FPIOA功能,那么下一步就是像学习所有单片机的第一步一样——点亮LED。
通过观察MAIX BIT我们可以看到它板载了一颗RGB灯(找了半天)
然后看原理图知道,rgb分别连接了io12、io13、io14三个管脚,并且为低电平点亮
MaixPy 所使用的硬件 K210 的片上外设对应的引脚(硬件引脚)是可以任意映射的,相比之下 K210 硬件设计和软件设计的自由度更大。 比如 I2C 可以使用 Pin11 和 Pin12,也可以改成其它任意引脚,因为有了这个强大的映射功能, 所以在使用引脚时,需要增加一步映射的步骤:
from fpioa_manager import fm # 导入库
fm.register(12, fm.fpioa.GPIO0)
这里我们将引脚 14映射为了 GPIO0 的功能, 执行了这句命令后,引脚14和GPIO0就映射(绑定)好了,要取消映射(解绑),则需要调用fm.unregister函数。
点亮LED代码
from fpioa_manager import fm
from Maix import GPIO
io_led_blue = 14
fm.register(io_led_blue, fm.fpioa.GPIO0)
led_b=GPIO(GPIO.GPIO0, GPIO.OUT)
led_b.value(0)
通过在线运行代码后,我们发现蓝灯被点亮了
分析代码:
从 fpioa_manager 包导入fm 对象,主要用于引脚和外设的映射
从包 Maix 导入了 GPIO 这个类, GPIO 外设相关操作
定义一个变量io_led_blue,值为14,即Pin13/IO13, 具体 LED 的引脚连接到了芯片的哪个引脚,请在前面的开发板介绍中看原理图
使用fm(fpioa manager 的缩写)这个内置的对象来注册芯片的外设和引脚的对应关系, 这里 fm.fpioa.GPIO0 是 K210 的一个 GPIO 外设(注意区分 GPIO(外设) 和引脚(实实在在的硬件引脚)的区别 ), 所以把 fm.fpioa.GPIO0 注册到了 引脚 IO14;
使用 led_b.value(1) 或者 led_b.value(0) 来设置高低电平即可, 因为这里设置了低电平, 根据上面的原理图可知低电平导通,LED 灯亮
K210 的片上外设对应的引脚(硬件引脚)是可以任意映射的,相比之下 K210 硬件设计和软件设计的自由度更大。