资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
现代电路与系统实验报告实验四 UART串口通信学院:研究生院 学号: 姓名:张秋明一、 实验目的及要求设计一个UART串口通信协议,实现“串并”转换功能的电路,也就是“通用异步收发器”。二、 实验原理UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。三、 实现程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity uart is port(clk : in std_logic; -系统时钟 rst_n: in std_logic; -复位信号 rs232_rx: in std_logic; -RS232接收数据信号; rs232_tx: out std_logic -RS232发送数据信号;);end uart;architecture behav of uart iscomponent uart_rx port(clk : in std_logic; -系统时钟 rst_n: in std_logic; -复位信号 rs232_rx: in std_logic; -RS232接收数据信号 clk_bps: in std_logic; -此时clk_bps的高电平为接收数据的采样点 bps_start:out std_logic; -接收到数据后,波特率时钟启动置位 rx_data: out std_logic_vector(7 downto 0); -接收数据寄存器,保存直至下一个数据来到 rx_int: out std_logic -接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);end component;component speed_select port(clk : in std_logic; -系统时钟rst_n: in std_logic; -复位信号clk_bps: out std_logic; -此时clk_bps的高电平为接收或者发送数据位的中间采样点bps_start:in std_logic -接收数据后,波特率时钟启动信号置位);end component;component uart_tx port(clk : in std_logic; -系统时钟 rst_n: in std_logic; -复位信号 rs232_tx: out std_logic; -RS232接收数据信号 clk_bps: in std_logic; -此时clk_bps的高电平为接收数据的采样点 bps_start:out std_logic; -接收到数据后,波特率时钟启动置位 rx_data: in std_logic_vector(7 downto 0); -接收数据寄存器,保存直至下一个数据来到 rx_int: in std_logic -接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);end component;signal bps_start_1:std_logic;signal bps_start_2:std_logic;signal clk_bps_1:std_logic;signal clk_bps_2:std_logic;signal rx_data:std_logic_vector(7 downto 0);signal rx_int:std_logic;beginRX_TOP: uart_rxport map(clk=clk,rst_n=rst_n,rs232_rx=rs232_rx,clk_bps=clk_bps_1,bps_start=bps_start_1,rx_data=rx_data,rx_int=rx_int); SPEED_TOP_RX: speed_select port map(clk=clk, rst_n=rst_n, clk_bps=clk_bps_1, bps_start=bps_start_1 ); TX_TOP:uart_tx port map(clk=clk, -系统时钟rst_n=rst_n, -复位信号rs232_tx=rs232_tx, -RS232发送数据信号clk_bps=clk_bps_2, -此时clk_bps的高电平为发送数据的采样点bps_start=bps_start_2, -接收到数据后,波特率时钟启动置位rx_data=rx_data, -接收数据寄存器,保存直至下一个数据来到rx_int=rx_int -接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); SPEED_TOP_TX: speed_select port map(clk=clk, rst_n=rst_n, clk_bps=clk_bps_2, bps_start=bps_start_2 ); end behav;-3个子模块-异步接收模块- library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity uart_rx is port(clk : in std_logic; -系统时钟 rst_n: in std_logic; -复位信号 rs232_rx: in std_logic; -RS232接收数据信号 clk_bps: in std_logic; -此时clk_bps的高电平为接收数据的采样点 bps_start:out std_logic; -接收到数据后,波特率时钟启动置位 rx_data: out std_logic_vector(7 downto 0); -接收数据寄存器,保存直至下一个数据来到 rx_int: out std_logic -接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);end uart_rx;architecture behav of uart_rx is signal rs232_rx0: std_logic; signal rs232_rx1: std_logic; signal rs232_rx2: std_logic; signal rs232_r
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号