异种单片机共享片外存储器及其与微机通信方法
1.3 软件控制流程
信号处理板上的DSP需要采集信号数据时就向数据采集板上的MCU发出请求信号,单片机接收到请求信号后,如果同意让出共享存储器,则向DSP发出应答信号,同时隔离MCU端的总线,暂停数据采集。DSP接收到应答信号后就可以访问共享存储器,DSP快速读、写完数据后,向单片机发结束信号,单片机接收到结束信号后,收回共享存储器,同时隔离DSP端总线,继续采集。这样数据采集与信号处理就可以同时进行,不同于一般的采集一段处理一段的串行工作模式,实现了数据采集零等待,增加了系统的吞吐能力。参见图3的接线图,一次完整的通信过程详述如下,注意在DSP程序初始化时应把XF0、XF1、FSR0设置为相应的无效状态。
1DSP需要采集信号数据时向MCU发请求信号(置XF0为低电平),触发MCU的INT0中断,等待MCU应答(DSP循环检测XF1的状态)。
2如果MCU同意让出共享存储器,则响应中断,否则等待。在中断服务程序中,置P1.3(即DSPACK)为高电平,表示应答。同时置P1.2为高电平,选通DSP总线。MCU接着循环检测P1.4即DSPEOR)的状态。
3DSP收到应答信号(即检测到XF1为高电平),立即快速读写共享存储器,在读操作前,置FSX0为高电平,在写操作前,置FSX0为低电平。读写完后,向MCU发结束信号(置FSR0为高电平),DSP紧接着进行其它处理操作。
4MCU收到结束信号后(即检测到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%,实验证明通信完全可靠。
评论