Kazuhiro Ouchi
/
ROM_Reader
ROM Reader (2332/2316) http://mbed.org/users/kanpapa/notebook/rom-reader/
main.cpp@0:8f3eaae6248d, 2011-08-13 (annotated)
- Committer:
- kanpapa
- Date:
- Sat Aug 13 05:29:46 2011 +0000
- Revision:
- 0:8f3eaae6248d
- Child:
- 1:74597dff65ee
1st release.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kanpapa | 0:8f3eaae6248d | 1 | /* |
kanpapa | 0:8f3eaae6248d | 2 | |
kanpapa | 0:8f3eaae6248d | 3 | mbed ROM Reader for 2332/2316 |
kanpapa | 0:8f3eaae6248d | 4 | |
kanpapa | 0:8f3eaae6248d | 5 | Read from ROM and dump to local file(ROM1.BIN) |
kanpapa | 0:8f3eaae6248d | 6 | |
kanpapa | 0:8f3eaae6248d | 7 | =============== |
kanpapa | 0:8f3eaae6248d | 8 | Status LED |
kanpapa | 0:8f3eaae6248d | 9 | ----------- |
kanpapa | 0:8f3eaae6248d | 10 | LED1: nouse |
kanpapa | 0:8f3eaae6248d | 11 | LED2: Busy |
kanpapa | 0:8f3eaae6248d | 12 | LED3: Error |
kanpapa | 0:8f3eaae6248d | 13 | LED4: End |
kanpapa | 0:8f3eaae6248d | 14 | |
kanpapa | 0:8f3eaae6248d | 15 | =============== |
kanpapa | 0:8f3eaae6248d | 16 | ROM Connection |
kanpapa | 0:8f3eaae6248d | 17 | --------------- |
kanpapa | 0:8f3eaae6248d | 18 | mbed 2332/2316 |
kanpapa | 0:8f3eaae6248d | 19 | p5 9 (O0) |
kanpapa | 0:8f3eaae6248d | 20 | p6 10 (O1) |
kanpapa | 0:8f3eaae6248d | 21 | p7 11 (O2) |
kanpapa | 0:8f3eaae6248d | 22 | p8 13 (O3) |
kanpapa | 0:8f3eaae6248d | 23 | p9 14 (O4) |
kanpapa | 0:8f3eaae6248d | 24 | p10 15 (O5) |
kanpapa | 0:8f3eaae6248d | 25 | p11 16 (O6) |
kanpapa | 0:8f3eaae6248d | 26 | p12 17 (O7) |
kanpapa | 0:8f3eaae6248d | 27 | p13 8 (A0) |
kanpapa | 0:8f3eaae6248d | 28 | p14 7 (A1) |
kanpapa | 0:8f3eaae6248d | 29 | p15 6 (A2) |
kanpapa | 0:8f3eaae6248d | 30 | p16 5 (A3) |
kanpapa | 0:8f3eaae6248d | 31 | p17 4 (A4) |
kanpapa | 0:8f3eaae6248d | 32 | p18 3 (A5) |
kanpapa | 0:8f3eaae6248d | 33 | p19 2 (A6) |
kanpapa | 0:8f3eaae6248d | 34 | p20 1 (A7) |
kanpapa | 0:8f3eaae6248d | 35 | p21 23 (A8) |
kanpapa | 0:8f3eaae6248d | 36 | p22 22 (A9) |
kanpapa | 0:8f3eaae6248d | 37 | p23 19 (A10) |
kanpapa | 0:8f3eaae6248d | 38 | p24 18 (A11) |
kanpapa | 0:8f3eaae6248d | 39 | p25 20 (/CE1) |
kanpapa | 0:8f3eaae6248d | 40 | p26 21 (CE2) |
kanpapa | 0:8f3eaae6248d | 41 | VU 24 (Vcc) |
kanpapa | 0:8f3eaae6248d | 42 | GND 12 (GND) |
kanpapa | 0:8f3eaae6248d | 43 | ================ |
kanpapa | 0:8f3eaae6248d | 44 | |
kanpapa | 0:8f3eaae6248d | 45 | */ |
kanpapa | 0:8f3eaae6248d | 46 | |
kanpapa | 0:8f3eaae6248d | 47 | #include "mbed.h" |
kanpapa | 0:8f3eaae6248d | 48 | |
kanpapa | 0:8f3eaae6248d | 49 | Serial pc(USBTX, USBRX); |
kanpapa | 0:8f3eaae6248d | 50 | LocalFileSystem local("local"); |
kanpapa | 0:8f3eaae6248d | 51 | |
kanpapa | 0:8f3eaae6248d | 52 | // ROM DATA PORT |
kanpapa | 0:8f3eaae6248d | 53 | BusIn DATA(p5, p6, p7, p8, p9, p10, p11, p12); |
kanpapa | 0:8f3eaae6248d | 54 | |
kanpapa | 0:8f3eaae6248d | 55 | // ROM ADDRESS PORT |
kanpapa | 0:8f3eaae6248d | 56 | BusOut ADRS(p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24); |
kanpapa | 0:8f3eaae6248d | 57 | |
kanpapa | 0:8f3eaae6248d | 58 | // Chip Enable |
kanpapa | 0:8f3eaae6248d | 59 | DigitalOut CE1(p25); |
kanpapa | 0:8f3eaae6248d | 60 | |
kanpapa | 0:8f3eaae6248d | 61 | // Chip Enable2 |
kanpapa | 0:8f3eaae6248d | 62 | DigitalOut CE2(p26); |
kanpapa | 0:8f3eaae6248d | 63 | |
kanpapa | 0:8f3eaae6248d | 64 | // LED Status |
kanpapa | 0:8f3eaae6248d | 65 | DigitalOut busyled(LED2); |
kanpapa | 0:8f3eaae6248d | 66 | DigitalOut endled(LED3); |
kanpapa | 0:8f3eaae6248d | 67 | DigitalOut errled(LED4); |
kanpapa | 0:8f3eaae6248d | 68 | |
kanpapa | 0:8f3eaae6248d | 69 | const uint8_t HIGH = 1; |
kanpapa | 0:8f3eaae6248d | 70 | const uint8_t LOW = 0; |
kanpapa | 0:8f3eaae6248d | 71 | |
kanpapa | 0:8f3eaae6248d | 72 | // 2332 (4096*8byte) |
kanpapa | 0:8f3eaae6248d | 73 | //const uint16_t MAX_ADDRESS = 4096; |
kanpapa | 0:8f3eaae6248d | 74 | |
kanpapa | 0:8f3eaae6248d | 75 | // 2316 (2048*8byte) |
kanpapa | 0:8f3eaae6248d | 76 | const uint16_t MAX_ADDRESS = 2048; |
kanpapa | 0:8f3eaae6248d | 77 | |
kanpapa | 0:8f3eaae6248d | 78 | FILE *fp; |
kanpapa | 0:8f3eaae6248d | 79 | char out_filename[] = "/local/rom1.bin"; |
kanpapa | 0:8f3eaae6248d | 80 | |
kanpapa | 0:8f3eaae6248d | 81 | uint8_t ROM_read(uint16_t address){ |
kanpapa | 0:8f3eaae6248d | 82 | uint8_t read_byte; |
kanpapa | 0:8f3eaae6248d | 83 | |
kanpapa | 0:8f3eaae6248d | 84 | // LED ON |
kanpapa | 0:8f3eaae6248d | 85 | busyled = HIGH; |
kanpapa | 0:8f3eaae6248d | 86 | |
kanpapa | 0:8f3eaae6248d | 87 | // SET ADDRESS |
kanpapa | 0:8f3eaae6248d | 88 | ADRS = address; |
kanpapa | 0:8f3eaae6248d | 89 | |
kanpapa | 0:8f3eaae6248d | 90 | CE2 = HIGH; |
kanpapa | 0:8f3eaae6248d | 91 | wait_us(10); |
kanpapa | 0:8f3eaae6248d | 92 | CE1 = LOW; |
kanpapa | 0:8f3eaae6248d | 93 | wait_us(10); |
kanpapa | 0:8f3eaae6248d | 94 | |
kanpapa | 0:8f3eaae6248d | 95 | read_byte = DATA; |
kanpapa | 0:8f3eaae6248d | 96 | wait_us(10); |
kanpapa | 0:8f3eaae6248d | 97 | |
kanpapa | 0:8f3eaae6248d | 98 | CE1 = HIGH; |
kanpapa | 0:8f3eaae6248d | 99 | CE2 = LOW; |
kanpapa | 0:8f3eaae6248d | 100 | |
kanpapa | 0:8f3eaae6248d | 101 | busyled = LOW; |
kanpapa | 0:8f3eaae6248d | 102 | return read_byte; |
kanpapa | 0:8f3eaae6248d | 103 | } |
kanpapa | 0:8f3eaae6248d | 104 | |
kanpapa | 0:8f3eaae6248d | 105 | void read_rom(){ |
kanpapa | 0:8f3eaae6248d | 106 | uint8_t read_data; |
kanpapa | 0:8f3eaae6248d | 107 | |
kanpapa | 0:8f3eaae6248d | 108 | pc.printf("READ from ROM¥n"); |
kanpapa | 0:8f3eaae6248d | 109 | |
kanpapa | 0:8f3eaae6248d | 110 | if ( NULL == (fp = fopen( out_filename, "w" )) ) { |
kanpapa | 0:8f3eaae6248d | 111 | pc.printf("File open error.¥n"); |
kanpapa | 0:8f3eaae6248d | 112 | errled = HIGH; |
kanpapa | 0:8f3eaae6248d | 113 | busyled = LOW; |
kanpapa | 0:8f3eaae6248d | 114 | return; |
kanpapa | 0:8f3eaae6248d | 115 | } |
kanpapa | 0:8f3eaae6248d | 116 | for (uint16_t address = 0; address < MAX_ADDRESS; address++){ |
kanpapa | 0:8f3eaae6248d | 117 | if (!(address % 16)) pc.printf("¥n%04X:", address); |
kanpapa | 0:8f3eaae6248d | 118 | read_data = ROM_read(address); |
kanpapa | 0:8f3eaae6248d | 119 | fprintf(fp, "%c", read_data); |
kanpapa | 0:8f3eaae6248d | 120 | pc.printf("%02X ",read_data); |
kanpapa | 0:8f3eaae6248d | 121 | } |
kanpapa | 0:8f3eaae6248d | 122 | pc.printf("¥nSuccess!¥n"); |
kanpapa | 0:8f3eaae6248d | 123 | |
kanpapa | 0:8f3eaae6248d | 124 | return; |
kanpapa | 0:8f3eaae6248d | 125 | } |
kanpapa | 0:8f3eaae6248d | 126 | |
kanpapa | 0:8f3eaae6248d | 127 | void blink_LED() { |
kanpapa | 0:8f3eaae6248d | 128 | for (int i = 0 ; i < 10 ; i++) { |
kanpapa | 0:8f3eaae6248d | 129 | busyled = 1; |
kanpapa | 0:8f3eaae6248d | 130 | wait(0.2); |
kanpapa | 0:8f3eaae6248d | 131 | busyled = 0; |
kanpapa | 0:8f3eaae6248d | 132 | wait(0.2); |
kanpapa | 0:8f3eaae6248d | 133 | } |
kanpapa | 0:8f3eaae6248d | 134 | return; |
kanpapa | 0:8f3eaae6248d | 135 | } |
kanpapa | 0:8f3eaae6248d | 136 | |
kanpapa | 0:8f3eaae6248d | 137 | int main() { |
kanpapa | 0:8f3eaae6248d | 138 | |
kanpapa | 0:8f3eaae6248d | 139 | busyled = HIGH; |
kanpapa | 0:8f3eaae6248d | 140 | endled = LOW; |
kanpapa | 0:8f3eaae6248d | 141 | errled = LOW; |
kanpapa | 0:8f3eaae6248d | 142 | |
kanpapa | 0:8f3eaae6248d | 143 | CE1 = HIGH; |
kanpapa | 0:8f3eaae6248d | 144 | CE2 = LOW; |
kanpapa | 0:8f3eaae6248d | 145 | |
kanpapa | 0:8f3eaae6248d | 146 | ADRS = 0; |
kanpapa | 0:8f3eaae6248d | 147 | |
kanpapa | 0:8f3eaae6248d | 148 | pc.printf("ROM Reader¥n"); |
kanpapa | 0:8f3eaae6248d | 149 | pc.printf("MAX Address: %5d¥n", MAX_ADDRESS); |
kanpapa | 0:8f3eaae6248d | 150 | |
kanpapa | 0:8f3eaae6248d | 151 | wait(3); |
kanpapa | 0:8f3eaae6248d | 152 | |
kanpapa | 0:8f3eaae6248d | 153 | // Start Sign |
kanpapa | 0:8f3eaae6248d | 154 | blink_LED(); |
kanpapa | 0:8f3eaae6248d | 155 | |
kanpapa | 0:8f3eaae6248d | 156 | read_rom(); |
kanpapa | 0:8f3eaae6248d | 157 | |
kanpapa | 0:8f3eaae6248d | 158 | fclose( fp ); |
kanpapa | 0:8f3eaae6248d | 159 | |
kanpapa | 0:8f3eaae6248d | 160 | // END Sign |
kanpapa | 0:8f3eaae6248d | 161 | blink_LED(); |
kanpapa | 0:8f3eaae6248d | 162 | |
kanpapa | 0:8f3eaae6248d | 163 | } |