📄 flash.java
字号:
package kfl;/*** Flash programming.* read and write data to address 0x80000.** address mapping:** 0x00000 - 0x17fff 96kB Acex config* 0x18000 - 0x1bfff 16kB java program* 0x1c000 - 0x1c3ff 1kB MS data* 0x1c400 - 0x1dfff 7kB text data* 0x1e000 - 0x1ffff 8kB log book* 0x1ffff address of Mast**/public class Flash { public static final int LAST_ADDR = 0x9ffff; public static final int FLASH_START = 0x80000; public static final int TEXT_START = FLASH_START+0x1c400; public static final int LOG_LEN = 8192; public static final int LOG_SIZE = 32; public static final int LOG_START = 0xa0000-LOG_LEN;//// use relativ offset for MS data// public static final int MS_DATA = 0x1c000; public static final int MS_DATA_LEN = 17*32; private static int[] buf; private static int addr, cnt; public static void init() { buf = new int[128]; for (int i=0; i<128; ++i) { buf[i] = 0xff; } addr = 0; cnt = 0; }//// only for Mast// public static void setStationAddress(int val) { if (val<0 || val>31) return; JopSys.wrMem(val, LAST_ADDR); while(JopSys.rdMem(LAST_ADDR) != val) // WD on failure ; } public static int getStationAddress() { int i = JopSys.rdMem(LAST_ADDR); if (i<0 || i>31) { return 0; } else { return i; } }/** Set address in 128 byte pages.*/ public static void setPage(int p) { addr = p<<7; cnt = 0; } public static void setData(int data) { buf[cnt & 0x7f] = data; ++cnt; }/** read one page in intern buffer.*/ private static void readPage() { for (int i=0; i<128; ++i) { buf[i] = JopSys.rdMem(((FLASH_START+addr) & 0xfff80) | i); } }/*** program one byte.*/ public static void write(int a, int data) { addr = a; readPage(); buf[addr & 0x7f] = data; program(); }/*** program one 16 bit value.*/ public static void write16(int a, int data) { addr = a; readPage(); buf[addr & 0x7f] = data>>>8; buf[(addr+1) & 0x7f] = data; program(); } public static void program() { int i, val; val = buf[127] & 0xff; for (i=0; i<128; ++i) { JopSys.wrMem(buf[i], ((FLASH_START+addr) & 0xfff80) | i); buf[i] = 0xff; } // wait 1 ms to start programming (min 150 us) Timer.sleep(1); while(JopSys.rdMem(FLASH_START+addr+127) != val) // WD on failure ; } public static int read() { return JopSys.rdMem(FLASH_START+addr+(cnt++)); } public static int read(int addr) { return JopSys.rdMem(FLASH_START+addr); } public static int read16(int addr) { return (JopSys.rdMem(FLASH_START+addr)<<8) | JopSys.rdMem(FLASH_START+addr+1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -