X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=cpu%2Fsrc%2Frs232_tx_arc.vhd;h=ec9f4c5d26510547c00d96ebf748d0111ade43a8;hb=5ea614ffdad7c1318902046218d9615994b366e1;hp=c7dc886f5e26c2230b6fa62bf7e6df31489edfc5;hpb=4d230c21bb8c9c23c3dd3349f8736b84987eab0d;p=calu.git diff --git a/cpu/src/rs232_tx_arc.vhd b/cpu/src/rs232_tx_arc.vhd index c7dc886..ec9f4c5 100755 --- a/cpu/src/rs232_tx_arc.vhd +++ b/cpu/src/rs232_tx_arc.vhd @@ -22,7 +22,7 @@ architecture beh of rs232_tx is type STATE_TYPE is (IDLE,SEND); signal state, state_next : STATE_TYPE; signal bus_tx_int, bus_tx_nxt : std_logic := '1'; - signal baud_cnt,baud_cnt_next : integer := CLK_PER_BAUD; + signal baud_cnt,baud_cnt_next : integer := 0; signal cnt, cnt_next : natural range 0 to 11 := 0; signal idle_sig, idle_sig_next : std_logic := '0'; @@ -37,6 +37,7 @@ begin state <= IDLE; idle_sig <= '0'; bus_tx_int <= '1'; + baud_cnt <= 0; elsif rising_edge(sys_clk) then -- sync Zustand, uebernehmen der next-Signale baud_cnt <= baud_cnt_next; @@ -69,25 +70,25 @@ begin end process; -- Ausgabe Logik - rs232_tx_baud : process(sys_clk, sys_res_n, state, baud_cnt, cnt, tx_data, bus_tx_int,stop_bit) + rs232_tx_baud : process(sys_clk, sys_res_n, state, baud_cnt, cnt, tx_data, bus_tx_int,stop_bit, bd_rate) begin -- Solang idle_sig auf 0 ist wird im SEND Zustand verblieben idle_sig_next <= '0'; bus_tx_nxt <= bus_tx_int; cnt_next <= cnt; - baud_cnt_next <= baud_cnt; + -- Counter erhoehen um die Zeit einer Bitdauer abzuwarten + baud_cnt_next <= baud_cnt + 1; case state is when IDLE => -- tx-Signale im idle Zustand halten tx_rdy <= '1'; - baud_cnt_next <= CLK_PER_BAUD; + cnt_nxt <= 0; + baud_cnt_next <= to_integer(unsigned(bd_rate)); when SEND => -- Signalisiert dass gerade ein Byte versendet wird tx_rdy <= '0'; - -- Counter erhoehen um die Zeit einer Bitdauer abzuwarten - baud_cnt_next <= baud_cnt + 1; - if baud_cnt = CLK_PER_BAUD then + if baud_cnt = unsigned(bd_rate) then -- wenn die Bitdauer erreicht ist, Counter reseten baud_cnt_next <= 0; -- Counter um die einzelen Bits zu versenden @@ -99,14 +100,14 @@ begin when 9 => -- counter = 9 => Stopbit versenden bus_tx_nxt <= '1'; - -- stop_bit 0 heißt 1 stop bit + -- stop_bit 0 heit 1 stop bit if stop_bit = '0' then cnt_next <= 0; idle_sig_next <= '1'; end if; when 10 => bus_tx_nxt <= '1'; - -- stop_bit 1 heißt 2 stop bits + -- stop_bit 1 heit 2 stop bits if stop_bit = '1' then cnt_next <= 0; -- Signalisieren dass der Sendevorgang beendet ist