AX7A200教程(7): 基于DDR3的串口发送和接收(64次突发)(二)

本章节主要使用ddr3做为缓存,串口接收的数据通过ddr缓存后通过发送模块发送出去。我们之前的串口发送数据通过ddr缓存是一个突发长度,本篇文章将会传输64个突发长度。整体的功能框图所下图所示

因本博文使用的是上个章节的图片数据,所以数据大小是1024*768*3 = 2359296(byte),也就是2359296个八位,因之前的输入的rx_data_convert模块是八转32位,而我们输入的数据是一个24位的图片数据,所以rx_data_convert模块会将高8位添0凑成一个32位数据

 本章节的图片数据存放到uart_data.txt文件里

将 uart_data.txt里的数据复制到串口调试助手

串口调试助手里的数据如下图所示

 将程序下载到黑金开发板

 注意串口调试助手的波特率设置为115200,发送和接收都设置为Hex

 点击发送后可以看到串口待发送的数据量刚好是2359296byte,也就是1024*768*3的图片数据

 可以看到黑金开发板的uart的rx灯一直在闪烁,说明一直在接收串口发送的数据

 串口接收结束后,可以看到串口发送开始往电脑发送数据

串口发送结束后,可以看到数据量刚好是3145728byte,和我们计算的一样,也就是1024*768*4,为什么是1024*768*4而不是输入的1024*768*3,因为我的输入转换模块将24位的图片数据高位添0一共凑成32位数据,所以是1024*768*4 = 3145728byte

 从上面串口截图数据可以看出高位都是添加0的,如下图所示

 程序说明

 突发长度设置为64

突发写使能设置为62产生一次突发写突发

    //突发写使能
    always@(posedge ui_clk or negedge i_rst_n)begin
            if(!i_rst_n)
                wr_len_en    <=  1'd0;    
            else if(ddr_wr_end)
                wr_len_en    <=  1'd0;    
            else if(rd_len_en)
                wr_len_en    <=  1'd0;    
            else if(wr_len_done)
                wr_len_en    <=  1'd0;                             
            else if(rd_data_count >= 9'd62)
                wr_len_en    <=  1'd1;                        
    end 

突发读使能设置为64产生一次突发读突发

//突发读使能
    always@(posedge ui_clk or negedge i_rst_n)begin
            if(!i_rst_n)
                rd_len_en    <=  1'd0;
            else if(ddr_rd_end)
                rd_len_en    <=  1'd0;            
            else if(wr_len_en)
                rd_len_en    <=  1'd0;     
            else if(rd_len_done)
                rd_len_en    <=  1'd0;                 
            else if(ddr_wr_end && wr_data_count <= 9'd64)
                rd_len_en    <=  1'd1;                     
    end 

 数据地址设置为1024*768-8

  前面我们提到数据量是1024*768*4,为什么是乘以4,因为这里的ddr3数据宽度是32位的,所以乘以4,当然如果ddr的数据宽带是16位的,那么就是乘以2

整体的工程如下,还是挺长的,我这里只对部分重要的设置进行说明,其它的大家可以参考工程自己慢慢看

这个工程测了几次了每次测试总是接收的数据量不对,以为是工程的问题,然后通过ila各种抓数据发现读和写的地址都没有错,最后发现接收和发送的时间比较长,一直将开发板放到哪里自己发送和接收,然后电脑运行一段时间360出现弹窗屏保,居然会让串口中断一下,所以一直导致接收的数据不对,搞了好几天才发现是弹窗导致的,真是无语了,然后将弹窗关闭后,果然接收的数据是对的,希望大家不要碰到我踩过的坑

工程链接:https://pan.baidu.com/s/17pZoHgK_Y_ajleSD320yTA 
提取码:gv3w

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值