arch_xt_misc.h Source File

yasimavr: arch_xt_misc.h Source File
yasimavr
Loading...
Searching...
No Matches
arch_xt_misc.h
Go to the documentation of this file.
1/*
2 * arch_xt_misc.h
3 *
4 * Copyright 2021-2026 Clement Savergne <csavergne@yahoo.com>
5
6 This file is part of yasim-avr.
7
8 yasim-avr is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 yasim-avr is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with yasim-avr. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22//=======================================================================================
23
24#ifndef __YASIMAVR_XT_MISC_H__
25#define __YASIMAVR_XT_MISC_H__
26
27#include "arch_xt_globals.h"
28#include "core/sim_interrupt.h"
29#include "core/sim_memory.h"
30#include "core/sim_types.h"
31#include "core/sim_pin.h"
33
35
36
37//=======================================================================================
38
44
50
51 struct channel_t {
53 std::vector<reference_config_t> references;
54 };
55
57 std::vector<channel_t> channels;
60
61};
62
63
69
70public:
71
72 explicit ArchXT_VREF(const ArchXT_VREFConfig& config);
73
74 virtual bool init(Device&) override;
75 virtual void reset(int flags) override;
76 virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t& data) override;
77
78private:
79
80 const ArchXT_VREFConfig& m_config;
81
82 void set_channel_reference(unsigned int index, uint8_t reg_value);
83
84};
85
86
87//=======================================================================================
88
93
95 unsigned int vector_count;
97 unsigned int vector_size;
100
101};
102
107
108public:
109
110 explicit ArchXT_IntCtrl(const ArchXT_IntCtrlConfig& config);
111
112 virtual bool init(Device& device) override;
113 virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t& data) override;
114 virtual void cpu_reti() override;
115
116protected:
117
122
123 virtual void cpu_ack_irq(int_vect_t vector) override;
124 virtual IRQ_t get_next_irq() const override;
125
126private:
127
128 const ArchXT_IntCtrlConfig& m_config;
129 MemorySectionManager* m_sections;
130
131 vect_info_t get_next_vector() const;
132 flash_addr_t get_table_base() const;
133
134};
135
136
137//=======================================================================================
138
145
146public:
147
149
150 virtual bool init(Device& device) override;
151 virtual void reset(int flags) override;
152 virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t& data) override;
153
154private:
155
156 const reg_addr_t m_base_reg;
157 uint8_t m_rst_flags;
158
159};
160
161
162//=======================================================================================
163
164#define MCU_REVID 0xFF
165
166#define AVR_CTLREQ_WRITE_SIGROW (AVR_CTLREQ_BASE + 1)
167
185
202
203public:
204
206 virtual ~ArchXT_MiscRegCtrl();
207
208 virtual bool init(Device& device) override;
209 virtual void reset(int flags) override;
210 virtual bool ctlreq(ctlreq_id_t req, ctlreq_data_t* data) override;
211 virtual uint8_t ioreg_read_handler(reg_addr_t addr, uint8_t value) override;
212 virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t& data) override;
213
214private:
215
216 const ArchXT_MiscConfig& m_config;
217 uint8_t* m_sigrow;
218
219};
220
221
222//=======================================================================================
223
228
233
238 std::vector<mux_map_entry_t> mux_map;
239 };
240
241 std::vector<mux_config_t> mux_configs;
242
243};
244
249
250public:
251
253
254 virtual bool init(Device& device) override;
255 virtual void reset(int flags) override;
256 virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t& data) override;
257
258private:
259
260 const ArchXT_PortMuxConfig& m_config;
261
262 void activate_mux(const ArchXT_PortMuxConfig::mux_config_t& cfg, uint8_t reg_value);
263
264};
265
266
268
269#endif //__YASIMAVR_XT_MISC_H__
#define AVR_ARCHXT_PUBLIC_API
Definition arch_xt_globals.h:46
Implementation of a Interrupt Controller for XT core series.
Definition arch_xt_misc.h:106
Implementation of a controller for misc registers for XT core series.
Definition arch_xt_misc.h:201
Implementation of a generic portmux controller for XT core series.
Definition arch_xt_misc.h:248
Implementation of a Reset controller for XT core series.
Definition arch_xt_misc.h:144
Implementation of a voltage reference controller for XT core series.
Definition arch_xt_misc.h:68
Basic AVR device model.
Definition sim_device.h:61
Generic interrupt controller.
Definition sim_interrupt.h:75
Memory section management.
Definition sim_memory.h:124
Abstract class defining a framework for MCU peripherals.
Definition sim_peripheral.h:286
virtual bool init(Device &device)
Definition sim_peripheral.cpp:60
virtual void ioreg_write_handler(reg_addr_t addr, const ioreg_write_t &data) override
Definition sim_peripheral.cpp:117
virtual uint8_t ioreg_read_handler(reg_addr_t addr, uint8_t value) override
Definition sim_peripheral.cpp:91
virtual void reset(int flags)
Definition sim_peripheral.cpp:72
Generic model for managing VREF for analog peripherals (ADC, analog comparator)
Definition sim_vref.h:72
Source
Enumation value for the sources of voltage references.
Definition sim_vref.h:77
virtual bool ctlreq(ctlreq_id_t req, ctlreq_data_t *data) override
Definition sim_vref.cpp:51
Representation of a I/O register address, with validity state.
Definition sim_types.h:60
Represents a field in a I/O register with address.
Definition sim_types.h:348
Representation of a ID internally represented as a 64-bits integer but can be initialised with a stri...
Definition sim_types.h:627
int ctlreq_id_t
Definition sim_peripheral.h:111
#define YASIMAVR_BEGIN_NAMESPACE
Definition sim_globals.h:58
#define YASIMAVR_END_NAMESPACE
Definition sim_globals.h:59
unsigned long flash_addr_t
Definition sim_types.h:42
short int_vect_t
Definition sim_types.h:43
Definition arch_xt_misc.h:118
int priority
Definition arch_xt_misc.h:120
int_vect_t vector
Definition arch_xt_misc.h:119
Configuration structure for ArchXT_IntCtrl.
Definition arch_xt_misc.h:92
reg_addr_t reg_base
Base address for the controller registers.
Definition arch_xt_misc.h:99
unsigned int vector_size
Size in bytes of each vector.
Definition arch_xt_misc.h:97
unsigned int vector_count
Number of interrupt vector.
Definition arch_xt_misc.h:95
Configuration structure for ArchXT_MiscRegCtrl.
Definition arch_xt_misc.h:171
uint32_t dev_id
Device ID.
Definition arch_xt_misc.h:182
reg_addr_t reg_base_sigrow
Base address for the signature row registers.
Definition arch_xt_misc.h:180
reg_addr_t reg_revid
Address for the Revision ID register.
Definition arch_xt_misc.h:178
reg_addr_t reg_base_gpior
Base address for the general purpose registers.
Definition arch_xt_misc.h:174
unsigned int gpior_count
Number of general purpose registers.
Definition arch_xt_misc.h:176
Definition arch_xt_misc.h:234
regbit_t reg
Definition arch_xt_misc.h:235
ctl_id_t drv_id
Definition arch_xt_misc.h:236
int pin_index
Definition arch_xt_misc.h:237
std::vector< mux_map_entry_t > mux_map
Definition arch_xt_misc.h:238
Structure defining the mux ID corresponding to a register field value.
Definition arch_xt_misc.h:230
PinManager::mux_id_t mux_id
Definition arch_xt_misc.h:231
Configuration structure for ArchXT_PortMuxCtrl.
Definition arch_xt_misc.h:227
std::vector< mux_config_t > mux_configs
Definition arch_xt_misc.h:241
Definition arch_xt_misc.h:51
std::vector< reference_config_t > references
Definition arch_xt_misc.h:53
regbit_t rb_select
Definition arch_xt_misc.h:52
Structure defining the source of a voltage reference.
Definition arch_xt_misc.h:46
double level
Definition arch_xt_misc.h:48
VREF::Source source
Definition arch_xt_misc.h:47
Configuration structure for ArchXT_VREF.
Definition arch_xt_misc.h:43
reg_addr_t reg_base
Base address for the peripheral I/O registers.
Definition arch_xt_misc.h:59
std::vector< channel_t > channels
Configuration for the VREF channels.
Definition arch_xt_misc.h:57
Definition sim_interrupt.h:105
Definition sim_peripheral.h:252
Definition sim_peripheral.h:237
Definition sim_ioreg.h:39