DSP与计算机的异步串行通信精Word格式文档下载.docx
- 文档编号:20589557
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:31
- 大小:819.05KB
DSP与计算机的异步串行通信精Word格式文档下载.docx
《DSP与计算机的异步串行通信精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP与计算机的异步串行通信精Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。
6.I/O口的扩展电路
7.语音电路
8.CPLD电路
9.HPI接口
10.直流电机、步进电机电路
11.键盘、液晶屏电路
12.数码管、发光二极管电路
2课程设计目的
通过本次课程设计,综合运用数字信号处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。
初步培养学生对工程设计的独立工作能力、电子系统设计的一般方法。
通过课程设计树立正确的设计思想,提高学生分析问题、解决问题的能力。
进行设计基本技能的训练,如查阅设计资料和手册、程序的设计、调试等。
本题目要求实现DSP与计算机的异步串行通信,设计目的在于了解DSP与PC机串行通信的实现软硬件方案,了解DSP的中断系统,掌握DSP的I/O工作方式。
1、设计DSP与16C550的接口电路,实现串行数据的发送与接收
2、通过编写DSP程序,实现DSP与PC机之间的数据交换。
DSP对16C550的访问方式可以采用查询方式或者中断方式。
3、要求详细叙述DSP与16C550的接口设计方案以及控制16C550的编程方法。
4、按要求编写课程设计报告书,正确、完整的阐述设计
3课程设计原理
TMS320C5402DSP已在通信与信息系统、信号与信息处理和自动化控制领域有了广泛的应用。
该芯片提供了多通道缓冲串行接口McBSP(MultichannelBufferedSerialPorts与外部设备进行通信。
因为McBSP是同步串行接口,而计算机RS-232接口为通用异步接口UART(UniversalAsynchronousReceiverandTransmitter,要使计算机与C54进行通信,必须在DSP方面加一个专门的软件实现。
3.1UART工作原理
3.1.1异步串行通信的格式定义
发送一个完整的字节信息,必须有“起始位”、“若干数据位”、“奇偶校验位”和“停止位”;
必须定义每位信息的时间宽度——每秒发送的信息位个数,即为“波特率”。
Dsk5402系统中常用的波特率从300~19200b/s。
当波特率为1200b/s时,每个信息位的时间宽度为1/1200≈833μs;
无数据通信时,数据线空闲状态应该是高电平,“起始位”为低电平,数据位低位先发且后跟奇偶校验位(若有),“停止位”为高电平,如图3.1.1所示
图3.1.1异步串行通信时序
按图3.1最基本的异步串行通信时序,软件实现UART在不同架构的单片机上有多种方法。
数据接收是关键,异步通信没有可参照的时钟信号,发送方随时都可能发送数据,任何时刻串行数据到来时,系统都应该及时准确地接收。
比较而言,本机发送串行数据相对容易,只要对发送出去的电平做持续时间的定时即可。
3.1.2实现方法
(1三倍速采样法
三倍速采样法顾名思义就是以三倍于波特率的频率对接收引脚Rx进行采样,保证检测到“起始位”,又可以调整采样的时间间隔;
将有效数据位的采样点控制在码元的中间1/3处,最大限度地减少误码,提高接收的准确性。
我们把图1的起始位和部分数据位放大,如图2所示,把每个信息位分成三等份,每等份的时间宽度设为ts,以方便分析。
图3.1.2始位和部分数据位放大
以三倍频对信息位进行采样时,每个信息位都将可能被采样到三次。
当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,虽然每次具体的采样点会在此S0阴影区随机变化。
检测到起始位低电平后,间隔4×
ts时间,正好是第一位数据位的中间1/3处(图2中Ds阴影区)。
此后的数据位、校验位和停止位的采样间隔都是3×
ts,所有采样点均落在码元的中间1/3处,采样数据最可靠。
Dsp采用此法实现软件UART时,硬件上只要任意定义两个I/O引脚,分别初始化成输入(串行数据接收)和输出(串行数据发送)即可;
软件上只要实现定时采样,定时时间间隔在中档以上有中断机制的单片机上可以用不同的定时器(TMR0、TMR1、TMR2等)通过定时中断实现。
对于1200b/s波特率,码元宽度为833μs,采样时间间隔即为278μs。
整个串行接收或发送是一个过程控制问题,用状态机方式实现最为高效简易。
图3给出了串行接收的参考状态机转移过程。
图3.1.3串行接收的参考状态机转移过程
(2起始位中断捕捉、定时采样法
实现此法的硬件条件是dsp有外部脉冲下降沿中断触发功能,RB0/INT外部中断脚,CCP1/CCP2脉冲沿捕捉脚,PORTB的第4/5/6/7电平变化中断脚等都可以满足。
另外需配备一个定时器,以定时中断方式对接收码元正确采样,或发送串行数据流。
其关键的异步接收工作原理简介如图4所示。
图3.1.4异步接收工作原理
设串行数据位宽度为td。
起始位到来时刻(图4A点)的下降沿触发一个中断并立即响应该中断。
在此中断服务中立即关闭本中断使能位(后续的数据流变化无需触发中断),开启定时器,使其在1.5td后产生定时中断,用于采样第一个数据位(确保S0采样点落在数据位的中心位置处);
在处理下降沿中断服务的最后,再检测接收端是否还是0电平,以区分窄脉冲干扰。
在S0点采样到第一个数据位后的所有采样间隔都是1td,直到收到停止位后,关闭定时器中断,重新开放下降沿捕捉中断,准备接收下一个字节。
异步数据接收和发送的状态机控制流程,除了起始位判断和定时时间参数设置与前述方式不同外,其它几乎一样,此处不再重复。
此法的好处是可以实现较高的通信波特率。
对于通信不是很频繁的系统,此软件UART几乎不耗MCU运行带宽,9600b/s接收或发送在4MHz运行的dsp上即可轻松实现;
另外,由于下降沿中断可以唤醒处于睡眠的dsp,故极易实现通信唤醒的功能。
缺点是不能全双工通信(除非另外单独用一个定时器实现发送定时),异步接收的引脚必须有下降沿触发中断的能力。
在此次实验中,我们选用的是第一种方法来实现。
(3分频系数计算
McBSP时钟频率也就是采样频率。
TMS320C54x系列DSP的McBSP时钟频率可以由DSP主时钟分频得到。
通过对寄存器设置可以设定分频系数。
分频系数div可由如下公式得到:
式中厂为DSP的工作时钟B,为异步串口工作波特率。
计算后div若非整数则需取整。
分频寄存器只有8b,故最大分频值是256。
DSP5402主频为100MHz,串口波特率设定为9600,则:
div=100M/(16×
9600
3.2多通道缓冲串行口McBSP的结构及工作原理
C54多通道缓冲串行口(McBSP主要特点如下:
双缓冲区发送,三缓冲区接收以便数据的连续性;
接收与发送的帧同步、时钟信号独立;
多通道发送和接收,最多可以到达128个通道;
数据大小可为8,12,16,20,24和32bit;
μ率和A率压缩;
帧同步、数据时钟极性可编程;
内部时钟和帧同步可自行设定。
TMS32OC54x系列DSP的每个McBSP接口有6个信号线:
BSFX(帧同步脉冲发送、BFSR(帧同步脉冲接收、BCLKX(发送数据时钟、BCLKR(接收数据时钟、BDX(串口数据发送、BDR(串口数据接收。
应用时将BFSR和BDR连在一起都和异步串口的发送数据线连接,将BDX和异步串口的接收数据线连接,其余悬空即可。
为了模拟异步接口,必须要设计一种方案使McBSP能检测和产生UART的数据帧。
因为不能和UART数据帧同步,所以不能保证同步串口的时钟和UART数据帧的起始位的上升沿或下降沿对齐。
这样UART数据帧和同步串口间会有偏移,同时也会因DSP的同步串口时钟频率和UART数据帧的波特率不匹配而产生数据的速率偏移。
为了减少这两个偏移,可以采用过采样技术,即同步串口对UART数据流进行过采样,然后再识别或产生UART的数据帧。
同时采用过采样技术也有利于高速的SPI和低速的UART数据流相匹配。
过采样的采样速率可以有多种选择,因为54x系列DSP数据位数是16b,为了便于处理本文采用16倍采样率过采样。
图3.2.1McBSP口对UART数据采样时钟的理想时序
3.3McBSP管脚作为通用I/O脚
通过设置SPCR[1,2]的(R/X)RST=0和PCR的(R/X)IOEN=1,可以使MCBSP作为通用I/O引脚。
对于FS(R/X管脚,FS(R/XM=0使作为通用输入管脚。
FS(R/XP(R/XM和CLK(R/XP对CLK(R/X的作用相似。
当发送器作为通用I/O时,PCR中的DX-STAT值驱动DX管脚输出。
DR总是作为输入脚,其状态有DR-STAT反映。
如果CLKS要作为通用输入使用,则收发器必须同时处于复位状态且(R/XIOEN=1,管脚的状态由CLKS-STAT反映。
具体寄存器如下:
3.4McBSP在CCS集成开发环境下的相关头文件
在CCS集成开发环境中,与MCBSP相关的头文件有:
regs54xx.h和mcbsp54.h。
它们位于C:
\ti\c5400\dsk5402\include目录下。
在这两个头文件中,定义了MCBSP串口的寄存器资源以及使用方法。
在regs54xx.h头文件中,定义了MCBSP中寄存器的地址和基本寻址方式,以及寄存器的各各比特域和访问方法。
与此相关的定义如下所示
/*******************************/
/*RegisterDefinitionMCBSP*/
/*----------------PORT----------------------------------|-2--|--1--|-0--|*/
//AddedbyT.kyiamah
#defineSPCR1_ADDR(port(port?
0x49:
0x39
#defineSPCR2_ADDR(port(port?
#defineSPSA_ADDR(port(port?
0x48:
0x38
#defineSPSD_ADDR(port(port?
#defineDRR2_ADDR(port(port?
0x40:
0x20
#defineDRR1_ADDR(port(port?
0x41:
0x21
#defineDXR2_ADDR(port(port?
0x42:
0x22
#defineDXR1_ADDR(port(port?
0x43:
0x23
#defineMCBSP_ACCSUB_ADDR(port(port?
#defineSPCR1_SUBADDR0x00
#defineSPCR2_SUBADDR0x01
#defineRCR1_SUBADDR0x02
#defineRCR2_SUBADDR0x03
#defineXCR1_SUBADDR0x04
#defineXCR2_SUBADDR0x05
#defineSRGR1_SUBADDR0x06
#defineSRGR2_SUBADDR0x07
#defineMCR1_SUBADDR0x08
#defineMCR2_SUBADDR0x09
#defineRCERA_SUBADDR0x0A
#defineRCERB_SUBADDR0x0B
#defineXCERA_SUBADDR0x0C
#defineXCERB_SUBADDR0x0D
#definePCR_SUBADDR0x0E
/*SubregisterRead/Write*/
#defineMCBSP_SUBREG_WRITE(port,subaddr,value\
((REG_WRITE(SPSA_ADDR(port,subaddr,
(REG_WRITE(MCBSP_ACCSUB_ADDR(port,value
#defineMCBSP_SUBREG_READ(port,subaddr\
(REG_READ(MCBSP_ACCSUB_ADDR(port
#defineDMA_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
#defineDMA_SUBREG_READ(chan,subaddr\
(REG_WRITE(DMSBA_ADDR,(subaddr,REG_READ(DMSAI_ADDR\
(REG_WRITE(DMSBA_ADDR,(chan*5+subaddr,REG_READ(DMSAI_ADDR
/*SubregisterBitFieldRead/Write*/
#defineMCBSP_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|((value
<
(bit
#defineMCBSP_SUBREG_BITREAD(port,subaddr,bit,size\
(unsignedint(REG_WRITE(SPSA_ADDR(port,subaddr,
(REG_READ(MCBSP_ACCSUB_ADDR(port&
CREATE_FIELD(bit,size>
>
(bit
#defineDMA_SUBREG_BITWRITE(chan,subaddr,bit,size,value\
(REG_WRITE(DMSBA_ADDR,(((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
#defineDMA_SUBREG_BITREAD(chan,subaddr,bit,size\
((unsignedint(REG_WRITE(DMSBA_ADDR,subaddr,
((unsignedint(REG_WRITE(DMSBA_ADDR,(chan*5+subaddr,
在mcbsp54.h头文件中,定义了与MCBSP相关的宏函数(MACROFUNCTIONS)和函数,其中的函数和宏函数列表如下:
/*MCBSP_BYTES_PER_WORD-return#ofbytesrequiredtohold#*/
/*ofbitsindicatedbywdlen*/
/*MCBSP_ENABLE(-startsserialportreceiveand/ortransmit*/
/*MCBSP_TX_RESET(-resettransmitsideofserialport*/
/*MCBSP_RX_RESET(-resetreceivesideofserialport*/
/*MCBSP_DRR1_READ(-readdatavaluefromserialport*/
/*useinstead:
MCBSP_SUBREG_READ(...,DRR1_SUBADDR,...*/
/*MCBSP_DRR2_READ(-readdatavaluefromserialport*/
MCBSP_SUBREG_READ(...,DRR2_SUBADDR,...*/
/*MCBSP_DRR12_READ(-readdatavaluefromserialport*/
/*returnvalueasunsignedlong*/
/*MCBSP_DXR12_WRITE(-writedatavaluefromserialport*/
/*MCBSP_IO_ENABLE(-placeportingeneralpurposeI/Omode*/
/*MCBSP_IO_DISABLE(-takeportoutofgeneralpurposeI/Omode*/
/*MCBSP_FRAME_SYNC_ENABLE-setsFRSTbitinSPCR*/
/*MCBSP_FRAME_SYNC_RESET-clrsFRSTbitinSPCR*/
/*MCBSP_SAMPLE_RATE_ENABLE-setsGRSTbitinSPCR*/
/*MCBSP_SAMPLE_RATE_RESET-clrsGRSTbitinSPCR*/
/*MCBSP_RRDY-returnsselectedportsRRDY*/
/*MCBSP_XRDY-returnsselectedportsXRDY*/
/*MCBSP_LOOPBACK_ENABLE-placesselectedportinloopback*/
/*MCBSP_LOOPBACK_DISABLE-takesportoutofDLB*/
3.5McBSP数据通信流程
C54串口通过16bit宽度的控制寄存器与内部总线通信。
(1数据接收过程:
数据从输入引脚(DR移位到接收移位寄存器(RSR,然后拷贝数据到接收缓冲寄存器(RBR,接着把数据拷贝到数据接收寄存器(DRR,CPU或者DMA控制器读取DRR.数据输出过程:
CPU或者DMA把数据写到数据传输寄存器(DXR),在通过寄存器(XSR)移位到数据输出引脚DX。
对串口寄存器的访问是间接寻址方式。
例如要对MCBSP数据寄存器进行访问,首先写串口控制寄存器子地址SPCR到子地址寄存器SRSA,然后对数据寄存器进行访问。
(2数据发送过程:
McBSP设置成双相帧,第一相长度为#strtbits+#databits+#paritybits,第二相长度为2#stopbits,要传输的帧的长度RxPKTBITS就是这些相的总和。
从图1可以看出:
异步信号线一直为高直到有数据发送,当一个包发送,首先发送起始位,所以信号变低,类似于帧的下降沿同步。
接收过程:
第一相长度为#startbits+#databits+#paritybits,第二相长度为8bits。
通过把接收数据线和DR以及和帧同步FSR接在一起,就可以完成接收的工作。
当数据线变低后我们就触发McBSP开始接收数据包。
为防止MCBSP再次触发我们设置在接受数据包期间忽略所有的帧同步。
但是由于使用mcbsp做通用IO接口时,发送过程定义比较复杂,不及系统通用IO引脚的XF简单明了,所以在这里我们选用后者进行数据的发送引脚。
调用程序大体如下所示:
asm(“SSBXXF”;
//XF输出置高电平;
asm(“RSBXXF”;
//XF输出置低电平
(3DMA
C54DMA包含独立的六条传输通道,可以完成内存、外存和外部借口之间的传输。
而不需要CPU的干涉。
DMA可以设成自动缓冲模式(ABUMode,这相当于实现了FIFO功能。
该模式为DMA传输提供一个环形缓冲区。
通过设置位和寄存器,可以在缓冲区半满或者全满是产生中断。
对于DMA操作,关键是对源地址、目标地址、操作数寄存器的正确设置。
串口接收DMA寄存器的设置:
STMDMSRC1,DMSA;
//设置子地址
STMDRR10,DMSD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 计算机 异步 串行 通信