DSP与计算机的异步串行通信_第1页
DSP与计算机的异步串行通信_第2页
DSP与计算机的异步串行通信_第3页
DSP与计算机的异步串行通信_第4页
DSP与计算机的异步串行通信_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 课程设计背景随着DSP在中国的普及与发展,越来越多的领域已经应用了DSP技术。为了适应这一新的形式,加速培养高素质的DSP专门人才,国内各高等院校除了加强DSP学科的理论教学之外,都纷纷开设DSP实验课,以提高学生的实际动手能力,加快学生与社会的接轨的时间。TI(德州仪器半导体公司)生产的数字信号处理器,简称DSP(DIGITAL SIGNAL PROCESSOR)TMS320是包括定点、浮点和处理器在内的数字信号处理器(DSPs)系列,其结构尤其适用于作实时信号处理。DSP是运算密集型的微处理器。这使得DSP完成滤波器和FFT算法比一般的事务型处理器快的多。DSP的另一重要特征是采用改进

2、的哈佛结构,具有独立的数据和地址总线,从而使得处理器指令和数据并行,与冯诺伊曼的结构相比,大大提高了处理效率。该系列DSP具有以下特点:灵活的指令系统、灵活的操作性能、高速的性能、改进的哈佛结构、低功耗、很高的性能价格比。TMS320系列中的同一代芯片具有相同的CPU结构,但片内存储器和片内外设的配置是不同的。还有一些派生器件使用了存储器和外设新的组合,以适应不同的需要。该系统以TI的TMS320C5402的DSP为该实验仪的主体芯片。54系列DSP应用改进的哈佛结构,具有三个数据存储总线、一个程序存储总线、两个数据地址产生器和一个程序地址产生器。这种结构使得可以同时存取数,适合多操作数运算,

3、从而完成同样的功能所需的周期少。加之54系列指令集还包含几条专用指令,包括:单条指令重复和指令块重复、条件指令、FIR(有限脉冲响应)和LMS(最小均方)滤波器运算指令等。HPI扩展接口:8 bit,可以与多种处理器相连接。54系列DSP芯片主要用于:数字蜂窝式电话、个人数字助理商务通(PDA)、数字无绳通信、无线数据通信、IP电话等低功耗、多算法的场合,尤其是随着第三代移动通信的到来,无线数据业务的应用,应用54系列DSP这一趋势将会加速。利用54系列的I/O扩展口进行基本的I/O口操作。实验目标系统标准配置:1TMS320VC5402PGE100芯片一片2TL16C550芯片异步串口实验电

4、路3.同步串口实验电路4.64K16位RAM5.A/D、D/A采样芯片 TLC320AD506.I/O口的扩展电路7.语音电路8.CPLD电路9.HPI接口10.直流电机、步进电机电路11.键盘、液晶屏电路12.数码管、发光二极管电路2 课程设计目的通过本次课程设计,综合运用数字信号处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。初步培养学生对工程设计的独立工作能力、电子系统设计的一般方法。通过课程设计树立正确的设计思想,提高学生分析问题、解决问题的能力。进行设计基本技能的训练,如查阅设计资料和手册、程序的设计、调试等。

5、本题目要求实现DSP与计算机的异步串行通信,设计目的在于了解DSP与PC机串行通信的实现软硬件方案,了解DSP的中断系统,掌握DSP的I/O工作方式。1、设计DSP与16C550的接口电路,实现串行数据的发送与接收2、通过编写DSP程序,实现DSP与PC机之间的数据交换。DSP对16C550的访问方式可以采用查询方式或者中断方式。3、要求详细叙述DSP与16C550的接口设计方案以及控制16C550的编程方法。4、按要求编写课程设计报告书,正确、完整的阐述设计3 课程设计原理TMS320C5402DSP已在通信与信息系统、信号与信息处理和自动化控制领域有了广泛的应用。该芯片提供了多通道缓冲串行

6、接口M c B S P(Multichannel Buffered SerialPorts与外部设备进行通信。因为McBSP是同步串行接口,而计算机RS-2 3 2 接口为通用异步接口U A R T(Universal Asynchronous Receiverand Transmitter,要使计算机与C54 进行通信,必须在DSP方面加一个专门的软件实现。3.1 UART工作原理异步串行通信的格式定义异步串行通信时序按图3.1最基本的异步串行通信时序,软件实现UART在不同架构的单片机上有多种方法。数据接收是关键,异步通信没有可参照的时钟信号,发送方随时都可能发送数据,任何时刻串行数据到来

7、时,系统都应该及时准确地接收。比较而言,本机发送串行数据相对容易,只要对发送出去的电平做持续时间的定时即可。实现方法(1三倍速采样法三倍速采样法顾名思义就是以三倍于波特率的频率对接收引脚Rx 进行采样,保证检测到“起始位”,又可以调整采样的时间间隔;将有效数据位的采样点控制在码元的中间1/3处,最大限度地减少误码,提高接收的准确性。我们把图1 的起始位和部分数据位放大,如图2 所示,把每个信息位分成三等份,每等份的时间宽度设为ts,以方便分析。始位和部分数据位放大以三倍频对信息位进行采样时,每个信息位都将可能被采样到三次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0

8、阴影区,虽然每次具体的采样点会在此S0 阴影区随机变化。检测到起始位低电平后,间隔4×ts 时间,正好是第一位数据位的中间1/3 处(图2 中Ds 阴影区)。此后的数据位、校验位和停止位的采样间隔都是3×ts,所有采样点均落在码元的中间1/3 处,采样数据最可靠。Dsp 采用此法实现软件UART 时,硬件上只要任意定义两个I/O 引脚,分别初始化成输入(串行数据接收)和输出(串行数据发送)即可;软件上只要实现定时采样,定时时间间隔在中档以上有中断机制的单片机上可以用不同的定时器(TMR0、TMR1、TMR2 等)通过定时中断实现。对于1200 b/s 波特率,码元宽度为83

9、3s,采样时间间隔即为278s。整个串行接收或发送是一个过程控制问题,用状态机方式实现最为高效简易。图3 给出了串行接收的参考状态机转移过程。(2起始位中断捕捉、定时采样法实现此法的硬件条件是 dsp 有外部脉冲下降沿中断触发功能, RB0/INT 外部中断脚,CCP1/CCP2 脉冲沿捕捉脚,PORTB 的第4/5/6/7 电平变化中断脚等都可以满足。另外需配备一个定时器,以定时中断方式对接收码元正确采样,或发送串行数据流。其关键的异步接收工作原理简介如图4 所示。设串行数据位宽度为td。起始位到来时刻(图4 A 点)的下降沿触发一个中断并立即响应该中断。在此中断服务中立即关闭本中断使能位(

10、后续的数据流变化无需触发中断),开启定时器,使其在 1.5td 后产生定时中断,用于采样第一个数据位(确保S0 采样点落在数据位的中心位置处);在处理下降沿中断服务的最后,再检测接收端是否还是0 电平,以区分窄脉冲干扰。在S0 点采样到第一个数据位后的所有采样间隔都是1td,直到收到停止位后,关闭定时器中断,重新开放下降沿捕捉中断,准备接收下一个字节。异步数据接收和发送的状态机控制流程,除了起始位判断和定时时间参数设置与前述方式不同外,其它几乎一样,此处不再重复。此法的好处是可以实现较高的通信波特率。对于通信不是很频繁的系统,此软件UART 几乎不耗MCU 运行带宽,9600b/s 接收或发送

11、在4 MHz 运行的dsp 上即可轻松实现;另外,由于下降沿中断可以唤醒处于睡眠的dsp,故极易实现通信唤醒的功能。缺点是不能全双工通信(除非另外单独用一个定时器实现发送定时),异步接收的引脚必须有下降沿触发中断的能力。在此次实验中,我们选用的是第一种方法来实现。(3分频系数计算McBSP时钟频率也就是采样频率。TMS320C54x系列DSP的McBSP时钟频率可以由DSP主时钟分频得到。通过对寄存器设置可以设定分频系数。分频系数div可由如下公式得到: 式中厂为DSP的工作时钟B,为异步串口工作波特率。计算后div若非整数则需取整。分频寄存器只有8 b,故最大分频值是256。DSP5402主

12、频为100 MHz,串口波特率设定为9600,则:div=100M (16×96003.2 多通道缓冲串行口McBSP的结构及工作原理C54多通道缓冲串行口(McBSP主要特点如下:双缓冲区发送,三缓冲区接收以便数据的连续性;接收与发送的帧同步、时钟信号独立;多通道发送和接收,最多可以到达128个通道;数据大小可为8,12,16,20,24和32 bit;率和A 率压缩;帧同步、数据时钟极性可编程;内部时钟和帧同步可自行设定。TMS32OC54x系列DSP的每个McBSP接口有6个信号线:BSFX (帧同步脉冲发送、BFSR (帧同步脉冲接收、BCLKX(发送数据时钟、BCLKR(接

13、收数据时钟、BDX (串口数据发送、BDR(串口数据接收。应用时将BFSR和BDR连在一起都和异步串口的发送数据线连接,将BDX和异步串口的接收数据线连接,其余悬空即可。为了模拟异步接口,必须要设计一种方案使McBSP能检测和产生UART的数据帧。因为不能和UART数据帧同步,所以不能保证同步串口的时钟和UART数据帧的起始位的上升沿或下降沿对齐。这样UART数据帧和同步串口间会有偏移,同时也会因DSP的同步串口时钟频率和UART数据帧的波特率不匹配而产生数据的速率偏移。为了减少这两个偏移,可以采用过采样技术,即同步串口对UART数据流进行过采样,然后再识别或产生UART的数据帧。同时采用过采

14、样技术也有利于高速的SPI和低速的UART数据流相匹配。过采样的采样速率可以有多种选择,因为54x系列DSP数据位数是16 b,为了便于处理本文采用16倍采样率过采样。McBSP口对UART数据采样时钟的理想时序3.3 McBSP管脚作为通用I/O脚通过设置SPCR1,2的(R/X)RST0和PCR的(R/X)IOEN1,可以使MCBSP作为通用I/O引脚。对于FS(R/X管脚, FS(R/XM0使作为通用输入管脚。FS(R/XP(R/XM和CLK(R/XP对CLK(R/X的作用相似。当发送器作为通用I/O时,PCR中的DXSTAT值驱动DX管脚输出。DR总是作为输入脚,其状态有DRSTAT反

15、映。如果CLKS要作为通用输入使用,则收发器必须同时处于复位状态且(R/XIOEN1,管脚的状态由CLKSSTAT反映。具体寄存器如下:3.4 McBSP在CCS集成开发环境下的相关头文件/*/* Register Definition MCBSP */*/*-PORT-|-2-|-1-|-0-|*/Added by T. kyiamah#define SPCR1_ADDR(port (port ? 0x49 : 0x39#define SPCR2_ADDR(port (port ? 0x49 : 0x39#define SPSA_ADDR(port (port ? 0x48 : 0x38#d

16、efine SPSD_ADDR(port (port ? 0x49 : 0x39#define DRR2_ADDR(port (port ? 0x40 : 0x20#define DRR1_ADDR(port (port ? 0x41 : 0x21#define DXR2_ADDR(port (port ? 0x42 : 0x22#define DXR1_ADDR(port (port ? 0x43 : 0x23#define MCBSP_ACCSUB_ADDR(port (port ? 0x49 : 0x39#define SPCR1_SUBADDR 0x00#define SPCR2_SU

17、BADDR 0x01#define RCR1_SUBADDR 0x02#define RCR2_SUBADDR 0x03#define XCR1_SUBADDR 0x04#define XCR2_SUBADDR 0x05#define SRGR1_SUBADDR 0x06#define SRGR2_SUBADDR 0x07#define MCR1_SUBADDR 0x08#define MCR2_SUBADDR 0x09#define RCERA_SUBADDR 0x0A#define RCERB_SUBADDR 0x0B#define XCERA_SUBADDR 0x0C#define XC

18、ERB_SUBADDR 0x0D#define PCR_SUBADDR 0x0E/*/* Subregister Read / Write */*/#define MCBSP_SUBREG_WRITE(port, subaddr, value (REG_WRITE(SPSA_ADDR(port, subaddr,(REG_WRITE(MCBSP_ACCSUB_ADDR(port, value#define MCBSP_SUBREG_READ(port, subaddr (REG_WRITE(SPSA_ADDR(port, subaddr,(REG_READ(MCBSP_ACCSUB_ADDR(

19、port#define DMA_SUBREG_WRITE(chan, subaddr, value (subaddr>=0x1E ?(REG_WRITE(DMSBA_ADDR, (subaddr, REG_WRITE(DMSAI_ADDR, value:(REG_WRITE(DMSBA_ADDR, (chan*5+subaddr, REG_WRITE(DMSAI_ADDR,value #define DMA_SUBREG_READ(chan, subaddr (subaddr>=0x1E ?(REG_WRITE(DMSBA_ADDR, (subaddr, REG_READ(DMSA

20、I_ADDR:(REG_WRITE(DMSBA_ADDR, (chan*5+subaddr, REG_READ(DMSAI_ADDR /* Subregister Bit Field Read / Write */#define MCBSP_SUBREG_BITWRITE(port, subaddr, bit, size, value REG_WRITE(MCBSP_ACCSUB_ADDR(port, (REG_WRITE(SPSA_ADDR(port,subaddr, REG_READ(MCBSP_ACCSUB_ADDR(port & CREATE_FIELD(bit, size |

21、 (value<< (bit #define MCBSP_SUBREG_BITREAD(port, subaddr, bit, size (unsigned int (REG_WRITE(SPSA_ADDR(port, subaddr,(REG_READ(MCBSP_ACCSUB_ADDR(port & CREATE_FIELD(bit, size >>(bit #define DMA_SUBREG_BITWRITE(chan, subaddr, bit, size, value (subaddr>=0x1E ?(REG_WRITE(DMSBA_ADDR,

22、 (REG_WRITE(DMSBA_ADDR, subaddr,REG_READ(DMA_ACCSUB_ADDR & CREATE_FIELD(bit, size | (value <<(bit :(REG_WRITE(DMSBA_ADDR, (REG_WRITE(DMSBA_ADDR, (chan,(REG_READ(DMA_ACCSUB_ADDR & CREATE_FIELD(bit, size>>(bit#define DMA_SUBREG_BITREAD(chan, subaddr, bit, size (subaddr>=0x1E ?(u

23、nsigned int (REG_WRITE(DMSBA_ADDR, subaddr,(REG_READ(DMA_ACCSUB_ADDR & CREATE_FIELD(bit, size >>(bit :(unsigned int (REG_WRITE(DMSBA_ADDR, (chan*5+subaddr,(REG_READ(DMA_ACCSUB_ADDR & CREATE_FIELD(bit, size >>(bit 在mcbsp54.h头文件中,定义了与MCBSP相关的宏函数(MACRO FUNCTIONS)和函数,其中的函数和宏函数列表如下:/*

24、 MCBSP_BYTES_PER_WORD - return # of bytes required to hold # */* of bits indicated by wdlen */* MCBSP_ENABLE( - starts serial port receive and/or transmit */* MCBSP_TX_RESET( - reset transmit side of serial port */* MCBSP_RX_RESET( - reset receive side of serial port */* MCBSP_DRR1_READ( - read data

25、 value from serial port */* use instead: MCBSP_SUBREG_READ(. , DRR1_SUBADDR, . */* MCBSP_DRR2_READ( - read data value from serial port */* use instead: MCBSP_SUBREG_READ(. , DRR2_SUBADDR, . */* MCBSP_DRR12_READ( - read data value from serial port */* return value as unsigned long */* MCBSP_DXR12_WRI

26、TE( - write data value from serial port */* MCBSP_IO_ENABLE( - place port in general purpose I/O mode */* MCBSP_IO_DISABLE( - take port out of general purpose I/O mode */* MCBSP_FRAME_SYNC_ENABLE - sets FRST bit in SPCR */* MCBSP_FRAME_SYNC_RESET - clrs FRST bit in SPCR */* MCBSP_SAMPLE_RATE_ENABLE-

27、 sets GRST bit in SPCR */* MCBSP_SAMPLE_RATE_RESET - clrs GRST bit in SPCR */* MCBSP_RRDY - returns selected ports RRDY */* MCBSP_XRDY - returns selected ports XRDY */* MCBSP_LOOPBACK_ENABLE - places selected port in loopback */* MCBSP_LOOPBACK_DISABLE - takes port out of DLB */3.5 McBSP数据通信流程C54串口通

28、过16bit宽度的控制寄存器与内部总线通信。(1数据接收过程:数据从输入引脚(DR移位到接收移位寄存器(RSR,然后拷贝数据到接收缓冲寄存器(RBR,接着把数据拷贝到数据接收寄存器(DRR,CPU或者DMA控制器读取DRR.数据输出过程:CPU或者DMA把数据写到数据传输寄存器(DXR),在通过寄存器(XSR)移位到数据输出引脚DX。对串口寄存器的访问是间接寻址方式。例如要对MCBSP数据寄存器进行访问,首先写串口控制寄存器子地址SPCR到子地址寄存器SRSA,然后对数据寄存器进行访问。(2数据发送过程:McBSP 设置成双相帧,第一相长度为#strtbits+#databits+#parit

29、ybits,第二相长度为2#stop bits,要传输的帧的长度RxPKTBITS就是这些相的总和。从图1可以看出:异步信号线一直为高直到有数据发送,当一个包发送,首先发送起始位,所以信号变低,类似于帧的下降沿同步。接收过程:第一相长度为#startbits+#databits+#paritybits,第二相长度为8 bits。通过把接收数据线和DR 以及和帧同步FSR接在一起,就可以完成接收的工作。当数据线变低后我们就触发McBSP 开始接收数据包。为防止MCBSP 再次触发我们设置在接受数据包期间忽略所有的帧同步。但是由于使用mcbsp做通用IO接口时,发送过程定义比较复杂,不及系统通用I

30、O引脚的XF简单明了,所以在这里我们选用后者进行数据的发送引脚。调用程序大体如下所示:asm(“SSBX XF”;/XF输出置高电平; asm(“RSBX XF”;/XF输出置低电平(3DMAC54DMA包含独立的六条传输通道,可以完成内存、外存和外部借口之间的传输。而不需要CPU的干涉。DMA可以设成自动缓冲模式(ABU Mode,这相当于实现了FIFO功能。该模式为DMA传输提供一个环形缓冲区。通过设置位和寄存器,可以在缓冲区半满或者全满是产生中断。对于DMA操作,关键是对源地址、目标地址、操作数寄存器的正确设置。串口接收DMA寄存器的设置:STMDMSRC1,DMSA; /设置子地址ST

31、MDRR10,DMSDI ; /设置源地址D MSRC1STM#2000H,DMSDI ; /设置目的地址DMDST1STM#20,DMSDI ; /设置缓冲大小DMCTR1 ,20 个字节STM#1000H,DMSDI ; /设置DMSFC1,McBSP串口接收触发/单字/单帧STM#5045,DMSDI ; /设置DMMCR0 ,自动初始化禁止/ DMA 中断允许/ABU 模式/ 源地址不变/ 目的地址加一(4使用MCBSP实现UART通信数据格式同步通信依赖三个独立的信号来传输和接收数据:数据、时钟、帧同步。然而作为异步通信,传输数据只需要一根线,根本不需要时钟,它的通信格式完全由软件实

32、现。图5软件共分为3个大的部分:串口的初始化;串口的接收;串口的发送。串口初始化。主要功能是:McBSP和DMA寄存器。McBSP 产生正确的时钟、帧同步和波特率。DMA 必须使接收通道使能和正确的中断输出,我们利用DMA 通道4 接收,通道5 发送。下两表介绍用到的主要变量和寄存器:串口的接收。接收分为两个过程:首先当新包刚接收时候所进行的操作;其次怎样从Buffer 中读取该包。第一个过程由DMA 中断服务程序UARTDMARxISR实现,我们使用了ABU方式,DMA寄存器的设置见表3。第二个过程由用户调用线程UARTRxChar 实现,流程图如图4所示。串口的发送。发送分为两个过程:首先

33、把新包放到发送Buffer中去;其次当一个新包刚发送时候,应进行的操作,对于DMA寄存器的设置类似于接收,只是源地址为DMA缓冲区,目的地址是McBSP的DXR寄存器。第一个过程由用户调用线程UARTTxChar来实现;第二个过程由DMA发送中断服务程序UARTDMATxISR 实现,4 设计步骤和过程首先按照MAX202的管脚图将电平转化器焊好,它可以使DSP的5V电压与RS232的12V电压相匹配,完成信息传送。然后按照硬件连接图将各个部件连接起来。其中BDR和BFSR是mcbsp的输入管脚,XF是通用I/O接口的输出管脚,它们都位于拓展槽中。流程图:发送过程流程图接收过程流程图5 设计程

34、序的调试和运行结果5.1 CCS5000程序调试:程序运行过程在编译程序之前,还要做一些准备工作,即这项工程的文件添加等。如library的库文件就需要自己从TI(或CCS5000)文件夹中寻找添加:(1drv5402.lib是软件仿真所用的仿真器所必需的库文件;(2dsk5402.lib是驱动DSK板所必需的库文件;(3rts.lib,这个库提供目标DSP运行时间支持(runtime-support。由于程序没有#include ,因此本程序不需要头文件。上图是编译成功的结果显示:无错误和警告!这是最终调试成功的结果。因此,本程序所使用的配置文件有:(1-c,即源程序文件;(2-o,uart

35、.out即输出文件(默认在Debug目录);(3-l rts.lib等库文件。在编译之前,还应设置一下编译环境,虽然本程序没有对其修改。3在调试无错的情况下选择load程序在调试无错后,选择file菜单中的load programme,使程序可以在板子上运行。选择load programme后进入对话框,选择.out文件,一般该文件都缺省在Bug文件夹中。Load完成后如下图所示: cmd程序及解释:.cmd 文件类型及作用:.cmd 是链接器命令文件,用于存储器配置。.cmd 文件结构:.cmd 由两条链接伪指令来描述:MEMORY 和SECTIONS,其中:MEMORY 定义用户目标系统存

36、储器的配置;SECTIONS 控制段的构建和存储器的分配。首先存储器空间是需要配置的,因为 DSP 不同的空间占用相同的地址,因此需要人工分配。5402.cmd全文及其解释如下:/* C5402 DSK DSP Memory Map*/MEMORY /The memory directive(存储器指令)/*缺省模式下:PAGE 0 指程序存储器,Origin 为存储器的起始地址,length 为*/*程序代码所占空间,如PARAM,程序起始地址为1000h,程序所占空间efdh*/*可推出PRAM 的结束地址为1efdh*/PAGE 0:PARAM : origin=0x1000, leng

37、th=0x0efd/*缺省模式下:PAGE 1 指数据存储器,数据存储的起始、终止地址及长度与上类同*/DARAM : origin=0x2000, length=0x2000/* DSP Memory Allocation :DSP 的存储器空间分配*/SECTIONS /The sections directive/* Property 在name 之后,用于描述各输出段的内容和分配*/*Run >allocation:定义该段的运行空间及地址*/*以.cinit 为例,.cinit > PRAM PAGE 0 的作用:把.cinit 输出段分配到PAGE 0 中的*/* PA

38、RAM,存储信息为:origin = 1000h, length = efdh。下同,类似代码注释从略*/.text : > PARAM PAGE 0.cinit: > PARAM PAGE 0.data: > DARAM PAGE 1.bss: > DARAM PAGE 1.const: > DARAM PAGE 1根据上面的具体文件作以下补充:sections是COFF文件中最重要的概念,它至少包含以下三个段:.text 段:包含可执行代码;.data 段:包含初始化数据;.bss 段:为未初始化变量保留存储空间。其他为自定义段(或汇编器生成段),如:.use

39、ct段,.sect段,.cinit段等。初始化代码段:包含数据或可执行代码,C/C+ compiler 产生下面的初始化段:.cinit 段:包含初始化变量表和常数,C/C+ 的全局变量;.const 段:包含由C/C+限定的字符串常数和数据;(假如 constant也不是定义为 volatile.text 段:包含所有的可执行代码,还有字符串汇编产生的常数。.cmd文件的细节问题:未初始化段:存储器中的保留空间(通常是 RAM)。程序可以在运行时使用这个空间,建立和存储变量。汇编器compiler 建立如下未初始化段:.bss段:为global and static variables保留空

40、间。当使用-c 链接选项,程序启动时,C/C+ boot 程序将.cinit段的数据拷出,存到.bss段中。.stack 段:为C/C+系统堆栈system stack分配存储器,其存储器可以传送变量。链接命令语言是ASCII码形式的文件。它支持C语言的“/* */”作为注释,但不支持“/”,链接命令文件中的常数可以采用汇编语言格式,也可以采用C语言格式,或者混用。(1加载程序编译成功后,选择File菜单中的Load Program选项,将出现图7所示的加载界面,为下面软件仿真观测图形和在硬件上显示做准备:由以上数据图可以看到计算出的数据存储到哪些位置。(2用到的关键寄存器:选择View中的R

41、egisters的CPU Registers选项,可以看到CPU中寄存器的变化情况,如 CPU中寄存器的变化情况选择View中的Registers的Peripheral Regs选项,可以看到外设寄存器的变化情况:外设寄存器的变化情况5.2 硬件设计5.3 串口调试助手测试实验结果一个很好小巧的串口调试助手,支持常用的300-115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件,背景颜色可选,窗口可钉在最上层,有利于观察数据。串口调试软件接收窗口串口

42、调试软件接收窗口6 课程设计思考与体会作为一名快毕业的大四学生,已经不是第一次做类似的课程设计了。每做一次,我都能得到巨大的收获,而且对很多东西的认识都有了进一步提高。或许是由于,经济危机,社会不安分,就业等种种问题,我对实践课程越来越看重,感觉到了一种紧迫感。以前的课程设计我都是糊里糊涂做的,而这次我找了很多资料,学了不少东西,并和同学交流,大显了一把身手,完成了此次设计。几乎每天都是奔波在寝室与实验室中,不知不觉两星期的课程设计就告一段落。回顾这十几天的日子,既感慨,又兴奋。至少下了功夫得到了回报,而且学到了非常多的有关DSP的知识,对我们专业的了解更进了一步,信心也提高了一大截。想起开始

43、的不知所措,不免暗自发笑。将自己所学的东西,充分的灵活运动起来,这是我们最应该做的事,也是完成设计的必要条件。经过这次DSP课程设计的学习,我们不仅掌握了设计内容要求,更大的收获是掌握了自主学习的方法。我们这次选择的题目是软件实现异步串行接口UART的硬件功能,对于从来没有接触过UART概念的我们来说,这个题目相对难度比较大。开始的时候我们根本不知道从何下手,只能到处找资料,读很多的文章。但是文章的实现方法各有不同,在概念没有了解透彻的时候根本就无济于事。所以我们将重心转向了对UART硬件原理的学习中,了解了它的硬件功能才知道如何使用软件去实现它。最后我们的软件调试还是大都由我们自己完成的,我

44、们采用的方法是中断定时器法来实现的,所以我们参考书上的例子,对我们的程序进行补充。输入管脚我们选用mcbsp的RX来实现,因为它的读取数据相应比BIO接口简单很多,输出我们则选用通用接口中的XF,他可以直接赋值,简单方便。但是当初我们并不敢确定两种接口可以混用,经过老师的细心指导,我们才解决了这一个问题。在调试过程中,我们经过无数次失败熟练掌握了ccs的基本使用方法。很多错误都是我们从来没有见过的,起初根本不知道如何下手去改正。但经过自己的努力和老师的指导,我们还是完成了软件部分的设计。软件调试成功后硬件的第一个问题就是要我们自己焊一块小的电路板,完成电平转换的功能。因为dsk的工作电压是5V

45、,而RS232的工作电压是12V,如果不加入电平转化,两者无法进行数据通讯。所以我们选用MAX202电平转换器来实现电平转换功能。第二个问题就是电脑上的串口都是针,而不是孔,我们根本无法进行连接,所以必须向老师求助,借来了数据线。硬件连接后,还要使用串口调试助手软件来检测实验结果,但是不可靠的硬件连接使我们无法实现预期的实验效果,这点让我们很失望。软件和硬件无法分开,我们根本没有办法测试是哪部分出的问题,至使最后的实验没有成功。虽然我们这次实验的效果没有达到预期的想法,但是应该掌握的我们都掌握到了,应该学习的我们也都学习了。设计期间,同学们都有很高的积极性,经常都讨论的热闹,不少同学都说这次真

46、的学到很多东西。这也正是我们做设计的目的,锻炼实践的同时拓展自己的知识面,让自己在大学里学到更多东西,为将来走向社会打好基础。当然设计中出现的很多问题我们也应该重视,比如很多同学不会用软件,原因是对软件上的英文单词不清楚。英语对于电子真的很重要,以后我们经常会接触到大量外国科研文献,现在都不懂以后怎么办呢?。还有一个问题:大多数同学与老师交流太少,都是自己做,我想做这类设计,老师的经验和知识都能给我们很大的帮助,不说能让我们少走弯路,但至少能够让我们学到很多以前自己未曾接触到的知识,当然,我自己也应该改正这个毛病。通过此次设计也大大加强了同学之间的关系,在佩服那些做的好的同学的同时,我也更加的

47、看好自己。这次课程设计虽然结束了,但我依然意犹未尽,从失败到成功的那种兴奋感,大大激励着我不断去学习,不断去实践。我对我们专业越来越感兴趣,我也希望自己真正能够在电子这行上做出大事业来。我只相信自己的实力,我相信只要自己有能力总会有好的工作来找你。不过,我们现在需要做的还是一丝不苟的上好课,学好该学的专业知识,我想这才是我们现在的重中之重。当然我也希望能有更多的机会去做类似的课程设计,这或许能让我们成长的更快些。参考文献1 邹彦. DSP原理及应用M. 北京:电子工业出版社,2005,1.2 戴明桢.TMS320C54xDSP结构、原理及应用M.北京航空航天大学出版社,2001,8.3 胡圣尧

48、. DSP原理及应用M.东南大学出版社,2008.7.4 清源科技.TMS320C54xDSP应用程序设计教程M.机械工业出版社,2004,1.5 清源科技.TMS320C54x硬件开发教程M.机械工业出版社,2003,1.6 蔡琳洁.DSP与PC机串口的高速数据通信的实现J.电讯技术,2001,4.附录DSP程序代码#include #include #include #include #include #include /=/定义软件UART发送接收引脚/=/ BDR /串行接收脚/ BFSR /桢同步输入信号/ FX /串行发送脚u16 mcbsp;/定义定时器#define TIM0

49、0#define PLL15 0x0e007#define PLL10 0x9007#define PLL5 0x4007#define PLL2 0x1007#define PLL1 0x0f007#define DIV2 0x0000#define DIV4 0xf000/=/定义软件UART状态机控制字/=#define RS_IDLE 0 /空闲#define RS_DATA_BIT 1 /数据位#define RS_STOP_BIT 2 /停止位#define RS_STOP_END 3 /停止位结束/=/设置状态寄存器/=void set_clock(u16 plldiv;void

50、 set_wait_states(void;interrupt void function(void;void interrupt_init(void;/=/定义函数类型/=void UART_Out(void;void UART_In(void;/=/定义位变量/=int rsTxBusy; /串行发送忙标志/定义串行发送的数据结构struct unsigned char state; /发送状态机控制单元unsigned char sliceCount; /波特率控制unsigned char shiftBuff; /字节数据发送移位寄存器unsigned char shiftCount;

51、 /字节数据发送移位计数器 rsTx;/定义串行接收的数据结构struct unsigned char state; /接收状态机控制单元unsigned char sliceCount; /波特率(采样点)控制unsigned char shiftBuff; /字节数据接收移位寄存器unsigned char shiftCount; /字节数据接收移位计数器unsigned char dataBuff8; /接收数据FIFO缓冲队列unsigned char putPtr, getPtr;/FIFO队列存放读取指针 rsRx;/用于串行发送的变量定义unsigned char outBuff

52、10; /发送队列unsigned char outPtr, /发送队列指针outTotal, /发送的字节总数chkSum; /发送的校验码/=/主程序/=void main(voidasm(" SSBX INTM " /关闭中断/初始化dskset_clock(PLL10; /DSP工作频率为100MHzset_wait_states(;/=/定义软件UART采样频率/=TIMER_HALT(TIM0;PRD(TIM0=62499;TCR(TIM0=0x0c0f;/=asm(" SSBX XF " /将输出管脚复位rsRx.state = RS_ID

53、LE; /初始化接收状态rsTxBusy = 0; /发送空闲asm(" RSBX INTM " /打开中断while(rsTxBusy=0 /程序主循环asm("clrwdt" /清看门狗UART_In(; /接收串行数据UART_Out(; /发送串行数据interrupt_init(;for(;/=/查询在接收FIFO队列中是否有新数据到/然后解读数据/=void UART_In(voidunsigned char data1;if (rsRx.putPtr=rsRx.getPtrreturn; /如果读取和存放的指针相同,则队列为空data1 = rsRx.dataBuffrsRx.getPtr; /读取1个数据字节rsRx.getPtr+; /调整读取指针到下一位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论