История изменений
Исправление u5er, (текущая версия) :
Ты за кого меня принимаешь?!
За пользователя в сети.
Ну-ну, посмотрел бы я на твои инлайны. Хотя бы в простейшем случае - настройке портов
При настройке портов не вижу смысла упарываться, поэтому делаю всё процедуркой
static int sx1509ChipSetup( struct BicOS* os ){
int i;
int res;
const unsigned char regData[][2] = {
{ SX1509_REG_RESET, 0x12 },//soft reset - step 1
{ SX1509_REG_RESET, 0x34 },//soft reset - step 2
{ SX1509_REG_DIR_B, 0xff },//all input
{ SX1509_REG_DIR_A, 0x00 },//all output
{ SX1509_REG_OPEN_DRAIN_A, 0xef },//all open-drain, кроме 4
{ SX1509_REG_PULLUP_B, 0xff },//all pull-up
{ SX1509_REG_DEBOUNCE_ENABLE_B, 0xff },//all enable
{ SX1509_REG_DEBOUNCE_CONFIG, 0x04 },//8ms
{ SX1509_REG_KEY_CONFIG_1, 0x65 },//32ms, 4s autosleep
{ SX1509_REG_KEY_CONFIG_2, 0x1c },//4rows, 5 columns
{ SX1509_REG_CLOCK, 0x40 },//clock enable (internal 2MHz)
{ SX1509_REG_INPUT_DISABLE_A, (1<<4) },//disable input buffer on gpio 4
{ SX1509_REG_MISC, 0x10 },//LED driver frequency 7.56 KHz
{ SX1509_REG_LED_DRIVER_ENABLE_A, (1<<4) },//enable 4 gpio LED
{ LIST_TERMINATOR, 0x00 }
};
for( i = 0; regData[i][0] != LIST_TERMINATOR; i++ ){
res = i2c_master_transmit( os->sx1509_keys, regData[i], 2, SX1509_TIMEOUT_MS );
if( res ) return -1;
}
return 0;
}
Исходная версия u5er, :
Ты за кого меня принимаешь?!
За пользователя в сети.
Ну-ну, посмотрел бы я на твои инлайны. Хотя бы в простейшем случае - настройке портов
При настройке портов не вижу смысла упарываться, поэтому делаю всё регуляркой
static int sx1509ChipSetup( struct BicOS* os ){
int i;
int res;
const unsigned char regData[][2] = {
{ SX1509_REG_RESET, 0x12 },//soft reset - step 1
{ SX1509_REG_RESET, 0x34 },//soft reset - step 2
{ SX1509_REG_DIR_B, 0xff },//all input
{ SX1509_REG_DIR_A, 0x00 },//all output
{ SX1509_REG_OPEN_DRAIN_A, 0xef },//all open-drain, кроме 4
{ SX1509_REG_PULLUP_B, 0xff },//all pull-up
{ SX1509_REG_DEBOUNCE_ENABLE_B, 0xff },//all enable
{ SX1509_REG_DEBOUNCE_CONFIG, 0x04 },//8ms
{ SX1509_REG_KEY_CONFIG_1, 0x65 },//32ms, 4s autosleep
{ SX1509_REG_KEY_CONFIG_2, 0x1c },//4rows, 5 columns
{ SX1509_REG_CLOCK, 0x40 },//clock enable (internal 2MHz)
{ SX1509_REG_INPUT_DISABLE_A, (1<<4) },//disable input buffer on gpio 4
{ SX1509_REG_MISC, 0x10 },//LED driver frequency 7.56 KHz
{ SX1509_REG_LED_DRIVER_ENABLE_A, (1<<4) },//enable 4 gpio LED
{ LIST_TERMINATOR, 0x00 }
};
for( i = 0; regData[i][0] != LIST_TERMINATOR; i++ ){
res = i2c_master_transmit( os->sx1509_keys, regData[i], 2, SX1509_TIMEOUT_MS );
if( res ) return -1;
}
return 0;
}