mbed LPC812 emulator pre-alpha version
Dependencies: BaseV6M mbed F12RFileSystem F32RFileSystem ROMSLOT SDStorage
Example
TTB_mbed_LPC812.bin save as "LPC812.IMG" .
internal boot rom image(0x1fff0000-0x1fff1fff) save as "LPC812.ROM".
Tested programs
- TTB_mbed - TOYOSHIKI TINY BASIC mbed Edition
- mbed_blinky - LED1 blinky
main_L152RE.cpp
- Committer:
- va009039
- Date:
- 2016-04-09
- Revision:
- 5:f22e2df90a70
- Parent:
- 4:94d28a7b4363
File content as of revision 5:f22e2df90a70:
// emu812/main_L152RE.cpp 2016/4/9 #if defined(TARGET_NUCLEO_L152RE) #include "EMU81x.h" #include "SDStorage.h" #include "F32RFileSystem.h" #include "ROMSLOT.h" DigitalOut led1(D3),led2(D2),led3(D5); RawSerial pc(USBTX,USBRX); RawSerial uart1(PC_10,PC_11); I2C i2c(D14, D15); SDStorage storage(D11, D12, D13, D4); // mosi, miso, sclk, cs F32RFileSystem local(&storage, "local"); ROMSLOT slot; class MyEMU812 : public EMU81x { virtual void DigitalWrite_Callback(int port, int pin, int value) { switch(pin) { case 16: led1 = value; break; // PIO0_16 LED_BLUE case 17: led2 = value; break; // PIO0_17 LED_GREEN case 7: led3 = value; break; // PIO0_7 LED_RED } } virtual void SerialPutc_Callback(int ch, uint8_t c) { switch(ch) { case 0: pc.putc(c); break; case 1: uart1.putc(c); break; } } virtual int SerialGetc_Callback(int ch) { switch(ch) { case 0: return pc.getc(); case 1: return uart1.getc(); } return -1; } virtual int SerialReadable_Callback(int ch) { switch(ch) { case 0: return pc.readable(); case 1: return uart1.readable(); } return 0; } virtual int I2CWrite_Callback(uint8_t addr, const uint8_t* data, int size) { return i2c.write(addr, (char*)data, size); } virtual int I2CRead_Callback(uint8_t addr, uint8_t* data, int size) { return i2c.read(addr, (char*)data, size); } }; uint8_t* load(size_t limit, const char* filename) { pc.printf("loading[%s]", filename); FileHandle* fh = local.open(filename, O_RDONLY); MBED_ASSERT(fh); uint32_t addr = slot.New(limit); for(size_t n = 0; n <= limit;) { uint8_t buf[256]; size_t r = fh->read(buf, sizeof(buf)); if (r == 0) { pc.printf(" %u bytes\n", n); break; } slot.Write(addr + n, (const uint8_t*)buf, sizeof(buf)); n += r; pc.putc('.'); } fh->close(); return (uint8_t*)addr; } int main() { pc.baud(115200); pc.puts("mbed LPC812 emulator pre-alpha version 0.01\n"); MyEMU812 mcu; mcu.assign_flash(load(0x4000, "LPC812.IMG")); mcu.assign_rom(load(0x2000, "LPC812.ROM")); mcu.reset(); for(;;) { mcu.run(100); mcu.clock_in(10000); } /* NOTREACHED */ } #endif // TARGET_NUCLEO_L152RE