tx fix
[calu.git] / cpu / src / rs232_tx_arc.vhd
index c7dc886f5e26c2230b6fa62bf7e6df31489edfc5..ec9f4c5d26510547c00d96ebf748d0111ade43a8 100755 (executable)
@@ -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