2 ISP的逻辑实现
基于IIC总线的数据传输规范,为完成IIC总线的数据发送与接收,采用ISP器件实现通讯接口的逻辑功能框图如图2所示。通过频选、控制、可控时钟可获得100kHz、200kHz、300kHz、400kHz的时钟频率。器件退出总线竞争后,时钟线置高电平。
2.1 通讯的启动与停止
在主机方式下,接收数据时,ISP器件必须通过启动信号生成器送出一个启动信号,然后发送从机的地址信号和读写信号。只有这样,才能在总线上发送数据。该过程由控制寄存器启动。VHDL描述如下:
PROCESS(WR,CS)
——WR IS CPU WRITE SIGNAL
——CS IS THIS CHIP‘S SELECT SIGNAL ADDRS:=‘0‘;
IF(Ctrreg(0)=‘1‘AND Ctrreg(3)=‘1‘ AND SCL1=‘1‘)THEN
——Ctrreg 为控制寄存器
CLK1COUNT:=‘0‘;
SDA1:=‘1‘;
IF(CLK1 EVENT AND CLK=‘0‘)THEN
IF(CLK1COUNT=‘3‘)THEN
SDA1:=‘1‘;
ADDRS:=‘1‘;
Ctrreg(3):=‘0‘;
CSTA:=‘1‘;
ELSE
CLK1COUNT:=CLK1COUNT+1;
END IF;
END IF;
END IF;
IF(ADDRS=‘1‘AND SCL1 ‘EVENT AND SCL1=‘1‘)THEN
························——将数据寄存器中的数据
························——及WR信号移位发出(略)
END IF;
END PROCESS;
当一次通讯结束时,主机要发送停止信号。该过程同样同控制寄存器控制;当控制字第二位为‘1‘时,ISP器件产生停止信号。VHDL描述与启动类似。
2.2 发送数据
在主机方式下,完成启动和地址信号发送后即开始发送数据。发送数据时并串转换器在SCL的下降沿移位,保证SCL高电平时SDA上的数据稳定。发送的进程由WR信号和从机的应答信号启动。
当ISP器件在总线竞争失败时,由处理器将ISP器件转为从机工作方式,处理器向地址检测电路送该器件在系统中的地址。只有在接收到的地址信息与该器件所设的地址相同时,才发出应答信号,开始通讯。每发送一个字节即将SDA拉高,等待接收机的应答信号,准备下一个数据。
2.3 接收数据
在主机方式下,完成通讯启动和地址信号发送后便开始准备接收数据。每接收一个字节后要发出应答信号,产生一个负脉冲作为中断请求信号输出给处理器。若此时系统忙,则拉低SCL电平迫使发送机进入等待状态。从机方式下的接收与主机方式下一样。VHDL描述如下:
PROCESS(SDA1)
SACK:=‘0‘;
FULL1:=‘0‘;
STP:=‘0‘;
INTQ:=‘1‘;
IF(CSTA=‘1‘ AND ADDOK=‘1‘)THEN
IF(SCL‘1‘EVENT AND SCL1=‘0‘)THEN
……——接收数据,串入并出移位(略)
FULL1:=‘1‘;
END IF;
END IF;
IF(FULL1=‘1‘)THEN
IF(RD‘EVENT AND RD=‘1‘AND
SCL1‘EVENT AND SCL1=‘0 AND
BUSY=‘0‘)THEN
SDA1:=‘0‘;
FULL:=‘0‘;
INTQ:=‘0‘;
ELSE
SDA1:=‘1‘;
IF(CLK1‘EVENT AND CLK=‘0‘ AND FULL1=‘0‘)THEN
IF(CLK1COUNT‘20‘)THEN
INTQ:=‘1‘;
CLK1COUNT:=‘0‘;
ELSE
CLK1COUNT:=CLK1COUNT+1;
END IF;
END IF;
IF(SLAVE=‘1‘ AND SCL=‘1‘ AND SDA ‘EVENT AND SDA=‘1‘)THEN
STP:=‘1‘;
CSTA:=‘0‘;
END IF;
END IF;
END PROCESS;
2.4 总线仲裁
在通讯过程中,ISP器件在发送数据的同时接收总线上的数据,将该数据与已送的数据进行比较,若不相同则置位状态发生器的SLAVE,表示该主机退出竞争。通过处理给控制寄存器发送控制字可以让ISP器件转入从机工作方式。这时启动地址检测,禁止SCL的发送。在一次通讯结束后,将状态生成器的END置位,此时处理器可以再次将ISP器件设置为主机方式。
2.5 控制寄存器与状态生成器
控制寄存器主要是定义ISP器件的工作状态,其各位的定义为: