aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/serialport.h
diff options
context:
space:
mode:
authorPavel Pisa <pisa@cmp.felk.cvut.cz>2019-03-04 15:30:11 +0100
committerPavel Pisa <pisa@cmp.felk.cvut.cz>2019-03-04 15:30:11 +0100
commit1dc09ab41ae703a1f15be87cacab5e842cf1a09d (patch)
tree392908ad6642e1ad5f9afa8c21998665a83534af /qtmips_machine/serialport.h
parentcd3a4b268a9b3d4d5436fee5de7967adb6f6e170 (diff)
downloadqtmips-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.h10
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;
};
}