PowerPC和Dallas的时钟芯片接口设计_单片机论文
关键词:实时时钟 cpld powerpc 地址/数据复用
在通信领域,摩托罗位的powerpc(如mpc850、mpc860、mpc8260等)的应用越来越广泛。由于这些嵌入式cpu上集成着丰富的通信资源(如快速以太网接口、多个串口等),而且有较高的运行速度和较低的价位,故在一些远程测控领域的应用也越来越多。同时在许多系统中都需要实时时钟,而应用最广泛的当数dallas的时钟芯片。摩托罗拉的powerpc系列地址线和数据线是独立的,而dallas的时钟芯片的地址线和数据线是复用的。本文以mpc860和ds1687为例,给出接口的设计方法和电路。因为用cpld来实现,进步增加了通用性。
1 ds1687的功能和时序特点
在我们开发的宽带接入服务器(bnas)中用到了mpc860,作为客户端与radius服务器配合实现对用户信息的认证、鉴权、计费等功能。在处理计费时需要有实时时钟基准,我们选择了dallas的ds1687实时时钟芯片。ds1687的引脚分布如图1所示。
ds1687具有以下主要功能:
*集成晶振和锂电池,芯片中ram的数据在掉电后不会丢失;
*解决千年虫问题;
*集成242字节的nvram;
*可编程方波输出;
*输出32.768khz信号,以支持电源管理功能;
*在不加电时数据至少保存10年。
ds1687的cpu接口为地址线数据线复用,读写时序分别如图2和图3所示。
2 mpc860的时序特点
mpc860有异步和同步两种总线接口,分别称为cpu和gpcm。upm连接同步操作芯片,如sdram、ssram,具有较高的总线速度;gpcm连接异步操作的芯片,如异步时序内存、异步时序的专用芯片。mpc860的gpcm接口是地址和数据非复用的,基本操作时序如图4所示。为了简单起见,将读写时序在同一帧图上描述。其中片选读信号oe和写信号we的上升或下降沿的位置可通过设置寄存器进行调整。
3 接口的设计原理和具体实现
从ds1687的时序看出,在一次读或写的操作中,地址/数据线先出现地址后出现数据;而gpcm接口在一次操作中,数据线输出数据,地址线输出地址。从这个特点出发,设想用mpc860的两次操作产生的时序来完成ds1687的一次操作。具体思路如下:把mpc860的数据线(d0…d7)与ds1687的地址/数据线(ad0…ad7)相连,通过mpc860的gpcm口直接输出的地址a11(也可根据内存空间划,随着选择一根地址线)、片选cs5(mpc860共有8个片选输出)、读信号oe和写信号we的逻辑运算产生ds1687的ale信号、读信号ds_rd、写信号ds_we和片选信号ds_cs。逻辑运行如下:
ale=!(cs5)+a11+we)
ds_rd=oe+!a11
ds_we=we+!a11
ds_cs=cs5+/a11
上述逻辑用或门、非门很容易实现,但在本系统中,还要实现mpc860上电配置字设置、长监控时间的看门狗、mpc860与其它专用芯片的接口等其它功能,故选择可编程逻辑器件pld来完成这些功能。随着pld器件密度的提高和价格的下降,在系统中的应用会越来越广泛。在本设计中选择了xilinx公司的cpld器件xc95144。它属xc9500系列,由多个功能块(fb)和i/o块(iob)组成,由开关矩阵fastconnectii完全互连。iob提供器件的输入和输出缓冲,每个fb提供具有54个输入和18个输出的可编程逻辑的容量。该系列54个输入和18个输出的可编程逻辑的容量,该系列都是在系统可编程的,编程/擦除次数最少为1万次。cpld的延时可以预测,适合作小规模的、对时序要求严格的逻辑。设计采用图形输入方式,逻辑原理如图5所示。
下面分析该电路的工作过程。当mpc860对ds1687进行读操作时(假设读取地址0x55的数据),首先执行一条地址为0x07060000,数据为0x55的写指令:
reg8(0x07060000)=0x55
地址可根据系统定,但要保证a11=0,此时ds_rd、ds_we、ds_cs均无效。ds1687的ale信号在下降沿将ad0~ad7上的数据锁存作为地址,从ale的表达式看到,ale的下降沿正是we的上升沿,而此时ad0~ad7上的数据也正是是指令写入的数0x55,也就是ds1687在ale下降沿把0x55锁存作为地址。紧接着执行一条读取指令:
value=reg8(0x07160000)
应保证读操作地址的a11=1。由操作时序和逻辑表达式可知,此时
ale=0
ds_cs=cs5
ds_rd=oe
在ds_rd(oe)的上升沿,将0x55单元处的数据锁存进mpc860的value单元。
当mpc860对ds1687进行写操作时(假设地址为0x55,写入的数据为0xaa),需要两条写指针,第一条与读ds1687操作时相同,目的是把地址写入ds1687:
reg8(0x07060000)=0x55
第二条同样是一条写指令:
reg8(0x07160000)=0xaa
但目标地址要保证a11=1,此时接口输出的信号值为:
ale=0
ds_cs=cs5
ds_we=we
在ds_we(即we)的上升沿,将数据锁存进ds1687。
4 小结
在实际使用过程中,可以将读写ds1687分别编成一个函数,简化编程。该方法不仅适合于mpc860和ds1687的接口,也适合其它的数据地址非复用的cpu和数据地址复用的外围芯片的接口。该接口设计在bnas系统中成功使用之后,已陆续在公司其他部门得到了应用。