24#ifndef __YASIMAVR_UART_H__
25#define __YASIMAVR_UART_H__
27#include "../core/sim_types.h"
28#include "../core/sim_cycle_timer.h"
29#include "../core/sim_signal.h"
30#include "../core/sim_logger.h"
51#define AVR_CTLREQ_USART_BYTES (AVR_CTLREQ_BASE + 1)
156 void set_stopbits(
unsigned short count);
157 void set_databits(
unsigned short count);
158 void set_parity(
Parity parity);
160 void set_tx_buffer_limit(
size_t limit);
161 void push_tx(uint16_t frame);
162 void cancel_tx_pending();
163 size_t tx_pending()
const;
164 void set_tx_dir_enabled(
bool enabled);
165 bool tx_in_progress()
const;
167 void set_rx_buffer_limit(
size_t limit);
168 void set_rx_enabled(
bool enabled);
169 size_t rx_available()
const;
171 uint16_t read_rx()
const;
172 bool has_frame_error()
const;
173 bool has_parity_error()
const;
174 bool has_rx_overrun()
const;
175 bool rx_in_progress()
const;
177 void push_rx_frame(uint16_t frame);
179 void set_paused(
bool enabled);
181 uint16_t build_frame(uint16_t data)
const;
182 uint16_t parse_frame(uint16_t frame)
const;
184 void line_state_changed(
Line line,
bool new_state);
204 unsigned short m_databits;
205 unsigned short m_stopbits;
208 uint16_t m_tx_shifter;
209 unsigned short m_tx_shift_counter;
210 std::deque<uint16_t> m_tx_buffer;
215 bool m_tx_dir_enabled;
221 uint16_t m_rx_shifter;
222 unsigned short m_rx_shift_counter;
224 std::deque<uint16_t> m_rx_buffer;
225 std::deque<uint16_t> m_rx_pending;
235 unsigned short framesize()
const;
237 void fill_tx_shifter();
238 void start_bitwise_tx();
241 void start_bitwise_rx();
248 void process_clock_change(
bool new_state);
261 return m_rx_buffer.size();
267 return m_tx_buffer.size() ? (m_tx_buffer.size() - 1) : 0;
Definition sim_cycle_timer.h:85
Definition sim_cycle_timer.h:134
Definition sim_logger.h:91
Signalling framework class.
Definition sim_signal.h:97
Generic model defining an universal synchronous/asynchronous serial interface a.k....
Definition sim_uart.h:140
size_t rx_available() const
number of frames stored in the RX buffer.
Definition sim_uart.h:259
virtual bool get_line_state(Line line) const =0
size_t tx_pending() const
Number of frames waiting in the buffer to be emitted.
Definition sim_uart.h:265
Signal & signal()
Internal signal used for operation signalling.
Definition sim_uart.h:253
virtual void set_line_state(Line line, bool state)=0
Common enums and signal definitions for UART classes.
Definition sim_uart.h:64
SignalId
Definition sim_uart.h:66
@ Signal_TX_Collision
Raised when the TX buffer overruns.
Definition sim_uart.h:84
@ Signal_TX_Data
Raised on transmission of a frame. sigdata contains the data transmitted.
Definition sim_uart.h:80
@ Signal_TX_Frame
Raised on transmission of a frame. sigdata contains the raw frame transmitted.
Definition sim_uart.h:78
@ Signal_TX_Complete
Definition sim_uart.h:71
@ Signal_RX_Start
Raised at the start of a frame reception.
Definition sim_uart.h:73
@ Signal_TX_Start
Raised at the start of a frame transmission, with sigdata containing the frame.
Definition sim_uart.h:68
@ Signal_RX_Overflow
Raised when the RX buffer overruns.
Definition sim_uart.h:82
@ Signal_RX_Complete
Definition sim_uart.h:76
ClockMode
Definition sim_uart.h:87
@ Clock_Emitter
Synchronous mode where the interface is the clock master.
Definition sim_uart.h:91
@ Clock_Async
Asynchronous mode, the clock line is not used.
Definition sim_uart.h:89
@ Clock_Receiver
Synchronous mode where the interface is not the clock master.
Definition sim_uart.h:93
Line
Definition sim_uart.h:99
@ Line_TXD
Definition sim_uart.h:100
@ Line_RXD
Definition sim_uart.h:101
@ Line_XCK
Definition sim_uart.h:102
@ Line_DIR
Definition sim_uart.h:103
Parity
Definition sim_uart.h:109
@ Parity_Odd
Definition sim_uart.h:111
@ Parity_No
Definition sim_uart.h:110
@ Parity_Even
Definition sim_uart.h:112
#define YASIMAVR_BEGIN_NAMESPACE
Definition sim_globals.h:58
#define AVR_CORE_PUBLIC_API
Definition sim_globals.h:46
#define YASIMAVR_END_NAMESPACE
Definition sim_globals.h:59
YASIMAVR_BEGIN_NAMESPACE typedef long long cycle_count_t
Definition sim_types.h:40