K210 学习(二)FPIOA和GPIO

K210的GPIO

K210使用的是FPIOA (现场可编程 IO 阵列),所以每次使用硬件 IO 口前都需要对硬件 IO口进行引脚映射。而且在软件中调用的也是软件映射后的软件 GPIO允许用户将 255 个内部功能映射到芯片外围的 48 个自由IO 上:
• 支持IO 的可编程功能选择
• 支持IO 输出的8 种驱动能力选择
• 支持IO 的内部上拉电阻选择
• 支持IO 的内部下拉电阻选择
• 支持IO 输入的内部施密特触发器设置
• 支持IO 输出的斜率控制
• 支持内部输入逻辑的电平设置
也就是说,我们可以随意定义引脚,然后通过fpioa将实际上硬件连接的引脚去自由映射到我们定义的引脚。

库的导入

from fpioa_manager import fm

举例:我们要把蓝灯的硬件io35映射到0上

io_led_blue = 35
fm.register(io_led_blue, fm.fpioa.GPIO0)

通过fm.register就可以重映射了。

GPIO函数

关于gpio不多说了,直接讲使用吧。

首先是导入库,k210的gpio是在maix模块上的

from Maix import GPIO

然后是构造函数

class GPIO(ID, MODE, PULL, VALUE)

可以看到这个类里面的参数,通过指定的参数新建一个 SPI 对象。

参数

  • ID: 使用的 GPIO 引脚(一定要使用 GPIO 里带的常量来指定)

  • MODE: GPIO模式

    • GPIO.IN就是输入模式

    • GPIO.OUT就是输出模式

  • PULL: GPIO上下拉模式

    • GPIO.PULL_UP 上拉

    ​• GPIO.PULL_DOWN 下拉

    ​• GPIO.PULL_NONE 即不上拉也不下拉

  • value: 修改/读取 GPIO 引脚状态

示例:

from fpioa_manager import fm
from Maix import GPIO

io_led_blue = 35
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,值为35,即Pin35/IO35, 具体 LED 的引脚连接到了芯片的哪个引脚,请在前面的开发板介绍中看原理图

使用fm(fpioa manager 的缩写)这个内置的对象来注册芯片的外设和引脚的对应关系, 这里 fm.fpioa.GPIO0 是 K210 的一个 GPIO 外设(注意区分 GPIO(外设) 和引脚(实实在在的硬件引脚)的区别 ), 所以把 fm.fpioa.GPIO0 注册到了 引脚 IO35;

使用 led_b.value(1) 或者 led_b.value(0) 来设置高低电平即可, 因为这里设置了低电平, 根据上面的原理图可知低电平导通,LED 灯亮

gpio中断

关于中断这里也不多讲,直接讲使用

这里是中断的配置函数:

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 上升沿和下降沿都触发

后面那两个不知道干啥用的了。

然后是关闭中断的函数:

GPIO.disirq()

你可能感兴趣的:(K210,学习)