异种单片机共享片外存储器及其与微机通信方法

发布时间:2010-6-24 20:05    发布者:我芯依旧
关键词: 片外存储器 , 微机通信 , 异种单片机
TMS320系列数字信号处理单片机(DSP)在测控、仪器仪表、图象处理、计算机视觉与声信号处理等领域得到了越来越广泛的应用。DSP获取原始采集数据和输出处理结果一般有两种途径:一是通过串行口,另一是通过数据总线读写片外存储器。本文介绍了基于DSP的信号处理目标板与基于单片机AT89C51的多路同步数据采集板通过共享片外随机存储器实现板间通信,来获取原始采集数据的方法,并给出了总线隔离硬件电路与软件控制流程。并介绍了把DSP的处理结果传送给基于MCS-51单片机或基于微机的控制系统的方法。文中还简要分析了AT89C51与微机进行串口通信的软硬件设计,通过扩展AT89C51间接实现了TMS320C32与单片机或微机之间的通信,比直接通过TMS320C32的串口与单片机或微机进行通信要简单可靠得多。下面如无特别说明,MCU指AT89C51,DSP指TMS320C32。

1 板间共享存储器的硬件接口电路和软件控制流程

1.1 信号处理板硬件接口电路

基于DSP的信号处理板可以根据应用要求运行许多信号处理算法,如信号预处理、目标识别与跟踪定位、Kalman滤波等。待处理的原始信号数据通过板间通信从数据采集板获得。这里采用板间共享存储器的方法来完成数据交换,DSP既可以从共享存储器读取采集数据,也可以把处理结果(如新的程控放大倍数值,跟踪定位结果等)写到共享存储器中供MCU读取。

TMS320C32有一个双向串行口,可以设置每帧同时收发8/16/24/32位数据,同步时钟可以由内部串口定时器产生或由外部输入。通过设置串口全局控制寄存器来控制串口的总体功能和工作模式;通过设置FSX/DX/CLKX端口控制寄存器和FSR/DR/CLKR端口控制寄存器来控制串口6个引脚的功能,可以软件设置每个引脚为通用的I/O引脚或串口通信引脚。TMS320C32有两根通用的I/O引脚为XF0和XF1,由于共享存储器接口电路需要4根控制线来进行DSP与MCU间的握手通信,这里把串口的2个引脚FSR0和FSX0设置为通用的I/O引脚用作控制线。接口电路原理图如图1所示。


图中RAM0~RAM3是四片容量为512K的8位高速RAM(芯片型号为CY7C1049-17VC),组成32位数据宽度的存储器,DSP运行时的程序和数据都在这四片RAM中。FLASH(芯片型号为Am29F016)用于存储程序和初始化数据,即使掉电内容也不丢失,DSP上电时由自带的BOOT LOADER程序从FLASH中取出程序到四片RAM中运行。从共享存储器读取的采集数据也暂存到这四片RAM中。

1.2 数据采集板硬件接口电路

基于单片机AT89C51的数据采集板在单片机的全局控制下,通过对多路声传感器输出的微弱信号进行程控放大、低通滤波、同步采样保持、A/D变换,实时同步采集多路信号,并把采集到的信号数据存放在数据采集板上的128K共享存储器(芯片型号为CY7C109-12VC)中。

共享存储器及其总线隔离电路设计在数据采集板上。在某一时刻,共享存储器只能被某一方访问,否则会产生总线冲突。这里由MCU切换选通DSP总线或单片机总线,分时访问共享存储器。总线隔离芯片选用常见的双向总线隔离/驱动芯片74HC245,它有一个输出使能引脚(E)和一个数据传输方向(DIR)引脚,MCU通过控制这两个引脚来完成总线隔离与数据传输方向控制功能。接口电路原理图如图2所示。图中,MCU端的总线隔离由一片74HC373和两片74HC245完成,DSP端由三片74HC245完成数据总线和地址总线的隔离。由P1.2控制选通哪组总线,当P1.2为低电平时,共享存储器只能被MCU访问;当P1.2为高电平时,只有当P1.3也为高电平时(表示MCU同意让出共享存储器),共享存储器才能被DSP访问。由于DSP需要读或写共享存储器,所以需要软件设置数据总线隔离芯片74HC245的数据传输方向,这里通过设置DSPDIR信号线的电平状态来完成(高电平时为读,低电平时为写)。由于地址总线的数据传输方向始终是单向的,所以其隔离芯片的DIR端可以固定接低电平或高电平,视74HC245的实际接线而定。


1.3 软件控制流程

信号处理板上的DSP需要采集信号数据时就向数据采集板上的MCU发出请求信号,单片机接收到请求信号后,如果同意让出共享存储器,则向DSP发出应答信号,同时隔离MCU端的总线,暂停数据采集。DSP接收到应答信号后就可以访问共享存储器,DSP快速读、写完数据后,向单片机发结束信号,单片机接收到结束信号后,收回共享存储器,同时隔离DSP端总线,继续采集。这样数据采集与信号处理就可以同时进行,不同于一般的采集一段处理一段的串行工作模式,实现了数据采集零等待,增加了系统的吞吐能力。参见图3的接线图,一次完整的通信过程详述如下,注意在DSP程序初始化时应把XF0、XF1、FSR0设置为相应的无效状态。


1 DSP需要采集信号数据时向MCU发请求信号(置XF0为低电平),触发MCU的INT0中断,等待MCU应答(DSP循环检测XF1的状态)。
2 如果MCU同意让出共享存储器,则响应中断,否则等待。在中断服务程序中,置P1.3(即DSPACK)为高电平,表示应答。同时置P1.2为高电平,选通DSP总线。MCU接着循环检测P1.4?即DSPEOR)的状态。
3 DSP收到应答信号(即检测到XF1为高电平),立即快速读写共享存储器,在读操作前,置FSX0为高电平,在写操作前,置FSX0为低电平。读写完后,向MCU发结束信号(置FSR0为高电平),DSP紧接着进行其它处理操作。
4 MCU收到结束信号后(即检测到P1.4为高电平),置P1.2为高电平,隔离DSP总线,收回共享存储器,继续采集。

2 信号处理板与控制系统的通信

信号处理板从数据采集板获取采集数据后,经过对其进行一系列信号处理算法的运算处理,得到的处理结果需要传送给基于单片机或微机的控制系统。由于这里的处理结果数据量很小,所以利用串口通信的方法进行数据传输最为简单。我们可以直接对信号处理板上DSP的串口编程来与控制系统进行通信。但由于DSP的串口为同步串口,而单片机或微机的串口通常都为异步串口,这样就需要用软件来模拟DSP串口的异步通信时序,软件工作量大而且通信不可靠。这里通过扩展单片机与共享存储器的方法很好地解决了这个问题。DSP把处理结果写到共享存储器中,立即进行下一轮处理,由单片机从共享存储器中取出处理结果并传送给控制系统。这就省去了DSP进行串口通信所需的时间,最大限度地利用了DSP的高速数据处理的能力。在实时性要求很高的场合,这显得尤为重要。通过扩展少量的硬件,不但提高了系统的速度,优化了整体性能,而且软件实现也简单了许多。

2.1 信号处理板与控制系统的串口通信硬件电路

信号处理板利用扩展的单片机AT89C51与基于微机或MCU的控制系统进行全双工通信。图4为AT89C51的串口通信电路,通过"串口选择"拨码开关选择是与基于微机的控制系统通信,还是与基于MCU的控制系统通信。


在IBM PC/XT微机系统中,其串口符合RS-232C接口标准。为提高抗干扰能力,RS-232C标准采用负逻辑,低电平在-5V~-15V之间(通常用-12V表示)为逻辑"1",高电平在+5V~+15V之间(通常用+12V表示)为逻辑"0",上述电平称为EIA电平,它与TTL电平和CMOS电平不同。为了使AT89C51能与微机进行串行通信,可以利用常见的MC1488和MC1489进行电平转换。MC1488把TTL电平转换为RS-232C电平,MC1489把RS-232C电平转换为TTL电平。但由于MC1488和MC1489需要±12V的供电电压,增加了电源电路的复杂性,如图4所示,这里选用只需单一+5V电压的MAX232来完成电平转换,简化了硬件电路。

当信号处理板与基于MCU的控制系统通信时,只需三根线,一根发送线(TXD),一根接收线(RXD),一根共地线(GND),将双方的地线连在一起,将双方的发送线与接收线交叉连接即可。当信号处理板与基于微机的控制系统通信时,利用微机的九针串口进行通信,它们的串口电缆连线如图5所示。这里的发送线与接收线没有交叉,是因为在进行电平转换时已经交叉过了(参见图4)。


2.2 信号处理板与控制系统的串口通信软件编程

单片机与单片机或微机进行串口通信的软件编程有两种:查询方式和中断方式。这里发送方(信号处理板)采用查询方式,接收方(控制系统)采用中断方式。通信程序主要完成对串口初始化(包括选择串口模式、设置数据传输格式、设置波特率等)、建立连接、传输数据和断开连接等功能。为确保通信可靠,双方约定如下通信协议。

1 信号处理板上电后,一直发送请求联机信号'R',等待控制系统发应答信号'A',如果信号处理板收到应答,表示双方硬件连接正确,联机成功。
2 运行控制系统的串口通信程序。如果是与微机通信,则先自动检测连接的是哪个串口(COM1或COM2),检测到后向信号处理板发应答信号'A';若没检测到则显示错误信息,提示检查接线是否有误。若是与单片机通信,如果在规定的时间内(如10s内)还没有收到应答,则让指示灯闪烁,认为出错,需重新复位。
3 信号处理板收到应答后,先向控制系统发送总共要传输的数据个数,然后依次发送每个数据,直到发完为止。
4 控制系统发完联机应答信号后,就处于接收状态。先接收总共的数据个数,然后依次接收每个数据。控制系统每接收到一个数据都向信号处理板发确认信号,信号处理板只有收到确认信号后才发下一个数据。

另外,在单片机与微机之间进行通信时,双方要正确选择一致的波特率?而且SMOD位的选择影响单片机波特率的准确度,即影响波特率的误差范围。因而在单片机波特率设置时,对SMOD的选取也要适当考虑。为了保证通信的可靠性,通常波特率相对误差不要大于2.5%,当单片机与微机之间进行通信时,尤其要注意这一点。例如,单片机的时钟fOSC=12MHz,串口模式为方式1,假设单片机与微机的波特率都选为9600bps。当SMOD=0时,波特率相对误差为8.5%,当SMOD=1时,波特率相对误差为6.99%。实验表明,不论SMOD=0或1,单片机与微机在这种条件下均不能实现正常的发送与接收。若双方的波特率都取4800bps,且SMOD=1时,波特率相对误差为0.16%,实验证明通信完全可靠。
本文地址:https://www.eechina.com/thread-13645-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表