66 lines
2 KiB
Lua
66 lines
2 KiB
Lua
|
ATJ.gpio = {}
|
||
|
|
||
|
function ATJ.gpio.muxsel(dev)
|
||
|
if type(dev) == "string" then
|
||
|
if dev == "LCM" then dev = 0
|
||
|
elseif dev == "SD" then dev = 1
|
||
|
elseif dev == "NAND" then dev = 2
|
||
|
else error("Invalid mux string " .. dev)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local mfctl0 = HW.GPIO.MFCTL0.read()
|
||
|
if dev == 0 then
|
||
|
-- LCM (taken from WELCOME.BIN)
|
||
|
mfctl0 = bit32.band(mfctl0, 0xfe3f3f00)
|
||
|
mfctl0 = bit32.bor(mfctl0, 0x00808092)
|
||
|
elseif dev == 1 then
|
||
|
-- SD (taken from CARD.DRV)
|
||
|
mfctl0 = bit32.band(mfctl0, 0xff3ffffc)
|
||
|
mfctl0 = bit32.bor(mfctl0, 0x01300004)
|
||
|
elseif dev == 2 then
|
||
|
-- NAND (taken from BROM dump)
|
||
|
mfctl0 = bit32.band(mfctl0, 0xfe3ff300)
|
||
|
mfctl0 = bit32.bor(mfctl0, 0x00400449)
|
||
|
end
|
||
|
|
||
|
-- enable multifunction mux
|
||
|
HW.GPIO.MFCTL1.write(0x80000000)
|
||
|
|
||
|
-- write multifunction mux selection
|
||
|
HW.GPIO.MFCTL0.write(mfctl0)
|
||
|
end
|
||
|
|
||
|
function ATJ.gpio.outen(port, pin, en)
|
||
|
if type(port) == "string" then
|
||
|
if port == "PORTA" then
|
||
|
HW.GPIO.AOUTEN.write(bit32.replace(HW.GPIO.AOUTEN.read(), en, pin, 1))
|
||
|
elseif port == "PORTB" then
|
||
|
HW.GPIO.BOUTEN.write(bit32.replace(HW.GPIO.BOUTEN.read(), en, pin, 1))
|
||
|
else error("Invalid port string " .. port)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function ATJ.gpio.inen(port, pin)
|
||
|
if type(port) == "string" then
|
||
|
if port == "PORTA" then
|
||
|
HW.GPIO.AINEN.write(bit32.replace(HW.GPIO.AINEN.read(), en, pin, 1))
|
||
|
elseif port == "PORTB" then
|
||
|
HW.GPIO.BINEN.write(bit32.replace(HW.GPIO.BINEN.read(), en, pin, 1))
|
||
|
else error("Invalid port string " .. port)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function ATJ.gpio.set(port, pin, val)
|
||
|
if type(port) == "string" then
|
||
|
if port == "PORTA" then
|
||
|
HW.GPIO.ADAT.write(bit32.replace(HW.GPIO.ADAT.read(), val, pin, 1))
|
||
|
elseif port == "PORTB" then
|
||
|
HW.GPIO.BDAT.write(bit32.replace(HW.GPIO.BDAT.read(), val, pin, 1))
|
||
|
else error("Invalid port string " .. port)
|
||
|
end
|
||
|
end
|
||
|
end
|