找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3197|回复: 3
打印 上一主题 下一主题
收起左侧

基于FPGA的uart程序设计

[复制链接]
跳转到指定楼层
楼主


  1. module uart_rx(
  2.      clk,
  3.      rst_n,
  4.      bps_start,
  5.      clk_bps,
  6.      rs232_rx,
  7.      rx_data,
  8.      rx_int,
  9.      led
  10.      );
  11. input clk;   //时钟
  12. input rst_n;  //复位
  13. input rs232_rx; //接收数据信号
  14. input clk_bps;  //高电平时为接收信号中间采样点
  15. output bps_start; //接收信号时,波特率时钟信号置位
  16. output [7:0] rx_data;//接收数据寄存器
  17. output rx_int;  //接收数据中断信号,接收过程中为高
  18. output [7:0] led;
  19. reg [7:0] led;
  20. reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;//接收数据寄存器
  21. wire neg_rs232_rx;//表示数据线接收到下沿

  22. always @(posedge clk or negedge rst_n) begin
  23.   if(!rst_n) begin
  24.    rs232_rx0 <= 1'b0;
  25.    rs232_rx1 <= 1'b0;
  26.    rs232_rx2 <= 1'b0;
  27.    rs232_rx3 <= 1'b0;
  28.   end
  29.   
  30.   else begin
  31.    rs232_rx0 <= rs232_rx;
  32.    rs232_rx1 <= rs232_rx0;
  33.    rs232_rx2 <= rs232_rx1;
  34.    rs232_rx3 <= rs232_rx2;
  35.   end
  36. end
  37. assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0;//串口传输线的下沿标志
  38. reg bps_start_r;
  39. reg [3:0] num;//移位次数
  40. reg rx_int;  //接收中断信号

  41. always @(posedge clk or negedge rst_n)
  42.   if(!rst_n) begin
  43.    bps_start_r <=1'bz;
  44.    rx_int <= 1'b0;
  45.   end
  46.   else if(neg_rs232_rx) begin//
  47.   bps_start_r <= 1'b1;  //启动串口,准备接收数据
  48.    rx_int <= 1'b1;   //接收数据中断使能
  49.   end
  50.   else if(num==4'd12) begin //接收完有用的信号,
  51.    bps_start_r <=1'b0;  //接收完毕,改变波特率置位,方便下次接收
  52.    rx_int <= 1'b0;   //接收信号关闭
  53.   end
  54.   
  55.   assign bps_start = bps_start_r;
  56.   
  57.   reg [7:0] rx_data_r;//串口数据寄存器
  58.   reg [7:0] rx_temp_data;//当前数据寄存器
  59.   
  60.   always @(posedge clk or negedge rst_n)
  61.    if(!rst_n) begin
  62.      rx_temp_data <= 8'd0;
  63.      num <= 4'd0;
  64.      rx_data_r <= 8'd0;
  65.    end
  66.    else if(rx_int) begin //接收数据处理
  67.     if(clk_bps) begin
  68.      num <= num+1'b1;
  69.      case(num)
  70.        4'd1: rx_temp_data[0] <= rs232_rx;
  71.        4'd2: rx_temp_data[1] <= rs232_rx;
  72.        4'd3: rx_temp_data[2] <= rs232_rx;
  73.        4'd4: rx_temp_data[3] <= rs232_rx;
  74.        4'd5: rx_temp_data[4] <= rs232_rx;
  75.        4'd6: rx_temp_data[5] <= rs232_rx;
  76.        4'd7: rx_temp_data[6] <= rs232_rx;
  77. ……………………

  78. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址:
uart.7z (1.28 MB, 下载次数: 42)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:416262 发表于 2020-6-16 14:47 | 只看该作者
马克,正需要
回复

使用道具 举报

板凳
ID:810016 发表于 2020-12-19 19:19 | 只看该作者
这个能两个FPGA板子间进行通信吗
回复

使用道具 举报

地板
ID:579775 发表于 2020-12-21 18:26 | 只看该作者
总结的很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表