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" .
Diff: EMU111x.h
- Revision:
- 2:b8b4f07d4691
- Child:
- 3:5df725af50e0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EMU111x.h Tue Aug 11 06:49:07 2015 +0900 @@ -0,0 +1,165 @@ +// EMU111x.h 2015/8/9 +#include "BaseV6M.h" +#include "EMUInterface.h" +#pragma once + +class EMU111x; + +class EMU111x_SYSCON { +public: + EMU111x_SYSCON(); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); +}; + +class EMU111x_IOCON { +public: + EMU111x_IOCON(); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + uint32_t RESET_PIO0_0; + uint32_t PIO0_1; + uint32_t PIO1_8; + uint32_t PIO0_2; + uint32_t PIO0_3; + uint32_t PIO0_4; + uint32_t PIO0_5; + uint32_t PIO1_9; + + uint32_t PIO0_6; + uint32_t PIO0_7; + + uint32_t PIO0_8; + uint32_t PIO0_9; + uint32_t SWCLK_PIO0_10; + uint32_t PIO1_10; + + uint32_t R_PIO0_11; + uint32_t R_PIO1_0; + uint32_t R_PIO1_1; + uint32_t R_PIO1_2; + + uint32_t SWDIO_PIO_3; + uint32_t PIO1_4; + uint32_t PIO1_11; + + uint32_t PIO1_5; + uint32_t PIO1_6; + uint32_t PIO1_7; + + uint32_t SCK_LOC; +}; + +class EMU111x_GPIO { +public: + EMU111x_GPIO(EMU111x& mcu, int port); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + EMU111x& mcu; + int port; + uint32_t data; + uint32_t dir; +}; + +class EMU111x_TMR32B { +public: + EMU111x_TMR32B(int ch); + void clock_in(uint32_t n = 1); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + int ch; + uint32_t tc; +}; + +class EMU111x_UART { +public: + EMU111x_UART(EMU111x& mcu); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + uint32_t lcr; + uint32_t fdr; + EMU111x& mcu; +}; + +class EMU111x_I2C { +public: + EMU111x_I2C(EMU111x& mcu); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + EMU111x& mcu; + uint32_t con; + uint32_t stat; + uint8_t i2c_addr; + uint8_t i2c_data[16]; + int i2c_size; + int i2c_pos; +}; + +class EMU111x_SPI { +public: + EMU111x_SPI(EMU111x& mcu, int ch); + void poke32(uint32_t a, uint32_t d); + uint32_t peek32(uint32_t a); + +private: + EMU111x& mcu; + uint32_t cr0; + uint32_t cr1; + int ch; + int dr; +}; + +class EMU111x_NVIC { +public: + void poke32(uint32_t a, uint32_t d); + +private: + uint32_t iser; +}; + +class EMU111x : public EMUInterface, public BaseV6M { +public: + EMU111x(); + void assign_flash(const uint8_t* addr) { flash = addr; } + void assign_rom(uint8_t* addr) { rom = addr; } + void clock_in(uint32_t n); + void trace(); + +protected: + virtual void poke32(uint32_t a, uint32_t d); + virtual uint32_t peek32(uint32_t a); + virtual void poke8(uint32_t a, uint8_t b); + virtual uint8_t peek8(uint32_t a); + +private: + const uint8_t* flash; + const uint8_t* rom; + uint8_t* ram; + + EMU111x_SYSCON syscon; + EMU111x_IOCON iocon; + EMU111x_TMR32B tmr32b1; + EMU111x_UART uart; + EMU111x_I2C i2c; + EMU111x_SPI spi0; + EMU111x_SPI spi1; + EMU111x_GPIO gpio0; + EMU111x_GPIO gpio1; + EMU111x_NVIC nvic; + + friend class EMU111x_UART; + friend class EMU111x_I2C; + friend class EMU111x_SPI; + friend class EMU111x_GPIO; +}; +