X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao-tools%2Faltosui%2FAltosFlash.java;h=a3e431cdf7dd9c60bde16953d40f116236420b0b;hp=b70185558f974a6fe9fb94b7ebf10db4c1dd5258;hb=2f07ad14a16dbf1b75c71784ceae303825c90ade;hpb=cf30343aadd5039627a85319872685f743e64b16 diff --git a/ao-tools/altosui/AltosFlash.java b/ao-tools/altosui/AltosFlash.java index b7018555..a3e431cd 100644 --- a/ao-tools/altosui/AltosFlash.java +++ b/ao-tools/altosui/AltosFlash.java @@ -202,9 +202,13 @@ public class AltosFlash { debug.debug_instr(set_clkcon_fast); byte status; - do { + for (int times = 0; times < 20; times++) { + Thread.sleep(1); status = debug.debug_instr(get_sleep); - } while ((status & SLEEP_XOSC_STB) == 0); + if ((status & SLEEP_XOSC_STB) != 0) + return; + } + throw new IOException("Failed to initialize target clock"); } void action(String s, int percent) { @@ -221,6 +225,22 @@ public class AltosFlash { percent); } + void run(int pc) throws IOException, InterruptedException { + debug.set_pc(pc); + int set_pc = debug.get_pc(); + if (pc != set_pc) + throw new IOException("Failed to set target program counter"); + debug.resume(); + + for (int times = 0; times < 20; times++) { + byte status = debug.read_status(); + if ((status & AltosDebug.STATUS_CPU_HALTED) != 0) + return; + } + + throw new IOException("Failed to execute program on target"); + } + public void flash() throws IOException, FileNotFoundException, InterruptedException { if (!check_rom_config()) throw new IOException("Invalid rom config settings"); @@ -264,16 +284,7 @@ public class AltosFlash { this_time); debug.write_memory(flash_prog, flash_page); - debug.set_pc(flash_prog); - int pc = debug.get_pc(); - debug.resume(); - Thread.sleep(100); - for (int times = 0; times < 10; times++) { - byte status = debug.read_status(); - if ((status & AltosDebug.STATUS_CPU_HALTED) != 0) - break; - Thread.sleep(100); - } + run(flash_prog); byte[] check = debug.read_memory(flash_addr, this_time); for (int i = 0; i < this_time; i++)