mirror of
https://github.com/elua/elua.git
synced 2025-01-25 01:02:54 +08:00
LM3S platform specific PIO fixes
Changed the LM3S platform specific PIO module to be consistent with the generic PIO module's API.
This commit is contained in:
parent
6b7116caf0
commit
7603cc05f2
@ -413,10 +413,13 @@ static int lm3s_pio_mt_index( lua_State *L )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lua: lm3s.pio.set_function( function )
|
// Lua: lm3s.pio.set_function( func1, func2, ..., funcn )
|
||||||
static int lm3s_pio_set_function( lua_State *L )
|
static int lm3s_pio_set_function( lua_State *L )
|
||||||
{
|
{
|
||||||
GPIOPinConfigure( ( u32 )luaL_checknumber( L, 1 ) );
|
unsigned i;
|
||||||
|
|
||||||
|
for( i = 1; i <= lua_gettop( L ); i ++ )
|
||||||
|
GPIOPinConfigure( ( u32 )luaL_checknumber( L, i ) );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,42 +442,56 @@ static int lm3s_pioh_check_pio_spec( int v, int *pport, int *ppin )
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lua: lm3s.pio.set_strength( pin, drive )
|
// Lua: lm3s.pio.set_strength( drive, pin1, pin2, ..., pinn )
|
||||||
static int lm3s_pio_set_strength( lua_State *L )
|
static int lm3s_pio_set_strength( lua_State *L )
|
||||||
{
|
{
|
||||||
int port = 0, pin = 0;
|
int port = 0, pin = 0;
|
||||||
u8 pins;
|
u8 pins;
|
||||||
u32 base, drive;
|
u32 base;
|
||||||
|
u32 drive = luaL_checkinteger( L, 1 );
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
if( !lm3s_pioh_check_pio_spec( luaL_checkinteger( L, 1 ), &port, &pin ) )
|
for( i = 2; i <= lua_gettop( L ); i ++ )
|
||||||
return luaL_error( L, "invalid pin" );
|
{
|
||||||
drive = ( u32 )luaL_checknumber( L, 2 );
|
if( !lm3s_pioh_check_pio_spec( luaL_checkinteger( L, i ), &port, &pin ) )
|
||||||
base = pio_base[ port ];
|
return luaL_error( L, "invalid pin '%u'", luaL_checkinteger( L, i ) );
|
||||||
pins = 1 << pin;
|
base = pio_base[ port ];
|
||||||
// The next sequence is taken from gpio.c
|
pins = 1 << pin;
|
||||||
HWREG(base + GPIO_O_DR2R) = ((drive & 1) ?
|
// The next sequence is taken from gpio.c
|
||||||
(HWREG(base + GPIO_O_DR2R) | pins) :
|
HWREG(base + GPIO_O_DR2R) = ((drive & 1) ?
|
||||||
(HWREG(base + GPIO_O_DR2R) & ~(pins)));
|
(HWREG(base + GPIO_O_DR2R) | pins) :
|
||||||
HWREG(base + GPIO_O_DR4R) = ((drive & 2) ?
|
(HWREG(base + GPIO_O_DR2R) & ~(pins)));
|
||||||
(HWREG(base + GPIO_O_DR4R) | pins) :
|
HWREG(base + GPIO_O_DR4R) = ((drive & 2) ?
|
||||||
(HWREG(base + GPIO_O_DR4R) & ~(pins)));
|
(HWREG(base + GPIO_O_DR4R) | pins) :
|
||||||
HWREG(base + GPIO_O_DR8R) = ((drive & 4) ?
|
(HWREG(base + GPIO_O_DR4R) & ~(pins)));
|
||||||
(HWREG(base + GPIO_O_DR8R) | pins) :
|
HWREG(base + GPIO_O_DR8R) = ((drive & 4) ?
|
||||||
(HWREG(base + GPIO_O_DR8R) & ~(pins)));
|
(HWREG(base + GPIO_O_DR8R) | pins) :
|
||||||
HWREG(base + GPIO_O_SLR) = ((drive & 8) ?
|
(HWREG(base + GPIO_O_DR8R) & ~(pins)));
|
||||||
(HWREG(base + GPIO_O_SLR) | pins) :
|
HWREG(base + GPIO_O_SLR) = ((drive & 8) ?
|
||||||
(HWREG(base + GPIO_O_SLR) & ~(pins)));
|
(HWREG(base + GPIO_O_SLR) | pins) :
|
||||||
|
(HWREG(base + GPIO_O_SLR) & ~(pins)));
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lua: lm3s.pio.set_direction( pin, drive )
|
// Lua: lm3s.pio.set_direction( dir, pin1, pin2, ..., pinn )
|
||||||
static int lm3s_pio_set_direction( lua_State *L )
|
static int lm3s_pio_set_direction( lua_State *L )
|
||||||
{
|
{
|
||||||
int port = 0, pin = 0;
|
int port = 0, pin = 0;
|
||||||
|
u32 base, dir;
|
||||||
|
u8 pins;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
if( !lm3s_pioh_check_pio_spec( luaL_checkinteger( L, 1 ), &port, &pin ) )
|
dir = ( u32 )luaL_checkinteger( L, 1 );
|
||||||
return luaL_error( L, "invalid pin" );
|
for( i = 2; i <= lua_gettop( L ); i ++ )
|
||||||
GPIODirModeSet( pio_base[ port ], 1 << pin, ( u32 )luaL_checknumber( L, 2 ) );
|
{
|
||||||
|
if( !lm3s_pioh_check_pio_spec( luaL_checkinteger( L, i ), &port, &pin ) )
|
||||||
|
return luaL_error( L, "invalid pin '%u'", luaL_checkinteger( L, i ) );
|
||||||
|
base = pio_base[ port ];
|
||||||
|
pins = 1 << pin;
|
||||||
|
GPIODirModeSet( base, pins, dir );
|
||||||
|
HWREG( base + GPIO_O_DEN ) |= pins;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user