mbed EPROM 27256 Vpp 12.5V Writter Functions Blank Check(SW = 0): Check blank(all 1) erased EPROM Write(SW = 1): Write Hex file(TEST1.HEX) to EPROM Read(SW = 2): Read from EPROM and dump to local file(TEST1.DMP) Copy(SW = 3): Read from dump image file(TEST1.DMP) and write to EPROM

Dependencies:   TextLCD mbed

Committer:
jf1vrr
Date:
Wed Jun 22 12:39:03 2011 +0000
Revision:
0:979d71505352
Rev 0.01A 2011/06/22 new!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jf1vrr 0:979d71505352 1 /*mbed EPROM 27256 Vpp 12.5V Writter
jf1vrr 0:979d71505352 2 Functions
jf1vrr 0:979d71505352 3 Blank Check(SW = 0): Check blank(all 1) erased EPROM
jf1vrr 0:979d71505352 4 Write(SW = 1): Write Hex file(TEST1.HEX) to EPROM
jf1vrr 0:979d71505352 5 Read: Read from EPROM and dump to local file(TEST1.DMP)
jf1vrr 0:979d71505352 6 Copy: Read from dump image file(TEST1.DMP) and write to EPROM
jf1vrr 0:979d71505352 7 */
jf1vrr 0:979d71505352 8 #include "mbed.h"
jf1vrr 0:979d71505352 9 #include "TextLCD.h"
jf1vrr 0:979d71505352 10
jf1vrr 0:979d71505352 11 LocalFileSystem local("mbed");
jf1vrr 0:979d71505352 12 BusInOut DATA(p5, p6, p7, p8, p9, p10, p11, p12);
jf1vrr 0:979d71505352 13 BusOut ADRS(p13, p14);
jf1vrr 0:979d71505352 14 DigitalOut RD(p15);
jf1vrr 0:979d71505352 15 DigitalOut WR(p16);
jf1vrr 0:979d71505352 16 DigitalOut RESET(p17);
jf1vrr 0:979d71505352 17 DigitalOut CE(p18);
jf1vrr 0:979d71505352 18 DigitalOut OE(p19);
jf1vrr 0:979d71505352 19 DigitalOut VCP_0V(p20);
jf1vrr 0:979d71505352 20 DigitalOut VCP_5V(p21);
jf1vrr 0:979d71505352 21 DigitalIn BTN(p22);
jf1vrr 0:979d71505352 22 BusIn SW(p23, p24);
jf1vrr 0:979d71505352 23 TextLCD lcd(p25, p26, p27, p28, p29, p30);
jf1vrr 0:979d71505352 24
jf1vrr 0:979d71505352 25 DigitalOut LED_BUSY(LED1);
jf1vrr 0:979d71505352 26 DigitalOut LED_5V(LED2);
jf1vrr 0:979d71505352 27 DigitalOut LED_12V(LED3);
jf1vrr 0:979d71505352 28 DigitalOut LED_RETRY(LED4);
jf1vrr 0:979d71505352 29
jf1vrr 0:979d71505352 30 #define _HIGH 1
jf1vrr 0:979d71505352 31 #define _LOW 0
jf1vrr 0:979d71505352 32
jf1vrr 0:979d71505352 33 #define SET_READ DATA.input()
jf1vrr 0:979d71505352 34 #define SET_WRITE DATA.output()
jf1vrr 0:979d71505352 35
jf1vrr 0:979d71505352 36 #define PORT_A 0
jf1vrr 0:979d71505352 37 #define PORT_B 1
jf1vrr 0:979d71505352 38 #define PORT_C 2
jf1vrr 0:979d71505352 39 #define CONTRL 3
jf1vrr 0:979d71505352 40
jf1vrr 0:979d71505352 41 #define MAX_ADDRESS 1024
jf1vrr 0:979d71505352 42
jf1vrr 0:979d71505352 43 union UNION1{
jf1vrr 0:979d71505352 44 struct HEX{
jf1vrr 0:979d71505352 45 uint8_t marker;
jf1vrr 0:979d71505352 46 uint8_t length[2];
jf1vrr 0:979d71505352 47 uint8_t offset[4];
jf1vrr 0:979d71505352 48 uint8_t rectype[2];
jf1vrr 0:979d71505352 49 uint8_t data[64];
jf1vrr 0:979d71505352 50 } h;
jf1vrr 0:979d71505352 51 char hex_line[137];
jf1vrr 0:979d71505352 52 } u;
jf1vrr 0:979d71505352 53
jf1vrr 0:979d71505352 54 union UNION2{
jf1vrr 0:979d71505352 55 uint16_t address;
jf1vrr 0:979d71505352 56 uint8_t hl_address[2];
jf1vrr 0:979d71505352 57 } a;
jf1vrr 0:979d71505352 58
jf1vrr 0:979d71505352 59 FILE *fp;
jf1vrr 0:979d71505352 60 char hex_filename[] = "/mbed/test1.hex";
jf1vrr 0:979d71505352 61 char out_filename[] = "/mbed/test1.dmp";
jf1vrr 0:979d71505352 62 char in_filename[] = "/mbed/test1.dmp";
jf1vrr 0:979d71505352 63
jf1vrr 0:979d71505352 64 short ROM_write(uint8_t address_h, uint8_t address_l, short data_byte){
jf1vrr 0:979d71505352 65 short read_byte;
jf1vrr 0:979d71505352 66
jf1vrr 0:979d71505352 67 LED_BUSY = _HIGH;
jf1vrr 0:979d71505352 68 wait_us(1000);
jf1vrr 0:979d71505352 69 SET_WRITE;
jf1vrr 0:979d71505352 70 ADRS = CONTRL;
jf1vrr 0:979d71505352 71 DATA = 0x80;
jf1vrr 0:979d71505352 72 WR = _LOW;
jf1vrr 0:979d71505352 73 wait_us(100);
jf1vrr 0:979d71505352 74 WR = _HIGH;
jf1vrr 0:979d71505352 75
jf1vrr 0:979d71505352 76 ADRS = PORT_A;
jf1vrr 0:979d71505352 77 DATA = address_l;
jf1vrr 0:979d71505352 78 WR = _LOW;
jf1vrr 0:979d71505352 79 wait_us(100);
jf1vrr 0:979d71505352 80 WR = _HIGH;
jf1vrr 0:979d71505352 81
jf1vrr 0:979d71505352 82 ADRS = PORT_B;
jf1vrr 0:979d71505352 83 DATA = address_h;
jf1vrr 0:979d71505352 84 WR = _LOW;
jf1vrr 0:979d71505352 85 wait_us(100);
jf1vrr 0:979d71505352 86 WR = _HIGH;
jf1vrr 0:979d71505352 87
jf1vrr 0:979d71505352 88 ADRS = PORT_C;
jf1vrr 0:979d71505352 89 DATA = data_byte;
jf1vrr 0:979d71505352 90 WR = _LOW;
jf1vrr 0:979d71505352 91 wait_us(100);
jf1vrr 0:979d71505352 92 WR = _HIGH;
jf1vrr 0:979d71505352 93
jf1vrr 0:979d71505352 94 CE = _LOW;
jf1vrr 0:979d71505352 95 wait_us(100);
jf1vrr 0:979d71505352 96 CE = _HIGH;
jf1vrr 0:979d71505352 97
jf1vrr 0:979d71505352 98 wait_us(10);
jf1vrr 0:979d71505352 99
jf1vrr 0:979d71505352 100 ADRS = CONTRL;
jf1vrr 0:979d71505352 101 DATA = 0x89;
jf1vrr 0:979d71505352 102 WR = _LOW;
jf1vrr 0:979d71505352 103 wait_us(100);
jf1vrr 0:979d71505352 104 WR = _HIGH;
jf1vrr 0:979d71505352 105
jf1vrr 0:979d71505352 106 ADRS = PORT_A;
jf1vrr 0:979d71505352 107 DATA = address_l;
jf1vrr 0:979d71505352 108 WR = _LOW;
jf1vrr 0:979d71505352 109 wait_us(100);
jf1vrr 0:979d71505352 110 WR = _HIGH;
jf1vrr 0:979d71505352 111
jf1vrr 0:979d71505352 112 ADRS = PORT_B;
jf1vrr 0:979d71505352 113 DATA = address_h;
jf1vrr 0:979d71505352 114 WR = _LOW;
jf1vrr 0:979d71505352 115 wait_us(100);
jf1vrr 0:979d71505352 116 WR = _HIGH;
jf1vrr 0:979d71505352 117
jf1vrr 0:979d71505352 118 SET_READ;
jf1vrr 0:979d71505352 119 ADRS = PORT_C;
jf1vrr 0:979d71505352 120 OE = _LOW;
jf1vrr 0:979d71505352 121 wait_us(100);
jf1vrr 0:979d71505352 122 RD = _LOW;
jf1vrr 0:979d71505352 123 wait_us(100);
jf1vrr 0:979d71505352 124 read_byte = DATA;
jf1vrr 0:979d71505352 125 wait_us(50);
jf1vrr 0:979d71505352 126 RD = _HIGH;
jf1vrr 0:979d71505352 127 OE = _HIGH;
jf1vrr 0:979d71505352 128 SET_WRITE;
jf1vrr 0:979d71505352 129 LED_BUSY = _LOW;
jf1vrr 0:979d71505352 130
jf1vrr 0:979d71505352 131 return read_byte;
jf1vrr 0:979d71505352 132 }
jf1vrr 0:979d71505352 133
jf1vrr 0:979d71505352 134 uint8_t ROM_read(uint8_t address_h, uint8_t address_l){
jf1vrr 0:979d71505352 135 uint8_t read_byte;
jf1vrr 0:979d71505352 136
jf1vrr 0:979d71505352 137 LED_BUSY = _HIGH;
jf1vrr 0:979d71505352 138 SET_WRITE;
jf1vrr 0:979d71505352 139 ADRS = CONTRL;
jf1vrr 0:979d71505352 140 DATA = 0x89;
jf1vrr 0:979d71505352 141 WR = _LOW;
jf1vrr 0:979d71505352 142 wait_us(10);
jf1vrr 0:979d71505352 143 WR = _HIGH;
jf1vrr 0:979d71505352 144
jf1vrr 0:979d71505352 145 ADRS = PORT_A;
jf1vrr 0:979d71505352 146 DATA = address_l;
jf1vrr 0:979d71505352 147 WR = _LOW;
jf1vrr 0:979d71505352 148 wait_us(10);
jf1vrr 0:979d71505352 149 WR = _HIGH;
jf1vrr 0:979d71505352 150
jf1vrr 0:979d71505352 151 ADRS = PORT_B;
jf1vrr 0:979d71505352 152 DATA = address_h;
jf1vrr 0:979d71505352 153 WR = _LOW;
jf1vrr 0:979d71505352 154 wait_us(10);
jf1vrr 0:979d71505352 155 WR = _HIGH;
jf1vrr 0:979d71505352 156
jf1vrr 0:979d71505352 157 SET_READ;
jf1vrr 0:979d71505352 158 ADRS = PORT_C;
jf1vrr 0:979d71505352 159 CE = _LOW;
jf1vrr 0:979d71505352 160 wait_us(10);
jf1vrr 0:979d71505352 161 OE = _LOW;
jf1vrr 0:979d71505352 162 wait_us(10);
jf1vrr 0:979d71505352 163 RD = _LOW;
jf1vrr 0:979d71505352 164 wait_us(100);
jf1vrr 0:979d71505352 165 read_byte = DATA;
jf1vrr 0:979d71505352 166 wait_us(10);
jf1vrr 0:979d71505352 167 RD = _HIGH;
jf1vrr 0:979d71505352 168 OE = _HIGH;
jf1vrr 0:979d71505352 169 CE = _HIGH;
jf1vrr 0:979d71505352 170
jf1vrr 0:979d71505352 171 SET_WRITE;
jf1vrr 0:979d71505352 172 LED_BUSY = _LOW;
jf1vrr 0:979d71505352 173 return read_byte;
jf1vrr 0:979d71505352 174 }
jf1vrr 0:979d71505352 175
jf1vrr 0:979d71505352 176 char h2d(char h_data){
jf1vrr 0:979d71505352 177 char d_data;
jf1vrr 0:979d71505352 178
jf1vrr 0:979d71505352 179 d_data = 0;
jf1vrr 0:979d71505352 180 if(h_data <= '9') d_data = h_data - '0';
jf1vrr 0:979d71505352 181 else if(h_data >= 'A') d_data = h_data - 'A' + 10;
jf1vrr 0:979d71505352 182 return d_data;
jf1vrr 0:979d71505352 183 }
jf1vrr 0:979d71505352 184
jf1vrr 0:979d71505352 185 void Vcc_5V_Vpp_5V(){
jf1vrr 0:979d71505352 186 LED_12V = _LOW;
jf1vrr 0:979d71505352 187 LED_5V = _HIGH;
jf1vrr 0:979d71505352 188 VCP_0V = _LOW;
jf1vrr 0:979d71505352 189 VCP_5V = _HIGH;
jf1vrr 0:979d71505352 190 }
jf1vrr 0:979d71505352 191
jf1vrr 0:979d71505352 192 void Vcc_6V_Vpp_12V(){
jf1vrr 0:979d71505352 193 LED_5V = _LOW;
jf1vrr 0:979d71505352 194 LED_12V = _HIGH;
jf1vrr 0:979d71505352 195 VCP_0V = _LOW;
jf1vrr 0:979d71505352 196 VCP_5V = _LOW;
jf1vrr 0:979d71505352 197 }
jf1vrr 0:979d71505352 198
jf1vrr 0:979d71505352 199 void Vcc_0V_Vpp_0V(){
jf1vrr 0:979d71505352 200 LED_5V = _LOW;
jf1vrr 0:979d71505352 201 LED_12V = _LOW;
jf1vrr 0:979d71505352 202 VCP_0V = _HIGH;
jf1vrr 0:979d71505352 203 VCP_5V = _LOW;
jf1vrr 0:979d71505352 204 }
jf1vrr 0:979d71505352 205
jf1vrr 0:979d71505352 206 void get_btn(){
jf1vrr 0:979d71505352 207 int cnt;
jf1vrr 0:979d71505352 208
jf1vrr 0:979d71505352 209 cnt = 0;
jf1vrr 0:979d71505352 210 lcd.locate(0, 1);
jf1vrr 0:979d71505352 211 lcd.printf("Push BTN to Cont");
jf1vrr 0:979d71505352 212 while(cnt < 30){
jf1vrr 0:979d71505352 213 if(BTN == _HIGH) cnt++;
jf1vrr 0:979d71505352 214 }
jf1vrr 0:979d71505352 215 }
jf1vrr 0:979d71505352 216
jf1vrr 0:979d71505352 217 void blank_check(){
jf1vrr 0:979d71505352 218 uint8_t read_data;
jf1vrr 0:979d71505352 219
jf1vrr 0:979d71505352 220 lcd.locate(0,0);
jf1vrr 0:979d71505352 221 lcd.printf("Blank Chk Mode ");
jf1vrr 0:979d71505352 222 get_btn();
jf1vrr 0:979d71505352 223
jf1vrr 0:979d71505352 224 Vcc_5V_Vpp_5V();
jf1vrr 0:979d71505352 225 for(a.address = 0; a.address < MAX_ADDRESS; a.address++){
jf1vrr 0:979d71505352 226 read_data = ROM_read(a.hl_address[1], a.hl_address[0]);
jf1vrr 0:979d71505352 227 lcd.locate(0,1);
jf1vrr 0:979d71505352 228 lcd.printf("%04X %02X ", a.address, read_data);
jf1vrr 0:979d71505352 229 if( read_data != 0xFF) goto __BLNK_ERROR;
jf1vrr 0:979d71505352 230 }
jf1vrr 0:979d71505352 231 lcd.locate(0,0);
jf1vrr 0:979d71505352 232 lcd.printf("Success! ");
jf1vrr 0:979d71505352 233 return;
jf1vrr 0:979d71505352 234
jf1vrr 0:979d71505352 235 __BLNK_ERROR:
jf1vrr 0:979d71505352 236 lcd.locate(0,1);
jf1vrr 0:979d71505352 237 lcd.printf("Blnk Check Error");
jf1vrr 0:979d71505352 238 return;
jf1vrr 0:979d71505352 239 } //blank_check()
jf1vrr 0:979d71505352 240
jf1vrr 0:979d71505352 241 void write_rom(){
jf1vrr 0:979d71505352 242 int i, len, line;
jf1vrr 0:979d71505352 243 int sum, cs;
jf1vrr 0:979d71505352 244 short length, high_byte, low_byte;
jf1vrr 0:979d71505352 245 uint8_t write_data, read_data, rty_cnt;
jf1vrr 0:979d71505352 246
jf1vrr 0:979d71505352 247 lcd.locate(0,0);
jf1vrr 0:979d71505352 248 lcd.printf("HEX WRITE to ROM");
jf1vrr 0:979d71505352 249 lcd.locate(0,1);
jf1vrr 0:979d71505352 250 lcd.printf(hex_filename);
jf1vrr 0:979d71505352 251 get_btn();
jf1vrr 0:979d71505352 252
jf1vrr 0:979d71505352 253 if ( NULL == (fp = fopen( hex_filename, "r" )) )
jf1vrr 0:979d71505352 254 goto __HEX_FILE_OPEN_ERROR;
jf1vrr 0:979d71505352 255
jf1vrr 0:979d71505352 256 line = 0;
jf1vrr 0:979d71505352 257 while(1){
jf1vrr 0:979d71505352 258 for(len = 0; len < 137; len++){
jf1vrr 0:979d71505352 259 u.hex_line[len] = fgetc(fp);
jf1vrr 0:979d71505352 260 if(feof(fp) != NULL) goto __EOF;
jf1vrr 0:979d71505352 261 if(u.hex_line[len] == 0x0A) goto __EXIT_FOR;
jf1vrr 0:979d71505352 262 }
jf1vrr 0:979d71505352 263
jf1vrr 0:979d71505352 264 __EXIT_FOR:
jf1vrr 0:979d71505352 265 u.hex_line[len - 1] = NULL; //Remove CRLF and terminate
jf1vrr 0:979d71505352 266 line++;
jf1vrr 0:979d71505352 267 if(u.h.marker != ':') goto __MARKER_ERROR;
jf1vrr 0:979d71505352 268
jf1vrr 0:979d71505352 269 length = 0;
jf1vrr 0:979d71505352 270 high_byte = h2d(u.h.length[0]) * 16;
jf1vrr 0:979d71505352 271 low_byte = h2d(u.h.length[1]);
jf1vrr 0:979d71505352 272 length = high_byte + low_byte;
jf1vrr 0:979d71505352 273
jf1vrr 0:979d71505352 274 a.hl_address[0] = (h2d(u.h.offset[2]) * 16) + h2d(u.h.offset[3]);
jf1vrr 0:979d71505352 275 a.hl_address[1] = (h2d(u.h.offset[0]) * 16) + h2d(u.h.offset[1]);
jf1vrr 0:979d71505352 276 Vcc_6V_Vpp_12V();
jf1vrr 0:979d71505352 277 for ( i = 0; i < length * 2; i= i + 2){
jf1vrr 0:979d71505352 278 high_byte = h2d(u.h.data[i]) * 16;
jf1vrr 0:979d71505352 279 low_byte = h2d(u.h.data[i + 1]);
jf1vrr 0:979d71505352 280 write_data = high_byte + low_byte;
jf1vrr 0:979d71505352 281 for(rty_cnt = 0; rty_cnt <= 25; rty_cnt++){
jf1vrr 0:979d71505352 282 if(rty_cnt > 0) LED_RETRY = _HIGH;
jf1vrr 0:979d71505352 283 read_data = ROM_write(a.hl_address[1], a.hl_address[0], write_data);
jf1vrr 0:979d71505352 284 lcd.locate(0,0);
jf1vrr 0:979d71505352 285 lcd.printf(" %03d %04X %02X %02X", line, a.address, write_data, read_data);
jf1vrr 0:979d71505352 286 lcd.locate(0,1);
jf1vrr 0:979d71505352 287 lcd.printf(" %02D", rty_cnt);
jf1vrr 0:979d71505352 288 if(read_data == write_data) goto __NEXT_ADDRS;
jf1vrr 0:979d71505352 289 }
jf1vrr 0:979d71505352 290 goto __RTY_ERROR;
jf1vrr 0:979d71505352 291
jf1vrr 0:979d71505352 292 __NEXT_ADDRS:
jf1vrr 0:979d71505352 293 LED_RETRY = _LOW;
jf1vrr 0:979d71505352 294 a.address++;
jf1vrr 0:979d71505352 295 }
jf1vrr 0:979d71505352 296 Vcc_5V_Vpp_5V();
jf1vrr 0:979d71505352 297 cs = 0;
jf1vrr 0:979d71505352 298 i--;
jf1vrr 0:979d71505352 299 high_byte = h2d(u.h.data[i + 1]) * 16;
jf1vrr 0:979d71505352 300 low_byte = h2d(u.h.data[i + 2]);
jf1vrr 0:979d71505352 301 cs = high_byte + low_byte;
jf1vrr 0:979d71505352 302
jf1vrr 0:979d71505352 303 //calc check sum
jf1vrr 0:979d71505352 304 sum = 0;
jf1vrr 0:979d71505352 305 for( i = 1; i < len - 3; i = i + 2){
jf1vrr 0:979d71505352 306 high_byte = h2d(u.hex_line[i]);
jf1vrr 0:979d71505352 307 high_byte = high_byte * 16;
jf1vrr 0:979d71505352 308 low_byte = h2d(u.hex_line[i + 1]);
jf1vrr 0:979d71505352 309 sum = sum + high_byte + low_byte;
jf1vrr 0:979d71505352 310 }
jf1vrr 0:979d71505352 311
jf1vrr 0:979d71505352 312 if(((0x100 - (sum & 0xFF)) - cs) != 0) goto __CS_ERROR;
jf1vrr 0:979d71505352 313
jf1vrr 0:979d71505352 314 } //while(1)
jf1vrr 0:979d71505352 315 lcd.locate(0,0);
jf1vrr 0:979d71505352 316 lcd.printf("Success! ");
jf1vrr 0:979d71505352 317 return;
jf1vrr 0:979d71505352 318
jf1vrr 0:979d71505352 319 __HEX_FILE_OPEN_ERROR:
jf1vrr 0:979d71505352 320 lcd.locate(0,1);
jf1vrr 0:979d71505352 321 lcd.printf("HEX File Open Er");
jf1vrr 0:979d71505352 322 return;
jf1vrr 0:979d71505352 323
jf1vrr 0:979d71505352 324 __MARKER_ERROR:
jf1vrr 0:979d71505352 325 lcd.locate(0,1);
jf1vrr 0:979d71505352 326 lcd.printf("Marker Error!");
jf1vrr 0:979d71505352 327 return;
jf1vrr 0:979d71505352 328
jf1vrr 0:979d71505352 329 __CS_ERROR:
jf1vrr 0:979d71505352 330 lcd.locate(0,1);
jf1vrr 0:979d71505352 331 lcd.printf("Check Sum Error!");
jf1vrr 0:979d71505352 332 return;
jf1vrr 0:979d71505352 333
jf1vrr 0:979d71505352 334 __EOF:
jf1vrr 0:979d71505352 335 lcd.locate(0,1);
jf1vrr 0:979d71505352 336 lcd.printf("End Of File ");
jf1vrr 0:979d71505352 337 return;
jf1vrr 0:979d71505352 338
jf1vrr 0:979d71505352 339 __RTY_ERROR:
jf1vrr 0:979d71505352 340 lcd.locate(0,1);
jf1vrr 0:979d71505352 341 lcd.printf("Retry Error ");
jf1vrr 0:979d71505352 342 return;
jf1vrr 0:979d71505352 343 } //write_rom()
jf1vrr 0:979d71505352 344
jf1vrr 0:979d71505352 345 void read_rom(){
jf1vrr 0:979d71505352 346 uint8_t read_data;
jf1vrr 0:979d71505352 347
jf1vrr 0:979d71505352 348 lcd.locate(0,0);
jf1vrr 0:979d71505352 349 lcd.printf("READ from ROM ");
jf1vrr 0:979d71505352 350 get_btn();
jf1vrr 0:979d71505352 351
jf1vrr 0:979d71505352 352 if ( NULL == (fp = fopen( out_filename, "w" )) )
jf1vrr 0:979d71505352 353 goto __OUT_FILE_OPEN_ERROR;
jf1vrr 0:979d71505352 354
jf1vrr 0:979d71505352 355 Vcc_5V_Vpp_5V();
jf1vrr 0:979d71505352 356 for(a.address = 0; a.address < MAX_ADDRESS; a.address++){
jf1vrr 0:979d71505352 357 read_data = ROM_read(a.hl_address[1], a.hl_address[0]);
jf1vrr 0:979d71505352 358 fprintf(fp, "%02X", read_data);
jf1vrr 0:979d71505352 359 lcd.locate(0,1);
jf1vrr 0:979d71505352 360 lcd.printf("%04X %02X ", a.address, read_data);
jf1vrr 0:979d71505352 361 //wait(2);
jf1vrr 0:979d71505352 362 }
jf1vrr 0:979d71505352 363 lcd.locate(0,0);
jf1vrr 0:979d71505352 364 lcd.printf("Success! ");
jf1vrr 0:979d71505352 365 return;
jf1vrr 0:979d71505352 366
jf1vrr 0:979d71505352 367 __OUT_FILE_OPEN_ERROR:
jf1vrr 0:979d71505352 368 lcd.locate(0,1);
jf1vrr 0:979d71505352 369 lcd.printf("Out File Open Er");
jf1vrr 0:979d71505352 370 return;
jf1vrr 0:979d71505352 371
jf1vrr 0:979d71505352 372 } //read_rom
jf1vrr 0:979d71505352 373
jf1vrr 0:979d71505352 374 void copy_rom(){
jf1vrr 0:979d71505352 375 int rty_cnt;
jf1vrr 0:979d71505352 376 char h_data, l_data;
jf1vrr 0:979d71505352 377 uint8_t read_data, write_data;
jf1vrr 0:979d71505352 378
jf1vrr 0:979d71505352 379 lcd.locate(0,0);
jf1vrr 0:979d71505352 380 lcd.printf("COPY to ROM ");
jf1vrr 0:979d71505352 381 get_btn();
jf1vrr 0:979d71505352 382
jf1vrr 0:979d71505352 383 if ( NULL == (fp = fopen( in_filename, "r" )) )
jf1vrr 0:979d71505352 384 goto __IN_FILE_OPEN_ERROR;
jf1vrr 0:979d71505352 385
jf1vrr 0:979d71505352 386 Vcc_6V_Vpp_12V();
jf1vrr 0:979d71505352 387 for(a.address = 0; a.address < MAX_ADDRESS; a.address++){
jf1vrr 0:979d71505352 388 h_data = fgetc(fp);
jf1vrr 0:979d71505352 389 l_data = fgetc(fp);
jf1vrr 0:979d71505352 390 write_data = h2d(h_data) * 16 + h2d(l_data);
jf1vrr 0:979d71505352 391 for(rty_cnt = 0; rty_cnt <= 25; rty_cnt++){
jf1vrr 0:979d71505352 392 if(rty_cnt > 0) LED_RETRY = _HIGH;
jf1vrr 0:979d71505352 393 read_data = ROM_write(a.hl_address[1], a.hl_address[0], write_data);
jf1vrr 0:979d71505352 394 lcd.locate(0,1);
jf1vrr 0:979d71505352 395 lcd.printf("%04X %02X %02X %2D", a.address, write_data, read_data, rty_cnt);
jf1vrr 0:979d71505352 396 if(read_data == write_data) goto __NEXT_ADDRS;
jf1vrr 0:979d71505352 397 }
jf1vrr 0:979d71505352 398 goto __RTY_ERROR;
jf1vrr 0:979d71505352 399
jf1vrr 0:979d71505352 400 __NEXT_ADDRS:
jf1vrr 0:979d71505352 401 }
jf1vrr 0:979d71505352 402 lcd.locate(0,0);
jf1vrr 0:979d71505352 403 lcd.printf("Success! ");
jf1vrr 0:979d71505352 404 return;
jf1vrr 0:979d71505352 405
jf1vrr 0:979d71505352 406 __RTY_ERROR:
jf1vrr 0:979d71505352 407 lcd.locate(0,1);
jf1vrr 0:979d71505352 408 lcd.printf("Retry Error");
jf1vrr 0:979d71505352 409 return;
jf1vrr 0:979d71505352 410
jf1vrr 0:979d71505352 411 __IN_FILE_OPEN_ERROR:
jf1vrr 0:979d71505352 412 lcd.locate(0,1);
jf1vrr 0:979d71505352 413 lcd.printf("File Open Error ");
jf1vrr 0:979d71505352 414 return;
jf1vrr 0:979d71505352 415 } //copy_rom
jf1vrr 0:979d71505352 416
jf1vrr 0:979d71505352 417 void init(){
jf1vrr 0:979d71505352 418 CE = _HIGH;
jf1vrr 0:979d71505352 419 OE = _HIGH;
jf1vrr 0:979d71505352 420 RD = _HIGH;
jf1vrr 0:979d71505352 421 WR = _HIGH;
jf1vrr 0:979d71505352 422 SET_WRITE;
jf1vrr 0:979d71505352 423 DATA = 0;
jf1vrr 0:979d71505352 424 ADRS = 0;
jf1vrr 0:979d71505352 425
jf1vrr 0:979d71505352 426 Vcc_0V_Vpp_0V();
jf1vrr 0:979d71505352 427
jf1vrr 0:979d71505352 428 LED_BUSY = _LOW;
jf1vrr 0:979d71505352 429 LED_5V = _LOW;
jf1vrr 0:979d71505352 430 LED_12V = _LOW;
jf1vrr 0:979d71505352 431 LED_RETRY = _LOW;
jf1vrr 0:979d71505352 432
jf1vrr 0:979d71505352 433 RESET = _LOW;
jf1vrr 0:979d71505352 434 RESET = _HIGH;
jf1vrr 0:979d71505352 435 wait_us(100);
jf1vrr 0:979d71505352 436 RESET = _LOW;
jf1vrr 0:979d71505352 437 } //init()
jf1vrr 0:979d71505352 438
jf1vrr 0:979d71505352 439 int main() {
jf1vrr 0:979d71505352 440
jf1vrr 0:979d71505352 441 init();
jf1vrr 0:979d71505352 442 lcd.cls();
jf1vrr 0:979d71505352 443 lcd.locate(0,0);
jf1vrr 0:979d71505352 444 lcd.printf("EPROM Writter ");
jf1vrr 0:979d71505352 445 lcd.locate(0,1);
jf1vrr 0:979d71505352 446 lcd.printf("MAX ADRS: %5d ", MAX_ADDRESS);
jf1vrr 0:979d71505352 447 wait(3);
jf1vrr 0:979d71505352 448 while(1){
jf1vrr 0:979d71505352 449 switch(SW) {
jf1vrr 0:979d71505352 450 case(0):
jf1vrr 0:979d71505352 451 blank_check();
jf1vrr 0:979d71505352 452 break;
jf1vrr 0:979d71505352 453 case(1):
jf1vrr 0:979d71505352 454 write_rom();
jf1vrr 0:979d71505352 455 fclose( fp );
jf1vrr 0:979d71505352 456 break;
jf1vrr 0:979d71505352 457 case(2):
jf1vrr 0:979d71505352 458 read_rom();
jf1vrr 0:979d71505352 459 fclose( fp );
jf1vrr 0:979d71505352 460 break;
jf1vrr 0:979d71505352 461 case(3):
jf1vrr 0:979d71505352 462 copy_rom();
jf1vrr 0:979d71505352 463 fclose( fp );
jf1vrr 0:979d71505352 464 break;
jf1vrr 0:979d71505352 465 default:
jf1vrr 0:979d71505352 466 break;
jf1vrr 0:979d71505352 467 } //switch(SW)
jf1vrr 0:979d71505352 468 Vcc_0V_Vpp_0V();
jf1vrr 0:979d71505352 469 wait(5);
jf1vrr 0:979d71505352 470 } //while(1)
jf1vrr 0:979d71505352 471 } //main()