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 %26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;——将数据寄存器中的数据 %26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;%26;#183;——及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器件的工作状态,其各位的定义为: BUSY CLKEN CLKS2 CLKS1 STA STP M/S BUSY:若该位为"1",主机作为接收机时,不发应答信号; STA:启动信号位; STP:停止信号位; M/S:主从机位,用于选择芯片工作状态(主机还是从机); CLKS1、CLKS2:频选控制位; CLKEN:SCL使能位,该位为1时SCL置高电平。状态生成器可以生成工作状态信号(中断、IIC总线竞争、从机方式时通讯开始与结束)供处理器查询[FS:PAGE]处理。
3 参数配置
该器件可以配置为从100kbps(标准)到400kbps(高速)的任何传送速度,以满足不同的需要。只需在VHDL(描述的结构体中指明配置的参数即可实现配置,非常方便。本设计只使用一片可编程芯片即可完成IIC总线接口的芯片功能。由于采用VHDL-93语言进行设计,具有良好的可移植性,可用于其它ISP厂家的产品中。通过ByteBlast下载线可以在线改变其功能,体现了CPLD中的ISP器件的优越性。