基于正点原子开拓者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: 按照串口的通信协议,首先要做的star