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';
when IDLE =>
-- tx-Signale im idle Zustand halten
tx_rdy <= '1';
- cnt_nxt <= 0;
- 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';
- if baud_cnt = unsigned(bd_rate) then
+ if baud_cnt = bd_rate then
-- wenn die Bitdauer erreicht ist, Counter reseten
baud_cnt_next <= 0;
-- Counter um die einzelen Bits zu versenden
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);