From 96cf9cabc078d3d8fbb6d3918667f72027426c21 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Tue, 11 Jan 2011 00:44:39 +0100 Subject: [PATCH] uart: still wtf, aber hey, es ist wenigstens reproduzierbar :D (des zeug aus dem vorigen commit) --- 3_test/uartint.s | 15 +++++++++------ cpu/src/rom_b.vhd | 13 ++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/3_test/uartint.s b/3_test/uartint.s index 8c62b03..8afa8f2 100644 --- a/3_test/uartint.s +++ b/3_test/uartint.s @@ -1,7 +1,7 @@ .text start: br+ main ;br+ - call+ uartrdy + br+ main ret main: ldi r0, 0x2000 ; status... @@ -12,8 +12,11 @@ main: ; stw r5, 0(r4) ldw r5, 0(r0) andx r5, 0x2 - brzs+ main -uartrdy: - ldw r7, 0(r2) - stw r7, 0(r1) - br main + brzs+ main ; no new data? + ldw r7, 0(r2) ; load data +uartnrdy: + ldw r5, 0(r0) + andx r5, 0x1 + brnz+ uartnrdy ; transmitter not ready yet? + stw r7, 0(r1) ; send zeh shit! + br main ; back to usual stuff diff --git a/cpu/src/rom_b.vhd b/cpu/src/rom_b.vhd index a0acce4..1415cb5 100644 --- a/cpu/src/rom_b.vhd +++ b/cpu/src/rom_b.vhd @@ -124,17 +124,20 @@ begin -- when "00000001000" => data_out <= x"e7280004"; -- -- when "00000001001" => data_out <= x"eb7ffb81"; when "0000000" => data_out <= x"eb000183"; -- br+ main - when "0000001" => data_out <= x"eb000407"; -- call+ uartrdy + when "0000001" => data_out <= x"eb000103"; -- br+ main when "0000010" => data_out <= x"eb000008"; -- ret when "0000011" => data_out <= x"ed010000"; -- ldi r0, 0x2000 when "0000100" => data_out <= x"ed090058"; -- ldi r1, 0x200b when "0000101" => data_out <= x"ed110060"; -- ldi r2, 0x200c when "0000110" => data_out <= x"e7280000"; -- ldw r5, 0(r0) when "0000111" => data_out <= x"e2a80010"; -- andx r5, 0x2 - when "0001000" => data_out <= x"1b7ffd83"; -- brzs+ main - when "0001001" => data_out <= x"e7390000"; -- ldw r7, 0(r2) - when "0001010" => data_out <= x"e7b88000"; -- stw r7, 0(r1) - when "0001011" => data_out <= x"eb7ffc01"; -- br main + when "0001000" => data_out <= x"1b7ffd83"; -- brzs+ main + when "0001001" => data_out <= x"e7390000"; -- ldw r7, 0(r2) + when "0001010" => data_out <= x"e7280000"; -- ldw r5, 0(r0) + when "0001011" => data_out <= x"e2a80008"; -- andx r5, 0x1 + when "0001100" => data_out <= x"0b7fff03"; -- brnz+ uartnrdy + when "0001101" => data_out <= x"e7b88000"; -- stw r7, 0(r1) + when "0001110" => data_out <= x"eb7ffa81"; -- br main -- just nop until rom end! when others => data_out <= x"fd000000"; end case; -- 2.25.1