151 lines
1.8 KiB
Lua
151 lines
1.8 KiB
Lua
|
|
|
|
|
|
|
|
|
|
|
|
require "sys"
|
|
module(..., package.seeall)
|
|
local interruptCallbacks = {}
|
|
local dirs = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function setup(pin, val, pull)
|
|
|
|
pio.pin.close(pin)
|
|
|
|
if type(val) == "function" then
|
|
pio.pin.setdir(pio.INT, pin)
|
|
if pull then pio.pin.setpull(pull or pio.PULLUP, pin) end
|
|
|
|
interruptCallbacks[pin] = val
|
|
dirs[pin] = false
|
|
return function()
|
|
return pio.pin.getval(pin)
|
|
end
|
|
end
|
|
|
|
if val ~= nil then
|
|
dirs[pin] = true
|
|
pio.pin.setdir(val == 1 and pio.OUTPUT1 or pio.OUTPUT, pin)
|
|
else
|
|
|
|
dirs[pin] = false
|
|
pio.pin.setdir(pio.INPUT, pin)
|
|
if pull then pio.pin.setpull(pull or pio.PULLUP, pin) end
|
|
end
|
|
|
|
return function(val)
|
|
val = tonumber(val)
|
|
if (not val and dirs[pin]) or (val and not dirs[pin]) then
|
|
pio.pin.close(pin)
|
|
pio.pin.setdir(val and (val == 1 and pio.OUTPUT1 or pio.OUTPUT) or pio.INPUT, pin)
|
|
if not val and pull then pio.pin.setpull(pull or pio.PULLUP, pin) end
|
|
dirs[pin] = val and true or false
|
|
return val or pio.pin.getval(pin)
|
|
end
|
|
if val then
|
|
pio.pin.setval(val, pin)
|
|
return val
|
|
else
|
|
return pio.pin.getval(pin)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function close(pin)
|
|
pio.pin.close(pin)
|
|
end
|
|
|
|
rtos.on(rtos.MSG_INT, function(msg)
|
|
if interruptCallbacks[msg.int_resnum] == nil then
|
|
log.warn('pins.rtos.on', 'warning:rtos.MSG_INT callback nil', msg.int_resnum)
|
|
return
|
|
end
|
|
interruptCallbacks[msg.int_resnum](msg.int_id)
|
|
end)
|
|
|
|
|
|
IOMUX_GPIO0 = 0
|
|
IOMUX_GPIO1 = 1
|
|
IOMUX_GPIO2 = 2
|
|
IOMUX_GPIO3 = 3
|
|
IOMUX_GPIO4 = 4
|
|
IOMUX_GPIO5 = 5
|
|
|
|
IOMUX_GPIO8 = 8
|
|
IOMUX_GPIO9 = 9
|
|
IOMUX_GPIO10 = 10
|
|
|
|
IOMUX_GPIO11 = 11
|
|
IOMUX_GPIO12 = 12
|
|
IOMUX_GPIO13 = 13
|
|
IOMUX_GPIO14 = 14
|
|
IOMUX_GPIO15 = 15
|
|
IOMUX_GPIO18 = 18
|
|
IOMUX_GPIO19 = 19
|
|
IOMUX_GPIO20 = 20
|
|
|
|
IOMUX_GPIO21 = 21
|
|
IOMUX_GPIO22 = 22
|
|
IOMUX_GPIO23 = 23
|
|
IOMUX_GPIO29 = 29
|
|
IOMUX_GPIO30 = 30
|
|
|
|
IOMUX_GPIO31 = 31
|
|
|
|
IOMUX_USART_1 = 57
|
|
IOMUX_USART_2 = 58
|
|
IOMUX_USART_3 = 59
|
|
|
|
IOMUX_I2C_2 = 67
|
|
IOMUX_I2C_3 = 68
|