![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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.cpp@6:41e64a077678, 2016-04-08 (annotated)
- Committer:
- va009039
- Date:
- Fri Apr 08 10:55:51 2016 +0900
- Revision:
- 6:41e64a077678
- Parent:
- 4:6629544a482e
- 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.cpp 2016/4/7 |
va009039 |
6:41e64a077678 | 2 | #if defined(TARGET_LPC1768) |
va009039 |
3:5df725af50e0 | 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 | 0:e38daa7b1a22 | 7 | |
va009039 |
3:5df725af50e0 | 8 | DigitalOut led1(LED1),led2(LED2); |
va009039 |
6:41e64a077678 | 9 | RawSerial pc(MBED_UARTUSB); |
va009039 |
6:41e64a077678 | 10 | #ifdef USE_SD |
va009039 |
6:41e64a077678 | 11 | SDStorage storage(MBED_SPI0); |
va009039 |
6:41e64a077678 | 12 | F32RFileSystem local(&storage, "local"); |
va009039 |
6:41e64a077678 | 13 | #else |
va009039 |
1:913dfd59e25a | 14 | LocalFileSystem local("local"); |
va009039 |
6:41e64a077678 | 15 | #endif |
va009039 | 0:e38daa7b1a22 | 16 | |
va009039 |
3:5df725af50e0 | 17 | class MyEMU1114 : public EMU111x { |
va009039 |
1:913dfd59e25a | 18 | virtual void DigitalWrite_Callback(int port, int pin, int value) { |
va009039 |
3:5df725af50e0 | 19 | switch(port<<8|pin) { |
va009039 |
3:5df725af50e0 | 20 | case 1<<8|5: led1 = value; break; // PIO1_5(LED1) |
va009039 |
3:5df725af50e0 | 21 | case 0<<8|7: led2 = value; break; // PIO0_7(LED2) |
va009039 |
1:913dfd59e25a | 22 | } |
va009039 |
1:913dfd59e25a | 23 | } |
va009039 |
3:5df725af50e0 | 24 | virtual void SerialPutc_Callback(int ch, uint8_t c) { pc.putc(c); } |
va009039 |
3:5df725af50e0 | 25 | virtual int SerialGetc_Callback(int ch) { return pc.getc(); } |
va009039 |
3:5df725af50e0 | 26 | virtual int SerialReadable_Callback(int ch) { return pc.readable(); } |
va009039 |
1:913dfd59e25a | 27 | }; |
va009039 |
1:913dfd59e25a | 28 | |
va009039 |
6:41e64a077678 | 29 | uint8_t* load(uint32_t addr, uint32_t limit, const char* filename) { |
va009039 |
6:41e64a077678 | 30 | pc.printf("loading[%s]", filename); |
va009039 | 0:e38daa7b1a22 | 31 | FileHandle* fh = local.open(filename, O_RDONLY); |
va009039 |
3:5df725af50e0 | 32 | MBED_ASSERT(fh); |
va009039 |
6:41e64a077678 | 33 | for(uint32_t fileSize = 0; fileSize <= limit;) { |
va009039 |
6:41e64a077678 | 34 | uint8_t buf[256]; |
va009039 |
6:41e64a077678 | 35 | size_t n = fh->read(buf, sizeof(buf)); |
va009039 |
6:41e64a077678 | 36 | if (n == 0) { |
va009039 |
6:41e64a077678 | 37 | pc.printf(" %d bytes\n", fileSize); |
va009039 |
6:41e64a077678 | 38 | break; |
va009039 |
6:41e64a077678 | 39 | } |
va009039 |
6:41e64a077678 | 40 | bool result = ROMSLOT::Write(addr + fileSize, (const uint8_t*)buf, sizeof(buf)); |
va009039 |
6:41e64a077678 | 41 | MBED_ASSERT(result); |
va009039 |
6:41e64a077678 | 42 | fileSize += n; |
va009039 |
6:41e64a077678 | 43 | pc.putc('.'); |
va009039 |
6:41e64a077678 | 44 | } |
va009039 | 0:e38daa7b1a22 | 45 | fh->close(); |
va009039 |
6:41e64a077678 | 46 | return (uint8_t*)addr; |
va009039 | 0:e38daa7b1a22 | 47 | } |
va009039 |
1:913dfd59e25a | 48 | |
va009039 | 0:e38daa7b1a22 | 49 | int main() { |
va009039 | 0:e38daa7b1a22 | 50 | pc.baud(115200); |
va009039 |
6:41e64a077678 | 51 | pc.puts("mbed LPC1114 emulator pre-alpha version\n"); |
va009039 |
1:913dfd59e25a | 52 | |
va009039 |
3:5df725af50e0 | 53 | MyEMU1114 mcu; |
va009039 |
6:41e64a077678 | 54 | mcu.assign_flash(load(0x00040000, 0x8000, "LPC1114.IMG")); |
va009039 |
1:913dfd59e25a | 55 | |
va009039 |
1:913dfd59e25a | 56 | mcu.reset(); |
va009039 |
1:913dfd59e25a | 57 | for(;;) { |
va009039 |
1:913dfd59e25a | 58 | mcu.run(100); |
va009039 |
3:5df725af50e0 | 59 | mcu.clock_in(250); |
va009039 | 0:e38daa7b1a22 | 60 | } |
va009039 |
1:913dfd59e25a | 61 | /* NOTREACHED */ |
va009039 | 0:e38daa7b1a22 | 62 | } |
va009039 |
6:41e64a077678 | 63 | #endif // TARGET_LPC1768 |
va009039 |
1:913dfd59e25a | 64 |