1.1 --- a/ArduinoAm29F010B.cpp Mon Jan 19 01:26:38 2015 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,198 +0,0 @@
1.4 -const int CE = A5, OE = 2, WE = 3,
1.5 - CS1 = 4, CS2 = 5,
1.6 - DQ0 = 6, DQ1 = 7, DQ2 = 8, DQ3 = 9,
1.7 - DQ4 = 10, DQ5 = 11, DQ6 = 12, DQ7 = 13;
1.8 -
1.9 -const int BUFSIZE = 8;
1.10 -char buffer[BUFSIZE];
1.11 -
1.12 -int fromHex(char c)
1.13 -{
1.14 - if ((c >= 48) && (c <= 57))
1.15 - return c - 48;
1.16 - if ((c >= 65) && (c <= 70))
1.17 - return c - 65 + 10;
1.18 - if ((c >= 97) && (c <= 102))
1.19 - return c - 97 + 10;
1.20 - return 0;
1.21 -}
1.22 -
1.23 -void setDataOut()
1.24 -{
1.25 - pinMode(DQ0, OUTPUT);
1.26 - pinMode(DQ1, OUTPUT);
1.27 - pinMode(DQ2, OUTPUT);
1.28 - pinMode(DQ3, OUTPUT);
1.29 - pinMode(DQ4, OUTPUT);
1.30 - pinMode(DQ5, OUTPUT);
1.31 - pinMode(DQ6, OUTPUT);
1.32 - pinMode(DQ7, OUTPUT);
1.33 -}
1.34 -
1.35 -void setDataIn()
1.36 -{
1.37 - pinMode(DQ0, INPUT);
1.38 - pinMode(DQ1, INPUT);
1.39 - pinMode(DQ2, INPUT);
1.40 - pinMode(DQ3, INPUT);
1.41 - pinMode(DQ4, INPUT);
1.42 - pinMode(DQ5, INPUT);
1.43 - pinMode(DQ6, INPUT);
1.44 - pinMode(DQ7, INPUT);
1.45 -}
1.46 -
1.47 -int readData()
1.48 -{
1.49 - int i = DQ7;
1.50 - int data = 0;
1.51 -
1.52 - setDataIn();
1.53 - delay(10);
1.54 -
1.55 - while (1)
1.56 - {
1.57 - data += digitalRead(i);
1.58 - if (i == DQ0)
1.59 - break;
1.60 - i--;
1.61 - data <<= 1;
1.62 - }
1.63 -
1.64 - setDataOut();
1.65 - return data;
1.66 -}
1.67 -
1.68 -void writeData(int data)
1.69 -{
1.70 - int i = DQ0;
1.71 -
1.72 - while (1)
1.73 - {
1.74 - digitalWrite(i, data % 2);
1.75 - if (i == DQ7)
1.76 - break;
1.77 - i++;
1.78 - data >>= 1;
1.79 - }
1.80 -}
1.81 -
1.82 -void setAddress(int high, int low)
1.83 -{
1.84 - writeData(high);
1.85 - delayMicroseconds(1);
1.86 - digitalWrite(CS2, HIGH);
1.87 - delayMicroseconds(1);
1.88 - digitalWrite(CS2, LOW);
1.89 - writeData(low);
1.90 - delayMicroseconds(1);
1.91 - digitalWrite(CS1, HIGH);
1.92 - delayMicroseconds(1);
1.93 - digitalWrite(CS1, LOW);
1.94 -}
1.95 -
1.96 -int readOutput(int nread)
1.97 -{
1.98 - int high, low, data;
1.99 -
1.100 - if (nread < 5)
1.101 - return 0;
1.102 -
1.103 - high = (fromHex(buffer[1]) << 4) + (fromHex(buffer[2]));
1.104 - low = (fromHex(buffer[3]) << 4) + (fromHex(buffer[4]));
1.105 -
1.106 - digitalWrite(CE, LOW);
1.107 - setAddress(high, low);
1.108 - delay(10);
1.109 - digitalWrite(OE, LOW);
1.110 - data = readData();
1.111 - delay(10);
1.112 - digitalWrite(OE, HIGH);
1.113 - digitalWrite(CE, HIGH);
1.114 -
1.115 - return data;
1.116 -}
1.117 -
1.118 -bool writeOutput(int nread)
1.119 -{
1.120 - int high, low, data;
1.121 -
1.122 - if (nread < 7)
1.123 - return false;
1.124 -
1.125 - high = (fromHex(buffer[1]) << 4) + (fromHex(buffer[2]));
1.126 - low = (fromHex(buffer[3]) << 4) + (fromHex(buffer[4]));
1.127 - data = (fromHex(buffer[5]) << 4) + (fromHex(buffer[6]));
1.128 -
1.129 - digitalWrite(CE, LOW);
1.130 - setAddress(high, low);
1.131 - delay(10);
1.132 - digitalWrite(WE, LOW);
1.133 - writeData(data);
1.134 - delay(10);
1.135 - digitalWrite(WE, HIGH);
1.136 - digitalWrite(CE, HIGH);
1.137 -
1.138 - return true;
1.139 -}
1.140 -
1.141 -void setup()
1.142 -{
1.143 - int nread = 0;
1.144 -
1.145 - Serial.begin(115200);
1.146 - pinMode(CE, OUTPUT);
1.147 - pinMode(OE, OUTPUT);
1.148 - pinMode(WE, OUTPUT);
1.149 - pinMode(CS1, OUTPUT);
1.150 - pinMode(CS2, OUTPUT);
1.151 - setDataOut();
1.152 -
1.153 - // Initial state for the flash device.
1.154 -
1.155 - digitalWrite(CE, HIGH);
1.156 - digitalWrite(OE, HIGH);
1.157 - digitalWrite(WE, HIGH);
1.158 -
1.159 - // Initial state for the latches.
1.160 -
1.161 - digitalWrite(CS1, LOW);
1.162 - digitalWrite(CS2, LOW);
1.163 -
1.164 - // Interface loop.
1.165 -
1.166 - Serial.println("?");
1.167 - Serial.setTimeout(3600000); // 1 hour
1.168 -
1.169 - while (nread = Serial.readBytesUntil('\n', buffer, BUFSIZE))
1.170 - {
1.171 - switch (buffer[0])
1.172 - {
1.173 - case 'R':
1.174 - Serial.println(readOutput(nread), HEX);
1.175 - break;
1.176 -
1.177 - case 'W':
1.178 - if (writeOutput(nread))
1.179 - Serial.println("W");
1.180 - else
1.181 - Serial.println("C");
1.182 - break;
1.183 -
1.184 - default:
1.185 - Serial.println("?");
1.186 - break;
1.187 - }
1.188 - }
1.189 -
1.190 - Serial.println("Done.");
1.191 -}
1.192 -
1.193 -void loop()
1.194 -{
1.195 -}
1.196 -
1.197 -extern "C" void __cxa_pure_virtual(void) {
1.198 - while(1);
1.199 -}
1.200 -
1.201 -// tabstop=4 expandtab shiftwidth=4