本读写器是通过总线复用对TDA8007的寄存器进行控制的。其中MCU的P1.5为TDA8007的片选,P0口为与之通信的8位数据线,TDA8007的各寄存器预先被宏定义的成微处理器的一个外部数据单元(下面电程序处的定义),从而方便MCU访问。下面结合TDA8007寄存器的定义和位分配,给出应用TDA8007接口芯片对IC卡进行上电激活和下电的程序。TDA8007的寄存器主要三类。第一类,通用寄存器:①卡槽选择CSR;②硬件状态HSR;③定时器TOR1、TOR2、TOR3。第二类,ISO7816串行处理寄存器:①串行状态USR;②混合状态MSR;③串行发送UTR;④串行接收URR;⑤队列控制FCR。第三类,卡专属寄存器:①可编程分频PDR;②保护时间GTR;③串行控制UCR1、UCR2;④时钟配置CCR;⑤上电控制PCR。注意:对于卡专属的寄存器,即卡接口1、卡接口2分别对应的寄存器,逻辑上具有相同的名及访问地址,因而,对不同的瞳操作,需要通过CSR选择对应的卡槽来切换卡专卡属寄存器的映射的物理空间。所以,接口设备每次从一个卡的上下电或读写转向另一卡,都需要访CSR设定对应的卡槽。对于每个寄存器的位定义不再多述,主动性者可参看TDA8007的技术文档。

5、 上下电过程及具体程序

图4为IC卡的上电时序图。要实现之,需对PCR进行写操作。其中START=PCR.0,RSTIN=PCR.2,VUP上升表示激活了TDA8007中的电压转换电路。当START置高时,只要能检测到选定卡槽中的IC卡存在,且没有TDA8007能检测到并在HSR中指示的硬件错误出现,则对应IC卡接口的VCC1或VCC2将能被提供响应的电平(5V、3V或1.8V)。随后对应卡的I/O数据线被置成高状态(Z状态),给IC卡提供设定的时钟信号,常用为3.5712MHz。大约在START置高108ETU后,RSTIN置高。因为RST为RSTIN的拷贝,则对应卡的RST被置高。然后,用TDA8007提供的定时器TOR3、TOR2设定对ATR(Answer To Request)即复位应答首字节的最大等待时间120ETU(Element Time Unit),TOC设定定时器工作方式,便开始等待ATR首字节到来后做相应处理。至此,IC卡上电激活工作完成,随后可以根据ATR字节的要求的工作方式对IC卡进行相应的读写处理。具体见上电程序。

TDA8007寄存器访问的预定义

#include

#define XXX XBYTE[0x8000]//XXX表示CSR等各寄存器上电程序如下:

P1.5=0; //片选TDA8007

CSR&=0xf8;

CSR|=ncard; //选择卡,ncard=1,2

CSR&=0xf7;

CSR|=0xf7;

CSR|=0x08; //复位UART的寄存器

UCR2&=0xf7; //异步模式,SAN=0

CCR&=0xdf; //时钟停止于低电平

UCR2|=0x60; //关闭附加中断及收发中断