DSP实验手册 实验三 异步串口实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三异步串口实验
一. 实验目的:
1.熟悉CCS的开发环境;
2.熟悉SEED-DEC5416的硬件设计;
3.掌握SEED-DEC5416的串口电路的设计
4.熟悉TL16C752B的通讯原理;
5.熟悉DSP对I/O空间的访问;
6.熟悉DSP的C语言与汇编数据的共享;
二. 实验内容:
1. DSP的初始化;
2. UART的初始化;
3. UART的容错处理;
4. UART的发送与接收程序;
5. UART的中断的处理。
三. 实验背景知识:
TL16C752BPT,它采用3.3V电源供电,因而减少总线驱动。
具有双通道UART,并可兼容Modem接口。
与外部接口可以在RS485/RS422与RS232之间转换。
在RS232接口时,采用4线方式(RXD,TXD,RTS,CTS)。
DSP与URAT采用中断方式进行通讯和数据的传送。
1. UART与DSP的接口
UART是一个并口型的外设,故UART占用DSP的I/O空间资源,A与B通路共同占用DSP外部中断1;时钟采用24MHz的外频输入,其最高的波特率可到1.5Mbps。
TL16C752BPT包含了两路相互独立的通路,每个通路的地址映射如下:A路:0x0010~0x0017
B路:0x0018~0x001F。
UART的寄存器设置如下表:
A2 A1 A0 读方式写方式
0 0 0 接收保持寄存器(RHR)发送保持寄器(THR)
0 0 1 中断使能寄存器(IER)中断使能寄存器(IER)
0 1 0 中断标志寄存器(IIR) FIFO控制寄存器(FCR)
0 1 1 线路控制寄存器(LCR)线路控制寄存器(LCR)
1 0 0 MODEM控制寄存器(MCR)MODEM控制寄存(MCR)
1 0 1 线路状态寄存器(LSR)
1 1 0 MODEM状态寄存器(MSR)
1 1 1 暂存寄存器(SRP)暂存寄存器(SRP)
0 0 0 低位除数寄存器(DLL)低位除数寄存器(DLL)
0 0 1 高侠除数寄存器(DLH)高侠除数寄存器(DLH)
0 1 0 增强功能寄存器(EFR)增强功能寄存器(EFR)
1 0 0 Xon-1 word Xon-1 word
1 0 1 Xon-
2 word Xon-2 word
1 1 0 Xoff-1 word Xoff-1 word
1 1 1 Xoff-
2 word Xoff-2 word
1 1 0 发送控制寄存器(TCR ) 发送控制寄存器(TCR ) 1 1 1 触发等级寄存器(TLR ) 触发等级寄存器(TLR )
黑斜体的部分为二次寻址的寄存器。
波特率的设置:
TL16C752B UART 包含一个可编程的波特率寄存器,它可以在输入时钟的基础上进行
分频(最大分频数为216-1)
,其计算公式如下: 分频数 = 当前时钟输入(24MHz )/(比例系数 x 16 x 期望的波特率) 其中比例系数为: 当复位后,寄存器MCR 的第7位设为0时,比例系数为1(默认值) 当复位后,寄存器MCR 的第7位设为1时,比例系数为4
当时钟为24MHz 时,常用波特率的设置如下:
波 特 率
高位除数寄存器DLM
低位除数寄存器DLL
1200 04H E2H 2400 02H 71H 4800 01H 38H 9600 00H 9CH 19200 00H
4EH 38400 00H 27H
DSP 与URAT 的接口逻辑设计如下图所示:
图一. DSP 与URAT 接口
2. UART 与外部接口的连接:
URAT 与外部连接的电平转换与输出方式的选择采用MAX3160来实现RS485/RS422与RS232三种接口的转换。
连接器选用MiniDin ,其体积小,减少PCB 的面积。
RS-232/RS-422/RS-485多协议收发器MAX3160CAP ,RS-232、RS-422和RS-485之间可编程选择,MAX3160CAP 上的引脚RS485/RS232#用于选择工作在RS-422/RS-485还是RS-232。
引脚HDPLX 则用于控制是RS-422还是RS-485,引脚FAST 用于控制信号转换率。
设计中可以将TL16C753BPT 上的OPA 和OPB 分别控制2路HDPLX ,而RS485/RS232#和FAST 则手动来选择。
MAX3160CAP与DSP和TL16C752BPT的连接如下:
图二. URAT与外部接口的连接
注:在使用RS485方式时,一定注意,串行通讯是半双工的,发送与接收共用一对绞线,发送时,亦同时在已方可接收到,所以发送时一定禁止接收操作。
3.关于通讯协议的说明:
在SEED-DTK5416系统中,异步串口通讯采用定帧长的数据节构进行通讯;一个完整的通信帧由如下几个帧元素组成:
帧数据长度;
帧类别;
帧继续标志;
帧数据;
帧校验;
其位置如下表所示:
帧数据长度帧类别帧继续标志帧数据… 帧校验
其数据结构与常量定义如下:
256
//帧长度
FRAMELENGTH
#define
typedef struct _UartForDec5416{
int
Length;
unsigned
Type;
int
unsigned
Mutul;
unsigned
int
int
Data[FRAMELENGTH];
unsigned
Check;
unsigned
int
}UartForDec5416, *PuartForDec5416;
在SEED-DEC5416与SEED-MMI5402的通讯中,每一次的通讯均按此数据结构进其详细说明如下:
Length为一帧中有效数据的长度。
Type为是何种类型的帧。
在本系统中,有两种类类型的帧其定义如下:
#define UARTDATA 0x0 //数据帧
#define UARTCOMMAND 0x2 //命令帧
Mutul为是否是前一帧的依次帧的标志。
此标志为0,说明此帧为独立帧或是结尾帧。
Data[FRAMELENGTH]为帧的有效数据;
Check为帧较验。
较验方式采用累加和的运算方法。
四. 实验程序功能与结构说明:
在异步串口实验中主要有以下文件:
1. uartt.c:这是实验的主程序,包含了系统的初始化,主要是异步串口的初始化、以及系统时钟的设置;完成与SEED-MMI5402系统的异步通讯。
2. dec5416.c:对SEED-DEC5416各项资源的操作的函数集,主要包含了对UART 的操作的各个函数,对CODEC的各个控制函数。
以及对系统各项的初始化函数。
3. boot.asm:C环境的引导程序;
4. memory.asm:包含了对FLASH的各项操作、程序空间MEMORY的读写。
5. sysreg.asm:包含了对DSP的各项控制,像中断的设置、系统时钟设置、及各项寄存器的操作。
6. uart.asm:对异步串口的寄存器的读与写。
7. vector.asm:包含了VC5416的中断向量表。
8. dec5416.cmd:声明了系统的存贮器配置与程序各段的连接关系。
9. vc54x.inc: 声明了VC54x系列DSP的片内寄存器的地址与设置的常量定义。
10.d ec5416.inc:定义了SEED-DEC5416模板上资源的地址与设置的常量定义。
11.*.h:各子函数的头文件。
异步串口实验主要完成的功能:
在这个实验中主要是在SEED-DEC5416与两个单元之间的异步口通讯。
总共有两种方式的通讯方法:
1.单个数据的发送与接收,在这种方试下,当用户按下键盘的0~9后,SEED-MMI5402会将其通过异步串口发送到SEED-DEC5416;然后由
SEED-DEC5416再发回到SEED-MMI5402进行LCD显示所按下的键值;完成
一次异步串口的通讯。
2.由用户通过LCD显示的字符串中选择一段字符串,由SEED-MMI5402发送到SEED-DEC5416;然后由SEED-DEC5416再发回到SEED-MMI5402进行LCD
显示。
在实验中还完成了对系统复位命令的响应以及通讯故障的处理。
五. 实验程序流程图:
以下是异步串口实验的程序框图。
六. 实验要求:
通过本实验,熟悉对TL16C572B的各个寄存器的功用与设置方法,掌握DSP对IO空间的访问。
熟悉异步串行通讯的编程方法。
加深中断服务程序的编写方法;实现两个DSP 异步通讯。
七. 实验步骤:
1.实验的演示:
在脱机(不接CCS)的情况下,可以首先进行实验的演示。
在SEED-DTK5416的实验选项的菜单下,选择异步串口实验一项。
等待装载程序后,可按菜单操作,完成异步实验的演示。
2.实验的调试:
1) 将DSP仿真器与计算机连接好;
2) 将DSP仿真器的JTAG插头与SEED-DEC54xx单元的J8相连接;
3) 启动计算机,当计算机启动后,打开SEED-DTK5416的电源。
观察DTK-IO
单元的+5V、+3.3V、+15V、-15V的电源指示灯是否均亮;若有不亮的,
请断开电源,检查电源。
4) 等待LCD显示器上出现“异步串口实验程序引导完成。
”之后,打开CCS,
进入CCS的操作环境。
装入DTK-UART.wks调试环境,进行调试。
注意观察接收缓冲区(在数据空间的首址为0x190数据区)的变化。
测试中断的运行情况。
测试时,一定要在接收完一帧后代码部分进行断点的设置。
否则会出现断帧的情况,从而导致校验出错。