PICSimLab - Programmable IC Simulator Laboratory 0.9.3
PICSimLab - API
Loading...
Searching...
No Matches
bsim_simavr.h
1/* ########################################################################
2
3 PICSimLab - Programmable IC Simulator Laboratory
4
5 ########################################################################
6
7 Copyright (c) : 2010-2026 Luis Claudio GambĂ´a Lopes <lcgamboa@yahoo.com>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
23 For e-mail suggestions : lcgamboa@yahoo.com
24 ######################################################################## */
25
26#ifndef BOARD_AVR_H
27#define BOARD_AVR_H
28
29#include "../lib/board.h"
30
31#include "../devices/bitbang_uart.h"
32#include "../devices/mplabxd.h"
33#include "../lib/serial_port.h"
34
35#include <simavr/avr_adc.h>
36#include <simavr/avr_ioport.h>
37#include <simavr/avr_twi.h>
38#include <simavr/avr_uart.h>
39#include <simavr/sim_avr.h>
40#include <simavr/sim_elf.h>
41#include <simavr/sim_gdb.h>
42#include <simavr/sim_hex.h>
43
44#define MAX_UART_COUNT 4
45
46typedef struct {
47 unsigned char sdao;
48 unsigned char sclo;
49 picpin* sda;
50 picpin* scl;
51 avr_irq_t* sda_irq;
52 avr_irq_t* scl_irq;
53 unsigned char out;
54} usi_t;
55
56class bsim_simavr : virtual public board {
57public:
58 bsim_simavr(void); // Called once on board creation
59 int DebugInit(int dtyppe) override;
60 std::string GetDebugName(void) override;
61 void DebugLoop(void) override;
62 int CpuInitialized(void) override;
63 void MSetSerial(const char* port) override;
64 int MInit(const char* processor, const char* fname, float freq) override;
65 void MEnd(void) override;
66 int MGetArchitecture(void) override;
67 std ::string GetSimBackends(void) override { return "simavr,"; };
68 std ::string GetDebuggers(void) override { return "avr-gdb,MDB,"; };
69 int MDumpMemory(const char* fname) override;
70 void MEraseFlash(void) override;
71 void MSetFreq(float freq) override;
72 float MGetFreq(void) override;
73 void MSetVCC(float vcc) override;
74 float MGetVCC(void) override;
75 float MGetInstClockFreq(void) override;
76 int MGetPinCount(void) override;
77 std::string MGetPinName(int pin) override;
78 void MSetPin(int pin, unsigned char value) override;
79 void MSetPinDOV(int pin, unsigned char ovalue) override;
80 void MSetPinOAV(int pin, float value) override;
81 void MSetAPin(int pin, float value) override;
82 unsigned char MGetPin(int pin) override;
83 const picpin* MGetPinsValues(void) override;
84 float* MGetPinOAVPtr(int pin) override;
85 void MStep(void) override;
86 void MStepResume(void) override;
87 int MReset(int flags) override;
88 int MGetResetPin(void) override;
89 int MGetIOUpdated(void) override;
90 void MClearIOUpdated(void) override;
91 unsigned short* DBGGetProcID_p(void) override;
92 unsigned int DBGGetPC(void) override;
93 void DBGSetPC(unsigned int pc) override;
94 unsigned char* DBGGetRAM_p(void) override;
95 unsigned char* DBGGetROM_p(void) override;
96 unsigned char* DBGGetCONFIG_p(void) override;
97 unsigned char* DBGGetID_p(void) override;
98 unsigned char* DBGGetEEPROM_p(void) override;
99 unsigned int DBGGetRAMSize(void) override;
100 unsigned int DBGGetROMSize(void) override;
101 unsigned int DBGGetCONFIGSize(void) override;
102 unsigned int DBGGetIDSize(void) override;
103 unsigned int DBGGetEEPROM_Size(void) override;
104 int GetDefaultClock(void) override { return 16; };
105 int GetUARTRX(const int uart_num) override;
106 int GetUARTTX(const int uart_num) override;
107 std::string GetUARTStrStatus(const int uart_num) override;
108 virtual void UpdateHardware(void);
109 void RefreshStatus(void) override;
110
111 static void out_hook(struct avr_irq_t* irq, uint32_t value, void* param) {
112 picpin* p = (picpin*)param;
113 p->value = value;
114 ioupdated = 1;
115 }
116
117 static void ddr_hook(struct avr_irq_t* irq, uint32_t value, void* param) {
118 picpin* p = (picpin*)param;
119 p->dir = !(value & (1 << p->pord));
120 ioupdated = 1;
121 }
122
123 void SerialSend(bitbang_uart_t* _bb_uart, const unsigned char value);
124
125 usi_t USI;
126
127protected:
128 avr_t* avr;
129 avr_irq_t* serial_irq[MAX_UART_COUNT];
130 picpin pins[MAX_PIN_COUNT];
131 avr_irq_t* Write_stat_irq[100];
132 unsigned int serialbaud[MAX_UART_COUNT];
133 float serialexbaud[MAX_UART_COUNT];
134 void pins_reset(void);
135 int avr_debug_type;
136 serialfd_t serialfd;
137 bitbang_uart_t bb_uart[MAX_UART_COUNT];
138 unsigned char* eeprom;
139 unsigned char uart_config[MAX_UART_COUNT];
140 unsigned char usart_count;
141 unsigned int UCSR_base[MAX_UART_COUNT];
142
143private:
144 int parse_hex(const char* line, int bytes);
145 unsigned char checksum(char* str);
146 int read_ihx_avr(const char* fname, int leeprom);
147 int write_ihx_avr(const char* fname);
148
149protected:
150 int pkg;
151};
152
153#define EIMSK 0x3D
154#define UCSR0A 0XC0
155#define UCSR0B 0XC1
156#define UCSR0C 0XC2
157#define UBRR0L 0xC4
158#define UBRR0H 0xC5
159
160#define UCSR1A 0xC8
161#define UCSR1B 0XC9
162#define UBRR1L 0xCC
163#define UBRR1H 0xCD
164
165#define UCSR2A 0xD0
166#define UCSR2B 0XD1
167#define UBRR2L 0xD4
168#define UBRR2H 0xD5
169
170#define UCSR3A 0x130
171#define UCSR3B 0X131
172#define UBRR3L 0x134
173#define UBRR3H 0x135
174
175#define GIMSK 0x3B
176#define USICR 0x2D
177#define USISR 0x2E
178#define USIDR 0x2F
179#define USIBR 0x30
180
181// TinyDebug
182#define TDDR 0x3A
183#define TDCR 0x3B
184
185#endif /* BOARD_AVR_H */
board(void)
Called once on board creation.
Definition board.cc:34
float MGetVCC(void) override
board microcontroller get vcc
Definition bsim_simavr.cc:560
int DebugInit(int dtyppe) override
Start debug support.
Definition bsim_simavr.cc:606
std::string GetSimBackends(void) override
Return board backends name.
Definition bsim_simavr.h:67
unsigned int DBGGetEEPROM_Size(void) override
board microcontroller get data EEPROM memory size
Definition bsim_simavr.cc:1646
unsigned char * DBGGetCONFIG_p(void) override
board microcontroller get CONFIG memory pointer
Definition bsim_simavr.cc:1615
void MSetPin(int pin, unsigned char value) override
board microcontroller set digital pin
Definition bsim_simavr.cc:1202
float MGetFreq(void) override
board microcontroller get frequency
Definition bsim_simavr.cc:552
void MSetAPin(int pin, float value) override
board microcontroller set analog pin
Definition bsim_simavr.cc:1234
const picpin * MGetPinsValues(void) override
board microcontroller get all pins list struct
Definition bsim_simavr.cc:1407
unsigned int DBGGetRAMSize(void) override
board microcontroller get RAM memory size
Definition bsim_simavr.cc:1628
float * MGetPinOAVPtr(int pin) override
board microcontroller get pointer to digital pin average value
Definition bsim_simavr.cc:1411
void MStep(void) override
board microcontroller run one step
Definition bsim_simavr.cc:1552
unsigned char * DBGGetID_p(void) override
board microcontroller get internal IDS memory pointer
Definition bsim_simavr.cc:1619
unsigned int DBGGetIDSize(void) override
board microcontroller get internal IDS memory size
Definition bsim_simavr.cc:1641
void MSetPinOAV(int pin, float value) override
board microcontroller set digital pin output average value
Definition bsim_simavr.cc:1230
unsigned int DBGGetROMSize(void) override
board microcontroller get ROM (FLASH) memory size
Definition bsim_simavr.cc:1632
int MGetArchitecture(void) override
Return board microcontroller architecture.
Definition bsim_simavr.cc:536
void RefreshStatus(void) override
Called ever 1s to refresh status.
Definition bsim_simavr.cc:1871
int MInit(const char *processor, const char *fname, float freq) override
board microcontroller init
Definition bsim_simavr.cc:283
int GetUARTRX(const int uart_num) override
Return the UART N RX pin number.
Definition bsim_simavr.cc:1650
unsigned char MGetPin(int pin) override
board microcontroller get digital pin value
Definition bsim_simavr.cc:1400
void MSetFreq(float freq) override
board microcontroller set frequency
Definition bsim_simavr.cc:545
int MGetPinCount(void) override
board microcontroller pin count
Definition bsim_simavr.cc:652
void MSetPinDOV(int pin, unsigned char ovalue) override
board microcontroller set Default Open Value (external pull)
Definition bsim_simavr.cc:1217
int MGetIOUpdated(void) override
get microcontroler status IO updated
Definition bsim_simavr.cc:1587
void MSetVCC(float vcc) override
board microcontroller set vcc
Definition bsim_simavr.cc:556
int GetUARTTX(const int uart_num) override
Return the UART N TX pin number.
Definition bsim_simavr.cc:1656
int CpuInitialized(void) override
return true if microcontroller is initialized
Definition bsim_simavr.cc:648
void MSetSerial(const char *port) override
Set serial port name to use.
Definition bsim_simavr.cc:83
unsigned int DBGGetCONFIGSize(void) override
board microcontroller get CONFIG memory size
Definition bsim_simavr.cc:1636
unsigned int DBGGetPC(void) override
board microcontroller get PC
Definition bsim_simavr.cc:1599
void DebugLoop(void) override
debug step (pooling)
Definition bsim_simavr.cc:637
int GetDefaultClock(void) override
Get board default clock in MHz.
Definition bsim_simavr.h:104
unsigned char * DBGGetRAM_p(void) override
board microcontroller get RAM memory pointer
Definition bsim_simavr.cc:1607
void MEraseFlash(void) override
board microcontroller erase flash memory (program)
Definition bsim_simavr.cc:540
int MReset(int flags) override
board microcontroller reset
Definition bsim_simavr.cc:1558
float MGetInstClockFreq(void) override
board microcontroller get cpu internal clock (in PIC frequency/4)
Definition bsim_simavr.cc:567
unsigned char * DBGGetROM_p(void) override
board microcontroller get ROM (FLASH) memory pointer
Definition bsim_simavr.cc:1611
std::string GetDebugName(void) override
Get debug interface name.
Definition bsim_simavr.cc:629
void MStepResume(void) override
board microcontroller run one or two steps to resume instruction
Definition bsim_simavr.cc:1556
std::string GetDebuggers(void) override
Return board supported debug interfaces name.
Definition bsim_simavr.h:68
int MDumpMemory(const char *fname) override
board microcontroller save non volatile memory to hex file
Definition bsim_simavr.cc:571
unsigned char * DBGGetEEPROM_p(void) override
board microcontroller get data EEPROM memory pointer
Definition bsim_simavr.cc:1624
int MGetResetPin(void) override
Get the Reset pin of microcontroller.
Definition bsim_simavr.cc:1583
void MEnd(void) override
board microcontroller end
Definition bsim_simavr.cc:472
std::string MGetPinName(int pin) override
board microcontroller pin name
Definition bsim_simavr.cc:676
void DBGSetPC(unsigned int pc) override
board microcontroller set PC
Definition bsim_simavr.cc:1603
unsigned short * DBGGetProcID_p(void) override
board microcontroller get pointer to processor ID
Definition bsim_simavr.cc:1595
void MClearIOUpdated(void) override
clear microcontroler status IO updated
Definition bsim_simavr.cc:1591
Definition bsim_simavr.h:46