mbed LPC1114 emulator pre-alpha version
Dependencies: BaseV6M mbed F12RFileSystem F32RFileSystem ROMSLOT SDStorage
Fork of emu812 by
TOYOSHIKI TINY BASIC mbed Edition TTB_mbed_LPC1114.bin save as "LPC1114.IMG" .
main_L152RE.cpp@6:41e64a077678, 2016-04-08 (annotated)
- Committer:
- va009039
- Date:
- Fri Apr 08 10:55:51 2016 +0900
- Revision:
- 6:41e64a077678
- Child:
- 9:ef9a58221fbe
add Nucleo-L152RE.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 |
6:41e64a077678 | 1 | // main_L152RE.cpp 2016/4/6 |
va009039 |
6:41e64a077678 | 2 | #if defined(TARGET_NUCLEO_L152RE) |
va009039 |
6:41e64a077678 | 3 | #include "EMU111x.h" |
va009039 |
6:41e64a077678 | 4 | #include "SDStorage.h" |
va009039 |
6:41e64a077678 | 5 | #include "F32RFileSystem.h" |
va009039 |
6:41e64a077678 | 6 | #include "ROMSLOT.h" |
va009039 |
6:41e64a077678 | 7 | |
va009039 |
6:41e64a077678 | 8 | DigitalOut led1(D3),led2(D2); |
va009039 |
6:41e64a077678 | 9 | RawSerial pc(USBTX,USBRX); |
va009039 |
6:41e64a077678 | 10 | SDStorage storage(D11, D12, D13, D4); // mosi, miso, sclk, cs |
va009039 |
6:41e64a077678 | 11 | F32RFileSystem local(&storage, "local"); |
va009039 |
6:41e64a077678 | 12 | |
va009039 |
6:41e64a077678 | 13 | class MyEMU1114 : public EMU111x { |
va009039 |
6:41e64a077678 | 14 | virtual void DigitalWrite_Callback(int port, int pin, int value) { |
va009039 |
6:41e64a077678 | 15 | switch(port<<8|pin) { |
va009039 |
6:41e64a077678 | 16 | case 1<<8|5: led1 = value; break; // PIO1_5(LED1) |
va009039 |
6:41e64a077678 | 17 | case 0<<8|7: led2 = value; break; // PIO0_7(LED2) |
va009039 |
6:41e64a077678 | 18 | } |
va009039 |
6:41e64a077678 | 19 | } |
va009039 |
6:41e64a077678 | 20 | virtual void SerialPutc_Callback(int ch, uint8_t c) { pc.putc(c); } |
va009039 |
6:41e64a077678 | 21 | virtual int SerialGetc_Callback(int ch) { return pc.getc(); } |
va009039 |
6:41e64a077678 | 22 | virtual int SerialReadable_Callback(int ch) { return pc.readable(); } |
va009039 |
6:41e64a077678 | 23 | }; |
va009039 |
6:41e64a077678 | 24 | |
va009039 |
6:41e64a077678 | 25 | uint8_t* load(uint32_t addr, uint32_t limit, const char* filename) { |
va009039 |
6:41e64a077678 | 26 | pc.printf("loading[%s]", filename); |
va009039 |
6:41e64a077678 | 27 | FileHandle* fh = local.open(filename, O_RDONLY); |
va009039 |
6:41e64a077678 | 28 | MBED_ASSERT(fh); |
va009039 |
6:41e64a077678 | 29 | for(uint32_t fileSize = 0; fileSize <= limit;) { |
va009039 |
6:41e64a077678 | 30 | uint8_t buf[256]; |
va009039 |
6:41e64a077678 | 31 | size_t n = fh->read(buf, sizeof(buf)); |
va009039 |
6:41e64a077678 | 32 | if (n == 0) { |
va009039 |
6:41e64a077678 | 33 | pc.printf(" %d bytes\n", fileSize); |
va009039 |
6:41e64a077678 | 34 | break; |
va009039 |
6:41e64a077678 | 35 | } |
va009039 |
6:41e64a077678 | 36 | ROMSLOT::Write(addr + fileSize, (const uint8_t*)buf, sizeof(buf)); |
va009039 |
6:41e64a077678 | 37 | fileSize += n; |
va009039 |
6:41e64a077678 | 38 | pc.putc('.'); |
va009039 |
6:41e64a077678 | 39 | } |
va009039 |
6:41e64a077678 | 40 | fh->close(); |
va009039 |
6:41e64a077678 | 41 | return (uint8_t*)addr; |
va009039 |
6:41e64a077678 | 42 | } |
va009039 |
6:41e64a077678 | 43 | |
va009039 |
6:41e64a077678 | 44 | int main() { |
va009039 |
6:41e64a077678 | 45 | pc.baud(115200); |
va009039 |
6:41e64a077678 | 46 | pc.puts("mbed LPC1114 emulator pre-alpha version\n"); |
va009039 |
6:41e64a077678 | 47 | |
va009039 |
6:41e64a077678 | 48 | MyEMU1114 mcu; |
va009039 |
6:41e64a077678 | 49 | mcu.assign_flash(load(0x00040000, 0x8000, "LPC1114.IMG")); |
va009039 |
6:41e64a077678 | 50 | |
va009039 |
6:41e64a077678 | 51 | mcu.reset(); |
va009039 |
6:41e64a077678 | 52 | for(;;) { |
va009039 |
6:41e64a077678 | 53 | mcu.run(100); |
va009039 |
6:41e64a077678 | 54 | mcu.clock_in(250); |
va009039 |
6:41e64a077678 | 55 | } |
va009039 |
6:41e64a077678 | 56 | /* NOTREACHED */ |
va009039 |
6:41e64a077678 | 57 | } |
va009039 |
6:41e64a077678 | 58 | #endif // TARGET_NUCLEO_L152RE |
va009039 |
6:41e64a077678 | 59 |