本文要介绍的内容
1) GPIO循环读取输入电平操作
2) GPIO中断读取输入电平操作
3) GPIO输出操作
硬件资源简介
Air724 共有标明的GPIO引脚31个,GPIO0-GPIO7 GPIO9-GPIO31,其中初始状态随不同固件可能稍有不同,也有引脚会因为固件不同造成不可用。 所以开发前建议尽量锁定固件版本,进行实际测试再进行相关电路开发。
GPIO有两种表示方法一种是 pio.P0_18,另一种是直接输入数字18,实际使用中二种方法等价。
下面是基本的使用步骤:
电压域配置
对于有指定电压域的GPIO,使用前应该先做相应配置,电压域的使用方法如下:
x=2
pmd.ldoset(x,pmd.LDO_VMMC)
pmd.ldoset(x,pmd.LDO_VLCD)
pmd.ldoset(x,pmd.LDO_VSIM1)
其中 x 取值为 0-15
x=0时:关闭LDO
x=1时:LDO输出1.716V
x=2时:LDO输出1.828V
x=3时:LDO输出1.939V
x=4时:LDO输出2.051V
x=5时:LDO输出2.162V
x=6时:LDO输出2.271V
x=7时:LDO输出2.375V
x=8时:LDO输出2.493V
x=9时:LDO输出2.607V
x=10时:LDO输出2.719V
x=11时:LDO输出2.831V
x=12时:LDO输出2.942V
x=13时:LDO输出3.054V
x=14时:LDO输出3.165V
x=15时:LDO输出3.177V
通过以上代码,可以把所有GPIO口配置成1.8V 电压。 输入检测状态 高于1.2V为高电平,低于0.6V为低电平。 电压域的对应关系请参考硬件手册。
GPIO输入
大多数引脚在GPIO输入模式下可以配置成上拉或者非上拉状态,提供约50uA的高电平电流。
--配置GPIO0为上拉状态或非上拉状态
PIO=0
配置为上拉状态
pio.pin.setpull(pio.PULLUP,PIO)
配置为非上拉状态
pio.pin.setpull(pio.NOPULL,PIO)
输入有两种方法进行检测
1.轮询法
--GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
local getGpio19Fnc = pins.setup(19)
sys.timerLoopStart(function()
log.info("testGpioSingle.getGpio19Fnc",getGpio19Fnc())
end,1000)
以上代码含义为每秒查询一次GPIO19的状态,并打印出来,输入为高电平则显示1,低电平则显示0
2. 中断法
--先定义一个中断处理函数,这个函数必须在GPIO配置之前出现
--GPIO13配置为中断输入状态
function gpio13IntFnc(msg)
log.info("testGpioSingle.gpio13IntFnc",msg,getGpio13Fnc())
--上升沿中断
if msg==cpu.INT_GPIO_POSEDGE then
--下降沿中断
else
end
end
--GPIO13配置为中断,可通过getGpio13Fnc()获取输入电平,产生中断时,自动执行gpio13IntFnc函数
getGpio13Fnc = pins.setup(13,gpio13IntFnc)
GPIO输出
配置GPIO输出使用以下语句
local setGpio18Fnc = pins.setup(18,level)
其中level=0为高电平,level=1为低电平,以下代码为每秒钟变换一次GPIO18的电平状态
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio18Fnc = pins.setup(pio.P0_18,0)
sys.timerLoopStart(function()
level = level==0 and 1 or 0
setGpio18Fnc(level)
log.info("testGpioSingle.setGpio18Fnc",level)
end,1000)
以上代码均为官方DEMO ,安装Luatools V2后会自动生成,存放目录为:
LuatoolsV2\resource\8910_script\script_LuaTask_V2.3.0\demo\gpio\gpioSingle
以下地址为DEMO下载地址:
https://file.miuser.net/Luat/Air724/LuatDEMO/Air724DEMO_V0009.rar