串口硬件设计文档.docx
《串口硬件设计文档.docx》由会员分享,可在线阅读,更多相关《串口硬件设计文档.docx(16页珍藏版)》请在冰豆网上搜索。
![串口硬件设计文档.docx](https://file1.bdocx.com/fileroot1/2023-1/9/085890ec-7311-4294-8fa5-f16891181d7d/085890ec-7311-4294-8fa5-f16891181d7d1.gif)
串口硬件设计文档
空调温控器设计方案
版本信息
序号
版本号
修改信息说明
修改人
时间
V1.0
设计方案初稿
1概述
1.1硬件结构连接
该方案实现nios核中半双工串行收发器接口和外接单片机之间的通信,通信线路之间采用MAX3483,传输协议遵照UART半双工串行收发通信方式。
接口位置如图1中半双工串行收发器接口。
图1硬件结构连接
1.2半双工串行通信数据格式
1.2.1一次收发数据传输格式
1.2.2连续收发的数据传输格式
1.3MAX3483CSA介绍
MAX3483CSA采用半双工通信方式,RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD端和TXD相连,/RE和DE端分别为接受和发送的使能端,/RE为逻辑0时,器件处于接收状态,当DE为逻辑1时,器件处于发送状态。
1.4软件访问接口函数流程图
图2发送接收数据过程
2.半双工串行收发器接口
2.1接口设计框图
图3半双工串行收发器结构图
2.2接口描述
收发器接口总结构如图4所示,在默认和复位情况下收发器处于发送状态。
在发送状态,查询到控制寄存器的值为0,并且tr_space为高时,则将DE和/RE清0,此时收发器从发送状态切换到接收状态。
在接收状态,查询到控制寄存器的值为1,并且r_space为高时,则将DE和/RE置1,收发器从接收状态切换到发送状态。
发送状态时,在发送空闲(tr_space为高)期间检测到发送数据缓冲寄存器有数据(tr_buf_empty_ind为低),首先将缓冲器的数据搬到移位寄存器,并且给高位加1,低位加0,同时将tr_buf_empty_ind信号置高,接着启动发送波特率计数器,同时将tr_space信号清0,然后每隔16个uart_clk时钟周期发送1位数据,发送完最后1位数据后,再次将tr_space置高,表示发送空闲。
接收状态时,首先检测下降沿,当检测到下降沿后,将re_space信号清0,同时启动接收数据波特率计数器,当计数器加到8时,采样RO的值,为低,表示此时是一个起始信号,然后每隔16个uart_clk时钟周期接收1位数据,当接收到第9位数据,也就是停止位时,判断停止位是否正确,若正确则将数据写到接收缓冲寄存器,同时将re_space信号置高,若停止位不正确则给出一个帧出错指示信号,并放弃数据输出。
当把数据从移位寄存器写到接收缓冲寄存器时,将re_buf_full_ind置高,当cpu把数据从接收缓冲寄存器读走,将re_buf_full_ind信号清0。
fpga_clk为cpu工作时钟,频率为66.66MHZ,uart_clk为串行收发器接口的采样时钟,频率为串口数据传送波特率的16倍,数据传送的波特率为9600bps。
2.3接口定义
序号
引脚名称
I/O
功能描述
备注
1.
rst_n
I
复位信号,低有效
2.
fpga_clk
I
cpu工作时钟,频率为66.66MHZ
3.
nios_cs
I
cpu发送的片选信号,低有效
4.
nios_wr
I
cpu发送的写使能,低有效
5.
nios_rd
I
cpu发送的读使能,低有效
6.
nios_adder[1:
0]
I
cpu访问接口内部寄存器的地址
7.
nios_data_in[7:
0]
I
cpu向外接单片机中发送的数据
8.
nios_data_out[7:
0]
O
Cpu从外接单片机中接收的数据
9.
RO
I
串行数据接收引脚
10.
/RE
O
接收使能,低有效
11.
DI
O
串行数据发送引脚
12.
DE
O
发送使能,高有效
13.
TI
O
发送完成信号,高有效
14
RI
O
接收完成信号,高有效
15
fram_error
O
帧出错信号,高有效
3.控制模块
3.1功能描述
该模块主要实现以下功能:
●根据tr_space、re_space和控制寄存器的值改变DE和/RE,实现收发器状态的切换
●生成发送缓冲器写使能,接收缓冲器读使能,状态寄存器读使能信号。
3.2内部寄存器说明
序号
寄存器名称
读/写
地址
寄存器说明
备注
1.
control_reg
读写
00
读写控制寄存器,最低位为读写判
断位,0,表示发送,1表示接收。
其它位保留。
2.
uart_state
只读
01
状态寄存器,8位,低3位状态标
志位,bit0发送数据缓冲寄存器空
满标志位,1为空,0为满。
bit1
接收缓冲寄存器空满标志,1为满,
0为空。
bit2帧错误指示信号,1
表示有错误,0表示正确。
其它位
保留。
3.
tran_buf_reg
只写
10
发送缓冲寄存器,8位,只有缓冲寄存器写使能有效时,cpu才能向该寄存器写数据。
4.
rece_buf_reg
只读
11
接收缓冲寄存器,8位,只有接收缓冲寄存器读使能有效时,cpu才能读该寄存器。
3.3结构框图
图4控制模块总体框图
3.4接口定义
序号
引脚名称
I/O
功能描述
备注
1.
rst_n
I
复位信号,低有效
2.
fpga_clk
I
Cpu工作时钟,频率为66.66mhz,上升沿采样,占空比为50%。
3.
uart_clk
I
分频后产生的采样时钟,频率为波特率的16倍,上升沿采样,占空比为50%
4.
nios_cs
I
cpu发送的片选信号,低有效
5.
nios_wr
I
cpu发送的写使能,低有效
6.
nios_rd
I
cpu发送的读使能,低有效
7.
nios_adder[1:
0]
I
cpu访问接口内部寄存器的地址
8.
nios_data_in[7:
0]
I
cpu向外接单片机中发送的数据
9.
nios_data_out[7:
0]
O
Cpu从外接单片机中接收的数据
10.
/RE
O
接收使能,低有效
11.
DE
O
发送使能,高有效
12.
TI
O
发送完成信号,高有效
13.
RI
O
接收完成信号,高有效
14.
fram_error
O
帧出错信号,高有效
15.
tr_space
I
发送空闲状态指示信号,高有效
16.
trbuf_empty_ind
I
发送缓冲寄存器数据空指示信号,高有效
17.
trdata_reg_set
O
发送缓冲寄存器写使能信号,高有效
18.
rece_buf_reg[7:
0]
I
接收缓冲寄存器数据输出
19.
rebuf_full_ind
I
接收缓冲寄存器数据满指示信号,好有效
20.
stopbit_err_ind
I
帧错误izhishi信号,高有效
21.
re_space
I
接收状态空闲指示信号,高有效
22.
state_reg_sel
O
状态寄存器读使能信号,高有效
23.
redata_reg_sel
O
接收缓冲寄存器读使能信号,高有效
4.接收模块
4.1功能描述
该部分主要完成以下功能:
●完成帧起始信号的检测
●按照uart协议正确接收RO上数据,并且写到接收缓冲寄存器内。
●当接收数据有误时,发送错误指示信号,等待CPU读取后,将错误指示信号清除。
●生成re_space、rebuf_full_ind指示信号
4.2设计框图
4.2.1总体设计框图
图5接收模块总体框图
图6中控制逻辑部分为状态机,具体状态转移如下所讲。
Uart_rece_begin为检测到下降沿的指示信号,re_frame_error和re_valid为状态机的输出信号,用fpga_clk时钟的上升沿分别检测re_frame_error和re_valid信号的下降沿,检测到下降沿的时候让stopbit_err_ind和rebuf_full_ind分别置1,当cpu把状态寄存器的值读走将stopbit_err_ind信号清0.当cpu把接收缓冲寄存器的数据读走,rebuf_full_ind信号清0。
4.2.2接收控制逻辑部分
图6接收部分状态机
re_idle接收空闲状态;start接收帧起始信号状态,rece接收数据状态。
复位时处于接收空闲状态,当检测到下降沿后进入start状态,此时启动接收波特率计数器,当计数器计到8时,检测RO的值,为0,表示帧起始信号,则进入rece接收数据状态。
检测RO的值,为1,进入空闲状态。
接收完数据后跳到空闲状态。
在接收空闲状态re_space信号为高,其余状态信号都为低,即re_space=(re_state==re_idle)。
4.3接口定义
序号
引脚名称
I/O
功能描述
备注
1.
fpga_clk
I
Cpu工作时钟,频率为66.66mhz,上升沿采样,占空比为50%。
2.
uart_clk
I
分频后产生的采样时钟,频率为波特率的16倍,上升沿采样,占空比为50%
3.
RO
I
串行数据接收引脚
4.
/RE
O
接收使能,低有效
5.
rece_buf_reg[7:
0]
I
接收缓冲寄存器数据输出
6.
rebuf_full_ind
I
接收缓冲寄存器数据满指示信号,好有效
7.
stopbit_err_ind
I
帧错误izhishi信号,高有效
8.
re_space
I
接收状态空闲指示信号,高有效
9.
state_reg_sel
O
状态寄存器读使能信号,高有效
10.
redata_reg_sel
O
接收缓冲寄存器读使能信号,高有效
4.4接收时序图
图7正确数据
图8错误数据
5.发送模块
5.1功能描述
该模块实现以下功能
●把数据从发送缓冲寄存器搬到移位寄存器,按照uart协议,正确发送数据
●生成tr_space、trbuf_empty_ind指示信号
5.2设计框图
5.2.1总体设计框图
图7发送部分整体框图
图7中控制逻辑部分为状态机,具体状态转移如下所讲。
状态控制输出tr_space信号,用fpga_clk时钟的上升沿分别检测tr_space信号的下降沿,检测到下降沿的时候让trbuf_empty_ind信号置高,当cpu向缓冲寄存器写入数据,则把trbuf_empty_ind信号清0。
5.2.2发送控制逻辑部分
图8发送过程状态图
tr_idle发送空闲状态;init发送初始化状态,tran发送数据状态。
复位时处于发送空闲状态,在发送状态检测到缓冲寄存器有数据,则进入init状态,完成数据从缓冲寄存器哦移位寄存器的搬移,然后跳转到发送状态,当发送完最后一位数据时,状态机到到发送空闲状态。
在发送状态(tran)tr_space为低,其他状态tr_space都为高,即tr_space=!
(tr_state==tran)。
5.3接口定义
序号
引脚名称
I/O
功能描述
备注
1.
fpga_clk
I
Cpu工作时钟,频率为66.66mhz,上升沿采样,占空比为50%。
2.
uart_clk
I
分频后产生的采样时钟,频率为波特率的16倍,上升沿采样,占空比为50%
3.
DI
O
串行数据发送引脚
4.
DE
O
发送使能,高有效
5.
tr_space
I
发送空闲状态指示信号,高有效
6.
trbuf_empty_ind
I
发送缓冲寄存器数据空指示信号,高有效
7.
trdata_reg_set
O
发送缓冲寄存器写使能信号,高有效
8.
nios_data_in[7:
0]
I
cpu向外接单片机中发送的数据
5.4发送时序图
图9发送过程时序图