---
cores/uart/rtl/uart.v | 13 ++++++++++---
software/include/hw/uart.h | 6 ++++++
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/cores/uart/rtl/uart.v b/cores/uart/rtl/uart.v
index 83a317c..5f7be9d 100644
--- a/cores/uart/rtl/uart.v
+++ b/cores/uart/rtl/uart.v
@@ -18,7 +18,8 @@
module uart #(
parameter csr_addr = 4'h0,
parameter clk_freq = 100000000,
- parameter baud = 115200
+ parameter baud = 115200,
+ parameter break_en_default = 1'b0
) (
input sys_clk,
input sys_rst,
@@ -76,23 +77,29 @@ parameter default_divisor = clk_freq/baud/16;
reg thru;
reg break_en;
+reg tx_pending;
always @(posedge sys_clk) begin
if(sys_rst) begin
divisor <= default_divisor;
csr_do <= 32'd0;
thru <= 1'b0;
- break_en <= 1'b1;
+ break_en <= break_en_default;
+ tx_pending <= 1'b0;
end else begin
csr_do <= 32'd0;
if (break)
break_en <= 1'b0;
+ if (tx_irq)
+ tx_pending <= 1'b0;
+ if (tx_wr)
+ tx_pending <= 1'b1;
if(csr_selected) begin
case(csr_a[1:0])
2'b00: csr_do <= rx_data;
2'b01: csr_do <= divisor;
2'b10: csr_do <= thru;
- 2'b11: csr_do <= break_en;
+ 2'b11: csr_do <= {tx_pending, break_en};
endcase
if(csr_we) begin
case(csr_a[1:0])
diff --git a/software/include/hw/uart.h b/software/include/hw/uart.h
index 01d9645..a5eb2fa 100644
--- a/software/include/hw/uart.h
+++ b/software/include/hw/uart.h
@@ -23,5 +23,11 @@
#define CSR_UART_RXTX MMPTR(0xe0000000)
#define CSR_UART_DIVISOR MMPTR(0xe0000004)
#define CSR_UART_THRU MMPTR(0xe0000008)
+#define CSR_UART_BREAK MMPTR(0xe000000c)
+
+#define UART_THRU (0x1)
+
+#define UART_BREAK_EN (0x1)
+#define UART_TX_PENDING (0x2)
#endif /* __HW_UART_H */
--
1.7.2.3
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode
Twitter: www.twitter.com/milkymistvj
Ideas? http://milkymist.uservoice.com