1、最新最新 DSP 与与 PC 机串口通信设计报告机串口通信设计报告 1 序 言:本次设计题目主要是进一步掌握同步串口 McBSP 的结构及工作原理,学习 DSP实现 RS232 串口通讯的程序设计,学习 MAX3111 与 DSP 的接口设计。近年来,DSP 在电子、通信和控制领域得到了非常广泛的应用,在 DSP 应用系统设计中与上位机和下位机的通信必不可少。串口通信作为重要的通信方式之一,优点就是接口需要的引脚少,结构简单易于实现。本文介绍了 TMS320C5416 多通道缓冲口,并通过具体的实例介绍说明利用串口进行 DSP 通信的具体实现。2 McBSP 的接口信号及工作过程 McBSP
2、由一个数据通道和一个控制通道组成,如图 1所示。不同的接受和发送引脚实现和外部器件之间的通信。McBSP 的接收操作采用三级缓冲方式,发送操作采用两级缓冲方式。数据发送引脚(DX)负责数据的发送,数据接受引脚负责数据的接受,另外五个引脚(CLKS,CLKX,CLKR,FSX 和 FSR)提供了控制信号(时钟和帧同步)接口。C5416CPU通过片内的外设总线访问串口的 32位控制寄存器,从而实现与 McBSP 间的通信与控制。接受的数据到达 DR 引脚后移位到 RSR,一旦整个数据单元接受完毕,如果 RBR寄存器未满,则 RSR被复制到 RBR 中。如果 DRR 中的数据已经被 CPU/DMA
3、控制器读取,则 RSR 被将被复制到 DRR 中。发送数据首先由 CPU 或 DMA控制器写入 DXR 中。如果 XSR 寄存器为空,则DXR 中的值被复制到 XSR 并准备移位输出,否则,DXR 会等待 XSR 中旧数据的最后一位被移位输出到 DX 引脚后,才将数据复制到 XSR 中。3 McBSP 与 SPI设备的接口 SPI(Series Protocol Interface)是一个利用 4根信号线的串行接口协议,包括主从两种模式。4个接口信号分别是:串行数据输入(MISO,设备输入,从设备输出)、串行数据输出(MOSI,主设备输出,从设备输出),移位时钟(SCK)、低电平有效的从设备使
4、能信号(SS)。SPI的最大特点是由主设备时钟信号的出现与否来确定主从设备间的通信。一旦检测到主设备时钟信号,数据开始传送,时钟信号无效后,传输结束。在这期间,要求从设备必须被使能(SS 信号保持有效 )。3.1 McBSP 为 SPI主设备的接口 当 McBSP 为 SPI的主设备时,由 McBSP 内部的采样发生器产生时钟 CLKX和从设备使能信号 FSX。3.2 McBSP 为从设备接口 当 McBSP 作为 SPI从设备时,由外部的主设备产生所需要的主控时钟信号和从设备使能信号。4.McBSP 为主设备时的串口通信电路设计 4.1 MAX3111功能特点 MAX3111是 MAX310
5、0 的改进类型,它包括一个振荡器和一个可编程波特率发生器;具有一个可屏蔽的中断源;另具有一个 8字节的接收 FIFO(先入先出)缓冲器。其应用 SPI/MICROWIRE 接口技术直接与控制器之间进行通信,通信速率可达230kbps,还包括两个 RS-232 电平转换器,这样无需再接入电平转换器,而使应用一个芯片即可实现具有 SPI/MI-CROWIRE 接口的微控器与 PC 或是其他设备进行异步数据传输。4.2 TMS320C5416 与 MAX3111硬件接口设计 TMS320C5416 DSP 的 McBSP 串行接口工作于 SPI模式时可直接与 MAX3111进行连接(MAX3111为
6、 3.3V 器件的特性方便了于 C5400 系列 DSP 芯片进行接口),从而实现与 RS-232设备进行异步数据传输,此时 TMS320C5416 作为 SPI协议的主设备,其接口电路如图 3所示。DSP 的发送时钟信号(CLKX)作为 MAX3111 的串行时钟输入,发送帧同步脉冲信号(FSX)作为 MAX3111 的片选信号(CS)。DX与 DIN连接作为发送数据线,DR 与DOUT连接为接收数据线。MAX3111的 DX 与 DIN连接,DX与 DOUT 连接,从而利用其片内的转换器实现 UART到 RS-232电平的转换。由于 SPI模式下的 MCBSP 并不能产生接受中断,因此 M
7、AX3111的中断信号(IRQ)与 DSP 的外部中断相连。5 软件流程图(附程序)6 软件硬件联调 把程序烧录到 DSP 芯片内,然后运行机房电脑里的串口调试工具,设置好端口和参数。运行程序结果:(1)按下键 2,PC 机向 DSP 处理器发送数据(2)按下键 1,DSP 处理器向 PC 机发送数据,连续递增加 1显示 经分析:实验结果与我们理论设计结果相同,本实验圆满完成。7 总结与展望 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.回顾起此次 DSP 原理及应用的课程设计,至今我仍感慨颇多,从理论到实
8、践,在整个实验的过程中,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟是第一次综合应用 DSP 技术来做设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固通过这次毕业设计之后,可以把以前所学过的知
9、识重新温故。这次毕业设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的辛勤指导下,同学的帮助下终于迎刃而解。在此我表示感谢!8 参考文献 1 DSP 原理及应用 M,邹彦:电子工业出版社.2 张雄伟,曹铁男.DSP 芯片的原理与开发应用(第 2版)M.北京:电子工业出版社,2000.3 张毅刚,赵光权,孙宁,等.TMS320L F2812 DSP 原理,开发与应用M.哈尔滨:哈尔滨工业大学出版社,2006.4 郑红,吴冠.TMS320F2812 DSP 应用系统的设计M.北京:北京航天航空大学出版社,2002.5 刘和平等,TMS320LF240 xDSP C 语言开发应用北京航空航天大
10、学出版社,2003年 1 月.6 尹勇等,DSP 集成开发环境 CCS 开发指南,北京航空航天大学出版社,2002年 5 月.7 高锋.单片微型计算机原理与接口技术.科学出版社,2007.04.8 李法春 单片机原理及接口技术案例教程&nbs.9 陈伟,陈建,汪书宁等译,DSP 算法、应用与设计,机械工业出版社、中信出版社,2003年 7 月.9 附程序:#include#pragma CODE_SECTION(vect,vect)unsigned int*pmem=0;#define IMR *(pmem+0 x0000)#define IFR *(pmem+0 x0001)#define
11、PMST*(pmem+0 x001d)#define SWCR*(pmem+0 x002b)#define SWWSR*(pmem+0 x0028)#define CLKMD*(pmem+0 x0058)#define PRD0*(pmem+0 x0025)/timer0 period register#define TCR0*(pmem+0 x0026)/timer0 control register/*mcbsp1*/#define SPSA1*(pmem+0 x0048)/子地址寄存器#define SPSD1*(pmem+0 x0049)/#define DRR11*(pmem+0 x
12、0041)/接收数据寄存器 1#define DRR21*(pmem+0 x0040)/接收数据寄存器 2#define DXR11*(pmem+0 x0043)/发送数据寄存器 1#define DXR21*(pmem+0 x0042)/发送数据寄存器 2/*mcbsp1 subadress*/#define SPCR11 0 x0000/串行口控制寄存器 1#define SPCR21 0 x0001/串行口控制寄存器 2#define RCR11 0 x0002/接收控制寄存器 1#define RCR21 0 x0003/接收控制寄存器 2#define XCR11 0 x0004/发
13、送控制寄存器 1#define XCR21 0 x0005/发送控制寄存器 2#define SRGR1 0 x0006/采样率发生寄存器 1#define SRGR2 0 x0007/采样率发生寄存器 1#define PCR1 0 x000e/引脚控制寄存器 ioport unsigned portc000;/数码管地址 ioport unsigned portc001;/键盘地址 ioport unsigned portc002;/发光二极管地址 int num=0;int n=0;static int Tmcounter;static const char table10=123456
14、7890;static int weima8=0 x0100/*1*/,0 x0200/*2*/,0 x0400/*3*/,0 x0800/*4*/,0 x1000/*5*/,0 x2000/*6*/,0 x4000/*7*/,0 x8000/*8*/;static int duanma16=0 x003f/*0*/,0 x0006/*1*/,0 x005b/*2*/,0 x004f/*3*/,0 x0066/*4*/,0 x006d/*5*/,0 x007d/*6*/,0 x0007/*7*/,0 x007f/*8*/,0 x006f/*9*/,0 x0077/*a*/,0 x007c/*b
15、*/,0 x0039/*c*/,0 x005e/*d*/,0 x0079/*e*/,0 x0071/*f*/;void delay()/WAIT asm(STM#0008h,AR0);asm(RPT*AR0);asm(NOP);void delay10ms()int i,j,k;for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+);void delay100ms()int i,j,k;for(i=0;i14;i+)for(j=0;j12;j+)for(k=0;k 15)value=15;portc000=weiman|duanmavalue;n+;if(n 7)
16、n=0;interrupt void tint0()int rxdata,txdata,value;if(Tmcounter=250)Tmcounter=0;DXR11=0 x00;rxdata=DRR11;if(rxdata&0 x8000)/若读到的数据?,则表示?,已准备好接收数据 value=tablenum;txdata=value&0 x00ff;DXR11=0 x8000|txdata;num+;if(num=10)num=0 x0;DXR11=0 xc40b;/写控制字,且 TM 为 0,表示禁止 MAX3111 发送缓冲器的空中断 Tmcounter+;interrupt v
17、oid KeyDown()int a;a=portc001;a=a&0 xff00;if(a!=0 xff00)delay10ms();a=portc001;a=a&0 xff00;if(a=0 xfe00)/当按键 1按下时,开始定时,关 mcbsp1接收中断 IMR=0 x080c;TCR0=0 x0a69;else if(a=0 xfd00)/按键 2 按下时,停止定时,开 mcbsp1接收中断 TCR0=0 x0a59;IMR=0 x0c0c;else ;void vect()asm(.ref _c_int00);asm(.ref _rs232);asm(.ref _tint0);as
18、m(b _c_int00);/*reset*/asm(nop);asm(nop);asm(nop);asm(rete);/nmi asm(nop);asm(nop);asm(nop);asm(rete);/asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm
19、(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop);asm(nop);asm(rete);asm(nop);asm(nop
20、);asm(nop);asm(rete);/*int0*/asm(nop);asm(nop);asm(nop);asm(rete);/*int1*/asm(nop);asm(nop);asm(nop);asm(b _KeyDown);/*int2*/asm(nop);asm(nop);asm(b _tint0);asm(nop);/*tint0*/asm(nop);asm(nop);asm(rete);/*brint0*/asm(nop);asm(nop);asm(nop);asm(rete);/*bxint0*/asm(nop);asm(nop);asm(nop);asm(rete);/*d
21、mac2*/asm(nop);asm(nop);asm(nop);asm(rete);/*tint1*/asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);/*int3*/asm(nop);asm(nop);asm(rete);/*hpint*/asm(nop);asm(nop);asm(nop);asm(b _rs232);/*brint1*/asm(nop);asm(nop);asm(nop);asm(rete);/*bxint1*/asm(nop);asm(nop);asm(nop);asm(rete);/*dmac4*/asm(nop);asm(nop);asm(nop);asm(rete);/*dmac5*/asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(.space 29*4*16);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1