Fix atmega2560 read_row routine

This commit is contained in:
Dave 2020-05-09 03:51:24 -05:00
parent a9a759ac82
commit e9630edb03
2 changed files with 14 additions and 13 deletions

View File

@ -271,10 +271,10 @@ void asdf_arch_led1_set(uint8_t value)
void asdf_arch_led2_set(uint8_t value) void asdf_arch_led2_set(uint8_t value)
{ {
if (value) { if (value) {
set_bit(&ASDF_LED2_PORT, ASDF_LED2_BIT); clear_bit(&ASDF_LED2_PORT, ASDF_LED2_BIT);
} }
else { else {
clear_bit(&ASDF_LED2_PORT, ASDF_LED2_BIT); set_bit(&ASDF_LED2_PORT, ASDF_LED2_BIT);
} }
} }
@ -296,10 +296,10 @@ void asdf_arch_led2_set(uint8_t value)
void asdf_arch_led3_set(uint8_t value) void asdf_arch_led3_set(uint8_t value)
{ {
if (value) { if (value) {
set_bit(&ASDF_LED3_PORT, ASDF_LED3_BIT); clear_bit(&ASDF_LED3_PORT, ASDF_LED3_BIT);
} }
else { else {
clear_bit(&ASDF_LED3_PORT, ASDF_LED3_BIT); set_bit(&ASDF_LED3_PORT, ASDF_LED3_BIT);
} }
} }
@ -599,7 +599,7 @@ static void asdf_arch_init_ascii_output(void)
// INPUTS: none // INPUTS: none
// OUTPUTS: none // OUTPUTS: none
// //
// DESCRIPTION: Sets up columns port as input. // DESCRIPTION: Sets up columns port as input and enable weak pullups.
// //
// SIDE EFFECTS: See DESCRIPTION // SIDE EFFECTS: See DESCRIPTION
// //
@ -610,6 +610,7 @@ static void asdf_arch_init_ascii_output(void)
static void asdf_arch_init_columns(void) static void asdf_arch_init_columns(void)
{ {
ASDF_COLUMNS_DDR = ALL_INPUTS; ASDF_COLUMNS_DDR = ALL_INPUTS;
ASDF_COLUMNS_PORT = ALL_PULLUPS;
} }
// PROCEDURE: asdf_arch_init_row_outputs // PROCEDURE: asdf_arch_init_row_outputs
@ -733,15 +734,13 @@ void asdf_arch_init(void)
// //
asdf_cols_t asdf_arch_read_row(uint8_t row) asdf_cols_t asdf_arch_read_row(uint8_t row)
{ {
uint16_t rows = (1 << row); uint32_t rows = ~(((uint32_t) 1) << row);
ASDF_LOROW_PORT = (uint8_t)(rows & 0xff);
ASDF_HIROW_PORT = rows >> 8; ASDF_HIROW_PORT = (uint8_t)((rows >> 8) & 0xff);
ASDF_LOROW_PORT = rows & 0xff; return ~(asdf_cols_t) ASDF_COLUMNS_PIN;
return (asdf_cols_t) ASDF_COLUMNS_PIN;
} }
// PROCEDURE: asdf_arch_read_row // PROCEDURE: asdf_arch_osi_read_row
// INPUTS: (uint8_t) row: the row number to be scanned // INPUTS: (uint8_t) row: the row number to be scanned
// OUTPUTS: returns a word containing the active (pressed) columns // OUTPUTS: returns a word containing the active (pressed) columns
// //

View File

@ -271,17 +271,19 @@
#define PIN_OUTPUT 1 #define PIN_OUTPUT 1
#define ALL_INPUTS 0 #define ALL_INPUTS 0
#define ALL_OUTPUTS 0xff #define ALL_OUTPUTS 0xff
#define ALL_PULLUPS 0xff
#define ASDF_HIROW_PORT PORTA #define ASDF_HIROW_PORT PORTA
#define ASDF_HIROW_DDR DDRA #define ASDF_HIROW_DDR DDRA
#define ASDF_HIROW_PIN PINA
#define ASDF_LOROW_PORT PORTJ #define ASDF_LOROW_PORT PORTJ
#define ASDF_LOROW_DDR DDRJ #define ASDF_LOROW_DDR DDRJ
#define ASDF_LOROW_PIN PINJ
#define ASDF_COLUMNS_PORT PORTC #define ASDF_COLUMNS_PORT PORTC
#define ASDF_COLUMNS_PIN PINC #define ASDF_COLUMNS_PIN PINC
#define ASDF_COLUMNS_DDR DDRC #define ASDF_COLUMNS_DDR DDRC
#define ASDF_COLUMNS_PULLUPS 0 // disable weak pullup
#define ASDF_ASCII_PORT PORTH #define ASDF_ASCII_PORT PORTH
#define ASDF_ASCII_DDR DDRH #define ASDF_ASCII_DDR DDRH