typcast dirtyfix
[calu.git] / cpu / src / rs232_tx_arc.vhd
index ee231e4068079786297ca90a1b5a5d64a69d1941..3dce8796b52fb5163c16dfa296c542fa49ecce19 100755 (executable)
@@ -13,16 +13,17 @@ library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.numeric_std.all;
 
+use work.extension_uart_pkg.all;
+
 use work.common_pkg.all;
 use work.core_pkg.all;
-use work.extension_uart_pkg.all;
 
 architecture beh of rs232_tx is
        -- definierern der intern verwendeten Signale
        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 := 0;
+       signal baud_cnt,baud_cnt_next : integer;
        signal cnt, cnt_next : natural range 0 to 11 := 0;
        signal idle_sig, idle_sig_next : std_logic := '0';
        
@@ -83,7 +84,10 @@ begin
                        when IDLE =>
                                -- tx-Signale im idle Zustand halten
                                tx_rdy <= '1';
-                               baud_cnt_next <= to_integer(unsigned(bd_rate));
+                               cnt_next <= 0;
+                               -- TODO: wtf, typproblem
+                               baud_cnt_next <= to_integer(IEEE.numeric_std.unsigned(bd_rate));
+                               --baud_cnt_next <= CLK_PER_BAUD;
                        when SEND =>
                                -- Signalisiert dass gerade ein Byte versendet wird 
                                tx_rdy <= '0';
@@ -99,19 +103,19 @@ begin
                                                when 9 =>
                                                        -- counter = 9 => Stopbit versenden
                                                        bus_tx_nxt <= '1';
-                                                       -- 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 heit 2 stop bits
-                                                       if stop_bit = '1' then 
+                                                       if stop_bit = '0' then 
                                                                cnt_next <= 0;
                                                                -- Signalisieren dass der Sendevorgang beendet ist
                                                                idle_sig_next <= '1';
                                                        end if;
+                                               when 11 => 
+                                                       bus_tx_nxt <= '1';
+                                                       cnt_next <= 0;
+                                                       -- Signalisieren dass der Sendevorgang beendet ist
+                                                       idle_sig_next <= '1';
                                                when others =>
                                                        -- counter von 1 bis 8 => Datenbits versenden
                                                        bus_tx_nxt <= tx_data(cnt-1);