30#include "../devices/bitbang_i2c.h"
31#include "../devices/bitbang_out.h"
32#include "../devices/bitbang_pwm.h"
33#include "../devices/bitbang_spi.h"
34#include "../devices/bitbang_uart.h"
35#include "../lib/board.h"
38typedef enum { QEMU_SIM_NONE = 0, QEMU_SIM_STM32, QEMU_SIM_ESP32, QEMU_SIM_ESP32_C3 } QEMUSimType;
40#define TTIMEOUT (BASETIMER * 1000000L)
42class bsim_qemu :
virtual public board {
51 int MInit(
const char* processor,
const char* fname,
float freq)
override;
52 void MEnd(
void)
override;
60 void MSetVCC(
float vcc)
override;
63 void MSetPin(
int pin,
unsigned char value)
override;
64 void MSetPinDOV(
int pin,
unsigned char ovalue)
override;
65 void MSetPinOAV(
int pin,
float value)
override;
66 unsigned char MGetPin(
int pin)
override;
69 void MStep(
void)
override;
71 int MReset(
int flags)
override;
77 int GetInc_ns(
void) {
return inc_ns; };
78 virtual void PinsExtraConfig(
int cfg) {};
80 virtual void Run_CPU_ns(uint64_t time) = 0;
81 bitbang_i2c_t master_i2c[2];
82 bitbang_spi_t master_spi[2];
83 bitbang_uart_t master_uart[3];
84 bitbang_pwm_t pwm_out;
85 bitbang_out_t rmt_out;
88 int GetUARTRX(
const int uart_num)
override;
89 int GetUARTTX(
const int uart_num)
override;
90 virtual std::string
GetClkLabel(
void)
override {
return "IO (Mhz)"; };
96 int MipsStrToIcount(
const char* mipstr);
97 const char* IcountToMipsStr(
int icount);
98 const char* IcountToMipsItens(
char* buffer);
99 unsigned int ns_count;
100 void pins_reset(
void);
101 virtual void BoardOptions(
int* argc,
char** argv) {};
102 virtual const short int* GetPinMap(
void) = 0;
110 picpin pins[MAX_PIN_COUNT];
111 unsigned int serialbaud;
117 char fname_bak[2048];
118 unsigned short ADCvalues[16];
120 std::atomic_int qemu_started;
123 int use_cmdline_extra;
124 std::string cmdline_extra;
126 unsigned int application_offset;
127 int ConfEnableSerial;
131 int load_qemu_lib(
const char* path);
board(void)
Called once on board creation.
Definition board.cc:34
void MSetPinDOV(int pin, unsigned char ovalue) override
board microcontroller set Default Open Value (external pull)
Definition bsim_qemu.cc:1211
float MGetFreq(void) override
board microcontroller get frequency
Definition bsim_qemu.cc:1059
int MInit(const char *processor, const char *fname, float freq) override
board microcontroller init
Definition bsim_qemu.cc:374
void MSetFreq(float freq) override
board microcontroller set frequency
Definition bsim_qemu.cc:1053
void IoLockAccess(void) override
Lock IO to others threads access.
Definition bsim_qemu.cc:1377
void MEraseFlash(void) override
board microcontroller erase flash memory (program)
Definition bsim_qemu.cc:1049
float MGetVCC(void) override
board microcontroller get vcc
Definition bsim_qemu.cc:1067
int GetDefaultClock(void) override
Get board default clock in MHz.
Definition bsim_qemu.h:76
void MSetPinOAV(int pin, float value) override
board microcontroller set digital pin output average value
Definition bsim_qemu.cc:1215
float MGetInstClockFreq(void) override
board microcontroller get cpu internal clock (in PIC frequency/4)
Definition bsim_qemu.cc:1071
unsigned char MGetPin(int pin) override
board microcontroller get digital pin value
Definition bsim_qemu.cc:1219
float * MGetPinOAVPtr(int pin) override
board microcontroller get pointer to digital pin average value
Definition bsim_qemu.cc:1270
virtual std::string GetClkLabel(void) override
Return the description of clk label.
Definition bsim_qemu.h:90
void MEnd(void) override
board microcontroller end
Definition bsim_qemu.cc:977
std::string GetDebugName(void) override
Get debug interface name.
Definition bsim_qemu.h:47
int MReset(int flags) override
board microcontroller reset
Definition bsim_qemu.cc:1226
void MStep(void) override
board microcontroller run one step
Definition bsim_qemu.cc:1274
int MGetResetPin(void) override
Get the Reset pin of microcontroller.
Definition bsim_qemu.cc:1254
void MStepResume(void) override
board microcontroller run one or two steps to resume instruction
Definition bsim_qemu.h:70
void EvThreadRun(void) override
Event on the board.
Definition bsim_qemu.cc:430
int DebugInit(int dtyppe) override
Start debug support.
Definition bsim_qemu.cc:1170
std::string GetSimBackends(void) override
Return board backends name.
Definition bsim_qemu.cc:1015
int MGetArchitecture(void) override
Return board microcontroller architecture.
Definition bsim_qemu.cc:1000
void RefreshStatus(void) override
Called ever 1s to refresh status.
Definition bsim_qemu.cc:1401
int GetUARTTX(const int uart_num) override
Return the UART N TX pin number.
Definition bsim_qemu.cc:1392
void MSetSerial(const char *port) override
Set serial port name to use.
Definition bsim_qemu.cc:372
int GetUARTRX(const int uart_num) override
Return the UART N RX pin number.
Definition bsim_qemu.cc:1385
void MSetSimulationRun(int run) override
Called when simulation is paused or resumed.
Definition bsim_qemu.cc:251
int MDumpMemory(const char *fname) override
board microcontroller save non volatile memory to hex file
Definition bsim_qemu.cc:1081
std::string GetDebuggers(void) override
Return board supported debug interfaces name.
Definition bsim_qemu.cc:1031
const picpin * MGetPinsValues(void) override
board microcontroller get all pins list struct
Definition bsim_qemu.cc:1266
void MClearIOUpdated(void) override
clear microcontroler status IO updated
Definition bsim_qemu.cc:1262
int CpuInitialized(void) override
return true if microcontroller is initialized
Definition bsim_qemu.cc:1075
void DebugLoop(void) override
debug step (pooling)
Definition bsim_qemu.cc:1079
void MSetPin(int pin, unsigned char value) override
board microcontroller set digital pin
Definition bsim_qemu.cc:1200
int MGetIOUpdated(void) override
get microcontroler status IO updated
Definition bsim_qemu.cc:1258
void MSetVCC(float vcc) override
board microcontroller set vcc
Definition bsim_qemu.cc:1063
void IoUnlockAccess(void) override
Unlock IO to others threads access.
Definition bsim_qemu.cc:1381