Minh dang thu truyen du lieu qua cong RS 232 xuong KIT DE2.Sau do luu du lieu vao RAM.Da ai lam chua??? xin chi giao ho.
Thông báo
Collapse
No announcement yet.
Nhận dự liệu từ cổng nối tiếp RS232 trên board FPGA
Collapse
X
-
Em cũng đang làm cái truyền file qua RS232 từ PC, thực hiện trên EDK làm uP nhúng chứ ko làm cứng bằng HDL. Gửi nhận 1 character thì đc rồi nhưng file thì vẫn chưa đc. Tại em cug mới lần đầu làm trên EDK nên chưa hỉu lắm. Em làm quá trình nhận như đã làm thành công PC-to-PC, tức là vất hàm nhận XUartLite_Recv() vào trong hàm xử lý ngắt nhận nhưng debug thì chỉ toàn thấy save được byte đầu tiên của mỗi lần đọc vào SRAM.
Bác nào quan tâm hoặc làm rồi thì cùng trao đổi nhéLast edited by NEO3F; 27-04-2008, 00:34.
Comment
-
Nguyên văn bởi duchut Xem bài viếtMinh dang thu truyen du lieu qua cong RS 232 xuong KIT DE2.Sau do luu du lieu vao RAM.Da ai lam chua??? xin chi giao ho.
Nguyên văn bởi thaohoa Xem bài viếtCho minh hoi sau khi DEII nhan data tu RS232 thi viec xu li thuc hien o dau va data muon truyen ra LCD thi lam the nao?Ban nao giup minh.
Comment
-
Nguyên văn bởi duchut Xem bài viếtchu de RS232 soi noi that.Minh da lam thu tren KIT DE2 cua Artera thi thay no chay dung.Thuc ra thi moi Kit cua moi hang khac nhau thi cung co cung mot nguyen tac.Minh post code RS_receive viet bang VHDL len anh em gop y nhe.Code nay minh lay tren trang http://www.fpga4fun.com/ExternalContributions/.Phan receiver minh co chinh sua mot ty thi no chay duoc tren KIT DE2 cua Artera.
--
-- UART: receiver
--
-- Copyrighted by Wincent Balin
-- Idea by Jean P. Nicolle
--
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity UARTReceiver is
generic
(
frequency : integer:=50000000;
baud : integer:=9600;
oversampling : integer:=8
);
port
(
clk : in std_logic;
rxd : in std_logic;
rxd_data : out std_logic_vector(7 downto 0);
rxd_data_ready : out std_logic
);
end entity UARTReceiver;
architecture UARTReceiverArch of UARTReceiver is
-- defining constants
constant BIT_SPACE : integer := 10; -- 8 to 11 are common
constant DIVISOR : integer := 1600;
constant FREQ_INC : integer := (oversampling + 0) * baud / DIVISOR;
constant FREQ_DIV : integer := frequency / DIVISOR;
constant FREQ_MAX : integer := FREQ_DIV + FREQ_INC - 1;
-- defining types
type state_type is (idle, bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7, stop);
-- defining signals
signal state : state_type := idle; -- receiver's state
signal rxd_sync_inv : std_logic_vector(1 downto 0);
signal rxd_cnt_inv : std_logic_vector(1 downto 0);
signal rxd_bit_inv : std_logic;
signal baud_divider : integer range 0 to FREQ_MAX := 0;
signal data : std_logic_vector(7 downto 0);
signal baudover_tick : std_logic := '0';
signal bit_spacing : integer range 0 to 15;
signal next_bit : std_logic := '0';
begin
-- assignments
next_bit <= '1' when bit_spacing = BIT_SPACE else '0';
-- processes
baud_gen : process(clk)--dung de bam xung, tao ra xung co tan so lon hon toc do baud
begin
if clk'event and clk = '1' then
baud_divider <= baud_divider + FREQ_INC;
if baud_divider >= FREQ_DIV then
baud_divider <= 0;
baudover_tick <= '1';
else
baudover_tick <= '0';
end if;
end if;
end process baud_gen;
--
rxd_sync_inverted : process(clk) -- inverted to suppress phantom character
begin
if clk'event and clk = '1' then
if baudover_tick = '1' then
rxd_sync_inv <= rxd_sync_inv(0) & not rxd;
end if;
end if;
end process rxd_sync_inverted;
--
rxd_counter_inverted : process(clk)
begin
if clk'event and clk = '1' then
if baudover_tick = '1' then
if rxd_sync_inv(1) = '1' and rxd_cnt_inv /= "11" then
rxd_cnt_inv <= unsigned(rxd_cnt_inv) + 1;
elsif rxd_sync_inv(1) = '0' and rxd_cnt_inv /= "00" then
rxd_cnt_inv <= unsigned(rxd_cnt_inv) - 1;
end if;
if rxd_cnt_inv = "00" then
rxd_bit_inv <= '0';
elsif rxd_cnt_inv = "11" then
rxd_bit_inv <= '1';
end if;
end if;
end if;
end process rxd_counter_inverted;
--
state_proc : process(clk)
begin
if clk'event and clk = '1' then
if baudover_tick = '1' then
case state is
when idle =>
if rxd_bit_inv = '1' then
state <= bit0;
end if;
when bit0 =>
if next_bit = '1' then
state <= bit1;
end if;
when bit1 =>
if next_bit = '1' then
state <= bit2;
end if;
when bit2 =>
if next_bit = '1' then
state <= bit3;
end if;
when bit3 =>
if next_bit = '1' then
state <= bit4;
end if;
when bit4 =>
if next_bit = '1' then
state <= bit5;
end if;
when bit5 =>
if next_bit = '1' then
state <= bit6;
end if;
when bit6 =>
if next_bit = '1' then
state <= bit7;
end if;
when bit7 =>
if next_bit = '1' then
state <= stop;
end if;
when stop =>
if next_bit = '1' then
state <= idle;
end if;
end case;
end if;
end if;
end process state_proc;
--
bit_spacing_proc : process(clk)
begin
if clk'event and clk = '1' then
if state = idle then
bit_spacing <= 0;
elsif baudover_tick = '1' then
if bit_spacing < 15 then
bit_spacing <= bit_spacing + 1;
else
bit_spacing <= 8;
end if;
end if;
end if;
end process bit_spacing_proc;
--
shift_data_proc : process(clk)
begin
if clk'event and clk = '1' then
if baudover_tick = '1' and next_bit = '1' and
state /= idle and state /= stop then
data <= not rxd_bit_inv & data(7 downto 1);
end if;
end if;
end process shift_data_proc;
--
output_data_proc : process(clk)
begin
if clk'event and clk = '1' then
if baudover_tick = '1' and next_bit = '1' and
state = stop and rxd_bit_inv = '0' then
rxd_data <= data;
rxd_data_ready <= '1';
else
rxd_data_ready <= '0';
end if;
end if;
end process output_data_proc;
end UARTReceiverArch;Technical Institutes
Mobile: 0983278725
Email:
Comment
-
chao cac ban! minh dang lam do an thu phat du lieu tu may tinh qua kit Spartan 3E voi phuong thuc truyen dung song RF, hien tai minh khong biet cach nhan du lieu tren kit nhu the nao, ban nao co phuong an giup do minh voi chan thanh cam on va xin hau ta
Comment
Bài viết mới nhất
Collapse
-
bởi yname11 E có 1 laptop bị hỏng màn hình, e tháo ra thì thấy nó có 4 lớp , lớp ngoài cùng là 1 lớp nhựa rất mỏng màu hơi đen ( chắc là 1 loại film dán), tiếp theo là 1 lớp thủy tinh bị vỡ (màu đen) , đến 1 lớp thủy tinh trắng ( lớp này có...
-
Channel: Thiết bị điện tử cá nhân
hôm nay, 19:12 -
-
Trả lời cho Mua anten ở đâu?bởi tmcodonAnten bạn thu nguồn sóng nào vậy? Nếu xem truyền hình thì giờ k làm đc anten nữa rồi
-
Channel: Ăng ten và truyền sóng
16-11-2024, 15:34 -
-
Trả lời cho Mạch nguồn đôi dùng 7812 và 7912bởi tmcodonThank bác nhá. Tìm mãi mới thấy. Giờ vọc đã xem sao...
-
Channel: Hỗ trợ học tập
16-11-2024, 10:39 -
-
bởi tungdqEm cần tìm sơ đồ mạch một số Main máy tính đời cao như Asrock B560M-HDV, các cao nhân chỉ giúp với. Thank!
-
Channel: Các mạch điện ứng dụng
15-11-2024, 08:27 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment