mbed LPC1114 emulator pre-alpha version

Dependencies:   BaseV6M mbed F12RFileSystem F32RFileSystem ROMSLOT SDStorage

Fork of emu812 by Norimasa Okamoto

480
TOYOSHIKI TINY BASIC mbed Edition TTB_mbed_LPC1114.bin save as "LPC1114.IMG" .

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?

UserRevisionLine numberNew 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