概述
基于正点原子开拓者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)
最后
以上就是暴躁人生为你收集整理的FPGA 串口调试 心得的全部内容,希望文章能够帮你解决FPGA 串口调试 心得所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复