在研制无线分组网络路由控制器时,采用了双DSP结构进行数据处理,另外还需扩展8个串口,很显然这是DSP本身所无法解决的,故必须进行串口扩展。
常用串口扩展方法:
从本质上讲,所有的串口扩展接口电路都是以并行数据形式与CPU接口,而以串行数据形式与外部逻辑接口。它们的基本功能是从外部逻辑接收串行数据,转换成并行数据后传送给CPU;或者从CPU并行输出的数据,转变成串行数据后输出给外部逻辑。串行通信接口电路至少包括一个接收器和一个发送器,而接收器和发送器都分别包括一个数据寄存器和一个移位寄存器,以便实现CPU输出→并行→串行→发送或接收→串行→并行→CPU输入 *** 作。
SCC85C30的性能特点
对一个需进行实时多路并行数据处理的系统来说,选用一种高效可靠的串行通信接口器件是非常重要的。Zilog公司的串行通信控制器(SCC)85C30就是一种高性能的串行通信接口器件,其功能比其它USART(Universal Synchronous Asynchronous Receiver/Transmitter通用异步同步收发器)强大的多。85C30串行通信控制器(SCC)是一种双通道、多规约数据通信外围器件,该芯片为处理各种有效的串行通信规程提供多功能支持:可起到串-并、并-串的转换器/控制器作用,它在程序控制下可满足串行通信上广泛多样的用途;具有波特率发生器、数字锁相环和晶体振荡器,使外部逻辑得到简化;能以多种方式产生和检测CRC码,并可通过多种方式编程来检查数据的完整性,有同时在两条通道上控制调制-解调的能力。在不需要这些控制的用途中,调制-解调控制器可作为通用I/O。
85C30的每路信道可存取14个写寄存器和7个读寄存器,用户可进行配置使其能处理全部非同步格式,而与数据长度、停止位的数目或奇偶要求无关。还能处理所有的同步格式,包括按字符、按字节的存取规程。85C30还具有下列功能:通过检查奇偶位改变规程;插入或删除字符,生成CRC,并加以检查;生成断点和异常中止码,并加以检测;以及其它许多与规程有关的功能。
85C30内部结构能提供连接多路转换总线和非多路转换总线所必要的全部中断和控制逻辑。此外还有接口逻辑,用于监视调制解调器和外围控制输入输出。其控制信号都是通用的,不仅用于调制解调控制,而且适用于控制多种外围设备。数据 *** 作和控制联接都通过内部的读和写寄存器进行,这些寄存器经编程之后,可使85C30执行各种功能(硬件开销小),即在程序排队之前或之中对寄存器赋值,以决定85C30如何建立一个给定的通信规程。
85C30采用附加电路支持串行通信。设计人员可以选择内部波特率发生器,选择频率并对85C30中的几个电路之一的输出编程。可在程序控制下对几种标准格式进行编码和译码。另外,还可为DPLL、波特率发生器接收器和发送器选择各种定时部件。
双DSP对多个SCC的控制设计
对一个进行实时并行多通道数据处理的双DSP系统来说,其扩展的串口也必须满足系统的实行性要求。串行接口器件性能的好坏以及双DSP对多个串行通信控制器(SCC)控制的好坏直接影响到系统的整体性能。
双DSP系统对多个SCC控制,采用4片Zilog公司的SCC(85C30)使双DSP(TMS320F206)在原有2个异步串口和2个同步串口的基础上又增加了8个串行口(可根据需要设定为异步口或设定为同步口)。
85C30是较为复杂的器件,要充分利用其功能,需对其进行合理编程。在编程时需对其诸多寄存器进行 *** 作,这在单个DSP情况下也是较为复杂的。用双DSP对其控制,以及双DSP对多SCC的控制情况更为复杂,需解决以下的问题:
(1)对SCC访问的优先权问题;
(2)数据线、地址线、选通控制线的方向问题;
(3)双DSP相互间握手、时序问题;
(4)两套总线间干扰的消除问题及总线切换时的误动作问题;
为解决这些问题,需采取硬件设计和软件设计相结合的办法,使DSP对SCC的控制更可靠,效率更高。
在硬件的设计上:
(1)采用了两套独立的数据线和地址线,重点解决了读/写、片选等切换逻辑的设计问题;
(2)采用双向三态总线驱动器(如74LS245)实现数据、地址、控制总线的隔离;
(3)把DSP(TMS320F206)的IO0、IO1、IO2、IO3设置为对SCC的访问控制线。实现DSP对SCC的分时复用。
在软件设计上:
(1)对两个DSP进行了分工,设定DSP1负责接收数据,DSP2负责发送数据;
(2)设定DSP1从第1个SCC开始向后查询,DSP2从第三个SCC向后查询,最大限度地降低二者忙闲比,提高了系统的实时性。
(3)把IO0、IO1设定为发送端口,把IO2、IO3设定为接收端口。IO0-IO3值所表达含义如附表所示。
(4)对SCC分时选通。访问某一SCC前先查询IO2、IO3以确定另一DSP是否正在访问它,若另一DSP不访问该SCC,则访问之首先把该SCC的编号通过IO0、IO1发送给另一DSP;若另一DSP正访问它,则跳过该SCC,访问下一SCC,同样也把该SCC的编号通过IO0、IO1发送给另一DSP。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)