FPGA 串口调试 心得

基于正点原子开拓者FPGA ,  进行串口的调试。发现与单片机相比较,单片机的库函数开发, 一条语句解决的事情, FPGA 可能要写一二百行。废话少说,记录一些容易被忽视的点。

串口的代码分为三部分,分别是串口的发送,串口的接收,以及顶层的文件。

1:串口的发送部分

串口的发送部分易错点:1:串口的发送部分的信号使能端使用的电平是高电平。 en_flag ,uart_send_d0, uart_send_d1;

                                        2:串口的发送数据要存储在数据寄存器中,同时判断tx_flag ,tx_flag  的变化依据

if(clk_cnt==BPS_cnt/2&&tx_cnt==4'd9)

3: 关于系统的时钟计数clk_cnt,字节的计数tx_cnt,注意:此处的判断条件是:

if(tx_flag)

if(clk_cnt<BPS_cnt-1)

最后的
else 
     tx_flag<=tx_flag;
     tx_data<=tx_data;

 4:串口数据发送的核心阶段:   初始化条件:rx_flag, 

      uart_send_d1 ,初始化的部分是高电平。case 中的tx_cnt 共包含10个数值,第一个数值是低电平,最后一个数值是高电平。          将tx_data(寄存器的数值传递到)uart_send_d1。

2: 串口的接收

   1: 按照串口的通信协议,首先要做的start_flag 是低电平。

   2: 按照start_flag ,获取rx_flag, 获取的方式

if(rx_cnt==BPS_cnt/2&&rx_cnt==4'd9)

  与串口的发送阶段不同的是:串口接受阶段的标志位rx_flag 形成的同时, 不需要将数据存到寄存器   

3:  对系统计数clk_cnt 和 rx_cnt  进行计数.判断 条件是if( rx_flag)

4: 接收到的数据,应该先存储到寄存器去rxdata, 赋值语句:

rxdata[i]<=uart_recv_d1;

5: 发送反馈信号,uart_done,同时将数据 uart_data<=rxdata;  注意uart_done 最后形成的判决条件是if(rx_flag)     

    

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值