The problem is your data pin numbers are WRONG...
This one works...
Code:
// A0 - A11 maps to GPIO port C (bits 0 - 11) . A12 - A15 maps to GPIO port B (bits 0 - 3)
#define A0 15 // C0
#define A1 22 // c1
#define A2 23 //c2
#define A3 9 // C3
#define A4 10 // C4
#define A5 13 // C5
#define A6 11 //C6
#define A7 12 // C7
#define A8 35 // C8 28 A16
#define A9 36 // C9 27 A15
#define A10 37 // C10 29
#define A11 38 // C11 30
#define A12 16
#define A13 17
#define A14 19
#define A15 18
static inline void setAddressMode(uint8_t mode)
{
pinMode(A0, mode);
pinMode(A1, mode);
pinMode(A2, mode);
pinMode(A3, mode);
pinMode(A4, mode);
pinMode(A5, mode);
pinMode(A6, mode);
pinMode(A7, mode);
pinMode(A8, mode);
pinMode(A9, mode);
pinMode(A10, mode);
pinMode(A11, mode);
// ... do this for all the pins
}
// traditional address access
static inline uint16_t getAddr()
{
uint16_t addr = 0;
addr |= (digitalReadFast(A0));
addr |= (digitalReadFast(A1) << 1);
addr |= (digitalReadFast(A2) << 2);
addr |= (digitalReadFast(A3) << 3);
addr |= (digitalReadFast(A4) << 4);
addr |= (digitalReadFast(A5) << 5);
addr |= (digitalReadFast(A6) << 6);
addr |= (digitalReadFast(A7) << 7);
addr |= (digitalReadFast(A8) << 8);
addr |= (digitalReadFast(A9) << 9);
addr |= (digitalReadFast(A10) << 10);
addr |= (digitalReadFast(A11) << 11);
//addr |= (digitalReadFast(A12) << 12);
//addr |= (digitalReadFast(A13) << 13);
//addr |= (digitalReadFast(A14) << 14);
//addr |= (digitalReadFast(A15) << 15);
return addr;
}
void setup()
{
setAddressMode(INPUT_PULLDOWN); // set A0 - A15 to INPUT
Serial.begin(250000);
}
void loop()
{
Serial.begin(250000);
while (1)
{
// currently just testing the lower 12 bits from the c register
uint32_t cPortInput = GPIOC_PDIR;
uint16_t addr = getAddr();
Serial.println(addr, BIN);
Serial.println(cPortInput , BIN);
Serial.println("x");
delay(100);
}
Serial.end();
}
Note: I used INPUT_PULLDOWN as I did not have anything attached to pins, so did not want them floating...
Here is off one of my Excel document pages: