代码拉取完成,页面将自动刷新
--模块功能:io口控制
module(...,package.seeall)
require"pins"
require"pmd"
require"rtos"
--[[
重要提醒!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
使用某些GPIO时,必须在脚本中写代码打开GPIO所属的电压域,配置电压输出输入等级,这些GPIO才能正常工作
必须在GPIO使用前(即调用pins.setup前)调用pmd.ldoset(电压等级,电压域类型)
电压等级与对应的电压如下:
0--关闭
1--1.8V
2--1.9V
3--2.0V
4--2.6V
5--2.8V
6--3.0V
7--3.3V
IO配置为输出时,高电平时的输出电压即为配置的电压等级对应的电压
IO配置为输入或者中断时,外设输入的高电平电压必须与配置的电压等级的电压匹配
电压域与控制的GPIO的对应关系如下:
pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
一旦设置了某一个电压域的电压等级,受该电压域控制的所有GPIO的高电平都与设置的电压等级一致
例如:GPIO8输出电平时,要求输出2.8V,则调用pmd.ldoset(5,pmd.LDO_VMMC)
]]
pmd.ldoset(7,pmd.LDO_VMMC)
-- local level = 0
--GPIO1配置为输出,默认输出低电平,可通过setGpio1Fnc(0或者1)设置输出电平
local setGpioBlockFnc = pins.setup(pio.P0_8, 0) --拦截
-- sys.timerLoopStart(function()
-- level = level==0 and 1 or 0
-- setGpio1BlockFnc(level)
-- log.info("testGpioSingle.setGpio1BlockFnc",level)
-- end,1000)
--GPIO上下拉配置(V0021版本后的lod才支持此功能)
-- if tonumber(string.match(rtos.get_version(),"Luat_V(%d+)_"))>=21 then
-- pio.pin.setpull(pio.PULLUP,pio.P0_5) --配置为上拉
-- --pio.pin.setpull(pio.PULLDOWN,pio.P0_5) --配置为下拉
-- --pio.pin.setpull(pio.NOPULL,pio.P0_5) --不配置上下拉
-- end
-- function gpio4IntFnc(msg)
-- log.info("testGpioSingle.gpio4IntFnc",msg,getGpio4Fnc())
-- --上升沿中断
-- if msg==cpu.INT_GPIO_POSEDGE then
-- --下降沿中断
-- else
-- end
-- end
--GPIO4配置为中断,可通过getGpio4Fnc()获取输入电平,产生中断时,自动执行gpio4IntFnc函数
-- getGpio4Fnc = pins.setup(pio.P0_4, gpio4IntFnc)
function setBlock(block)
-- local setGpioBlockFnc = pins.setup(pio.P0_8, 0)
level = block and 1 or 0
log.info("--zbb--pincontrol.setBlock level",level)
setGpioBlockFnc(level)
end
function resetBlock()
block = nvm.get("isBlock")
log.info("--zbb--pincontrol isBlock", block)
setBlock(block)
end
function setBlockWithNvm(block)
nvm.set("isBlock",block)
resetBlock()
end
resetBlock()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。