projects
/
calu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tx fix
[calu.git]
/
cpu
/
src
/
rs232_tx_arc.vhd
diff --git
a/cpu/src/rs232_tx_arc.vhd
b/cpu/src/rs232_tx_arc.vhd
index c7dc886f5e26c2230b6fa62bf7e6df31489edfc5..ec9f4c5d26510547c00d96ebf748d0111ade43a8 100755
(executable)
--- 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';
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';
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';
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;
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
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;
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';
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';
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
-- 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';
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';
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
if stop_bit = '1' then
cnt_next <= 0;
-- Signalisieren dass der Sendevorgang beendet ist