diff options
author | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-03-04 15:30:11 +0100 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-03-04 15:30:11 +0100 |
commit | 1dc09ab41ae703a1f15be87cacab5e842cf1a09d (patch) | |
tree | 392908ad6642e1ad5f9afa8c21998665a83534af /qtmips_machine/serialport.h | |
parent | cd3a4b268a9b3d4d5436fee5de7967adb6f6e170 (diff) | |
download | qtmips-1dc09ab41ae703a1f15be87cacab5e842cf1a09d.tar.gz qtmips-1dc09ab41ae703a1f15be87cacab5e842cf1a09d.tar.bz2 qtmips-1dc09ab41ae703a1f15be87cacab5e842cf1a09d.zip |
Implemented interrupt delivery and processing for serial port.
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Diffstat (limited to 'qtmips_machine/serialport.h')
-rw-r--r-- | qtmips_machine/serialport.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/qtmips_machine/serialport.h b/qtmips_machine/serialport.h index 5262720..0f469b7 100644 --- a/qtmips_machine/serialport.h +++ b/qtmips_machine/serialport.h @@ -55,15 +55,25 @@ signals: void rx_byte_pool(int fd, unsigned int &data, bool &available) const; void write_notification(std::uint32_t address, std::uint32_t value); void read_notification(std::uint32_t address, std::uint32_t *value) const; + void signal_interrupt(uint irq_level, bool active) const; + +public slots: + void rx_queue_check() const; public: bool wword(std::uint32_t address, std::uint32_t value); std::uint32_t rword(std::uint32_t address, bool debug_access = false) const; private: void pool_rx_byte() const; + void update_rx_irq() const; + void update_tx_irq() const; mutable std::uint32_t rx_st_reg; mutable std::uint32_t rx_data_reg; std::uint32_t tx_st_reg; + std::uint8_t tx_irq_level; + std::uint8_t rx_irq_level; + mutable bool tx_irq_active; + mutable bool rx_irq_active; }; } |