现在调uart232程序有数据遗失的问题。比如串口输入 1122334455,实际发送只有113355.是不是接收模块要写个缓存?怎么改呢?
我写了3个模块:波特率产生模块,接收模块,发送模块
模块间连接关系为: bclk= bclkr= bclkt
resetb=resetr=reset
(8位数据接收完毕) r_ready= xmit_cmd_p(有数据待发送)
模块外接端口为: clk 接芯片时钟 (50MHZ)
Rxdr 串口输入
Txd 串口输出
entity baud is
Port (clk,resetb:in std_logic;
bclk:out std_logic);
end baud;
entity receiver is
generic(framlenr:integer:=8);
Port (bclkr,resetr,rxdr:in std_logic; --定义输入输出信号
r_ready:out std_logic;
rbuf:out std_logic_vector(7 downto 0));
end receiver;
entity transfer is
generic(framlent:integer:=8);
Port (bclkt,resett:in std_logic;
xmit_cmd_p:in std_logic:='0'; --定义输入输出信号
txdbuf:in std_logic_vector(7 downto 0):="00000000";
txd:out std_logic:='0';
txd_done:out std_logic:='0');
end transfer;
板子晶振是50M的,分频为153600HZ = 波特率的16倍
entity baud is
Port (clk,resetb:in std_logic;
bclk:out std_logic);
end baud;
architecture behavioral of baud is
begin
process(clk,resetb)
variable cnt:integer range 0 to 325:=0;
begin
if resetb='0' then -- resetb='0'时复位
cnt:=0; bclk=325 then cnt:=0; bclk --r_readyif rxd_sync='0' then
if count="0110" then count:="0000";stateif count="1110" then
if rcnt=framlenr then staterbufs(rcnt):=rxd_sync; rcnt:=rcnt+1;
state r_readystate xcnt16:="00000";xbitcnt:=0;txd_done if xcnt16="00010" then state if xcnt16="01110" then
if xbitcnt=framlent then state txds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1;
state
if xcnt16="01111" then
if xmit_cmd_p='0' then statestate