GPIB接口专用芯片TNT4882_接口电路论文
关键词:gpib 接口 tnt4882
1 概述
tnt4882是美国ni公司的一款单芯片、高速、听/讲功能的兼备的gpib(general purpose interface bus)接口专用芯片。它内部集成了turbo488(高速传输电路)以及nat4882(ieee488.2兼容电路),并拥有诸多新的特性,能够兼容ansi ieee standard 488.1和ansi ieee standard 488.2规范,因而可以为gpib系统提供一套完整的解决方案。为了达到更高的传输速率。tnt4882采用了单芯片fifo缓存电路设计,其内置的16个增强型ieee 488.1兼容收发器可以直接连接gpib总线,以实现hs488传输模式(一种新的gpib高速传输模式)。在兼容性方面,它与以往使用的μpd7210、tms9914a中的寄存器设置完全兼容,用户可以将以前所用的代码直接移植到tnt4882上。同时,它所包含的turbo488电路及其诸多新特性也可以在一定程度上减少软件的开销。另外,tmt4882还具有灵活的cpu接口,可以方便地连接各种16位或8位微处理器,并将cpu发出的消息和信号转化成相应的gpib消息和信号,以使实现gpib设备和cpu及内存之间的通信。
图1 双芯片模式结构框图
2 内部结构和外围时钟电路
2.1 tnt4882的内部结构
tnt4882的内部结构以其工作模式的不同而有所不同。工作模式可分为单芯片模式和双芯片模式两种,而双芯片模式又可分为turbo+7210模式和turbo+9914模式。工作模式的选择和转换由寄存器的设置来决定,不同的工作模式决定着fifo与gpib的连接方式、寄存器的状态和访问属性。
在双芯片工作模式下,nat4882相当于μpd7210(turbo+7210模式)或tms9914a(turbo+9914模式),但功能更加强大。此时的结构及工作过程如图1所示。当前gpib写数据时,cpu首先将数据写入tnt4882的fifo里,并由传输状态机将数据从fifo传至nat4882电路,再由nat4882电路将数据传送至gpib上;而当从gpib上读数据时,过程则正好相反。
在单芯片工作模式下,fifo可直接与gpib相连而不需要传输状态机,其结构如图2所示。此时,tnt4882中寄存器的设置与turbo+7210模式类似。
由于单芯片模式采用的是最简单且最快速的结构,且是ni公司推荐的tnt4882工作模式,因此,本文主要讨论这种模式。
2.2 外围时钟电路
tnt4882工作时需要40mhz的驱动时钟,产生时钟信号的方法有两种:一是采用40mhz的cmos晶振,将晶振的输出接至tnt4882的xtali管脚,并将xtalo管脚悬空;二是采用如图3所示的外围时钟电路。
图2 单芯片模式结构框图 图3 tnt4882外围时钟电路
3 寄存器简介
tnt4882内部寄存器的数量和种类都很多,而且在不同的工作模式下,寄存器的情况又不尽相同。本文只对单芯片模式以及与最基本的gpib操作有关的一些寄存器进行简要地介绍。
需要注意的是,tnt4882内部的寄存器都是8位的。所以,每个寄存器的控制字也必须是8位。寄存器的地址通常是tnt4882的基地址加上各个寄存器所对应的偏移量。tnt4882的基地址由硬件电路决定,而每个寄存器对应的偏移量则是固定的,其范围从0至0x1f。寄存器有三种类型:只读、只写和读/写。表1列出了一些比较重要的寄存器类型。
表1 tnt4882的部分寄存器
寄存器 | 缩写 | 偏移量 | 类 型 |
命令寄存器 | cmdr | 1c | 只写 |
辅助模式寄存器 | auxmr | 0a | 只写 |
连续轮询模式寄存器 | spmr | 06 | 只写 |
握手选择寄存器 | hssel | 0d | 只写 |
高速使能寄存器 | hier | 13 | 只写 |
多功能寄存器 | misc | 15 | 只写 |
地址模式寄存器 | admr | 08 | 只写 |
地址寄存器 | adr | 0c | 只写 |
中断寄存器0 | imr0 | 1d | 只写 |
中断寄存器1 | imr1 | 02 | 只写 |
配置寄存器 | cfg | 10 | 只写 |
总线控制寄存器 | bcr | 1f | 只写 |
总线状态寄存器 | bsr | 1f | 只读 |
地址状态寄存器 | adsr | 08 | 只读 |
fifo缓存a | fifoa | 19 | 读/写 |
fifo缓存b | fifob | 18 | 读/写 |
计数寄存器0 | cnt0 | 14 | 读/写 |
计数寄存器1 | cnt1 | 16 | 读/写 |
计数寄存器2 | cnt2 | 09 | 读/写 |
计数寄存器3 | cnt3 | 0b | 读/写 |
4 软件编程
tnt4882是一种需要软件编程的集成电路。其内部各个寄存器的状态决定或标志着芯片及gpib的工作状态。在gpib接口设计中,只有通过编程对寄存器进行正确设备,才能实现对gpib的各种操作。以下是编程的基本思路和注意事项。
4.1 芯片初始化
最典型的初始化程序需完成以下工作:
(1)复位tnt4882器件中的turbo488电路;
(2)将tnt4882设置成turbo+7210模式;
(3)将tnt4882设置成单片机模式;
(4)使local power-on信号有效;
(5)配置tnt4882以为gpib操作作准备,其具体任务是设置tnt4882的gpib地址、设置初始串行轮询响应、设置初始并行轮询响应、清除或设定中断、设置gpib握手参数等。
(6)清除local power-on信号,开始gpib操作。
上述工作只是编程时考虑实现各种功能的基本原则,设计得可以根据自己的实际需要,对tnt4882进行适当的编程,而没有必要完成每种功能的设置。
4.2 gpib数据传输
用tnt4882进行gpib数据传输时,需经历初始化、数据传输和传输终止三个阶段,传输初始化步骤如下:
(1)正确设置tnt4882的地址模式。在gpib写操作之前,应将tnt4882设置成讲状态;而在gpib读操作之前,要将tnt4882设置成听状态;
(2)清空fifo,为数据传输作准备;
(3)向配置寄存器中写入正确的控制字以设定传输参数;
(4)将欲传输字符个数的二进制补码写入计数寄存器;
(5)如果需要的话,可以设置dma参数并使用dma方式进行传输;
(6)根据需要,合理设置或清除中断;
(7)向tnt4882发送传输命令。
在传输初始化完成之后,就可以在系统内存和gpib之间传输数据了。此时,所要考虑的只是如何协调内存和fifo间的工作,而tnt4882会自动管理fifo与gpib间的数据传输。通常可以选择两种传输方式:dma方式和程序控制方式。若使用dma方式,则必须在传输初始化时对tnt4882进行正确设定。如果使用程序控制方式,则需设计控制程序来对数据传输进行管理。控制程序的基本流程如图4所示。
当数据传输终止时,还应进行以下几步操作:
(1)向tnt4882发送停止命令;
(2)若使用了dma方式,还需禁止外部的dma控制器;
(3)清除所有的中断设置。
5 结束语
使用tnt4882时,除了要求外接一个40mhz的外部时钟以外,几乎不需要其它任何辅助电路,因而大大简化了接口电路的设计和开发。通过笔者的实验证明:tnt4882是一款廉价的、高性能的gpib接口专用芯片,是gpib接口设计的理想选择。