CoolRunner-Ⅱ I2C控制器寄存器
详细内容
I2C控制器寄存器基地址MBASE由VHDL代码中常量BASE ADDRESS决定,基地址为地址总线的高16位,低8位地址将决定哪一个寄存器被寻址。此I2C控制器寄存器共有如下4个。
(1)MADR:地址寄存器(地址为MBASE+$8Dh)
■Bit7~Bit1:从设备地址(R/W)。
■Bit0:保留。
(2)MBCR:控制寄存器(地址为MBASE+$8Fh)
■Bit7:EN(R/W),I2C控制器使能位。“1”使能I2C控制器,0”复位并禁止I2C控制器。在对MBCR其他位操作之前,此位必须被首先设置为“1”。
■Bit6:IEN(R/W),中断允许位。“1”允许中断,当状态寄存器的MIF位也被置位时,中断发生;0”禁止中断,但是不会清除任何当前正在申请的中断。
■Bit5:STA(R/W),主/从模式选择位。当微控制器将此位从“0”改变为“1”,在主模式下,I2C控制器将会产生一个START。清除此位,会产生一个STOP,同时I2C切换到从模式。然而,如果是由于总线仲裁失败而导致此位被清除,将不会产生STOP。
■Bit4:TX(RiW),发送/接收模式选择。“1”时,I2C主设备发送;0”时,I2C主设备接收。
● Bit3:AK(R/W),发送应答使能。此位指定在ACK阶段SDA线的值。主从接收都适用。-ACK bit=“1”,表示没有应答;-ACK bit=“0”表示应答。当主设各接收到ACK为“1”时,表示已经接收到最后一个字节,因此此位可以用来告诉主设备结束当前的传输操作。
■Bit2:RSTA (RiW),重复开始。写“1”到此位,如果CoolRunner-II I2C为当前总线控制设备,则会产生一个“重复开始”,读此位则总为“0”;如果总线被其他设备主控,则写入此位会导致总线仲裁矢败。
■Bitl~Bit0:保留。
(3)MBSR:状态寄存器(地址为MBASE+$93h)
■Bit7:MCF(R),Pc数据传输标志位。数据传输过程中,此位被清除。在ACK周期被SOL上升沿置位,且仅保持一个时钟周期。“1”表示传输完毕,“0”表示传输正在进行。
■Bit6:MAAS(R),从寻址标志位。当fc总线上地址与MADR中地址匹配时,I2C就会被作为从设各并切换到从模式,此时该位被置“1”。
■Bit5:MBB(R),总线忙标志位。当检测到START时,此位被置“1”;当检测到STOP时,此位被清“0”。
■Bit4:MAL(It/软件清除),仲裁失败标志位。I2C总线仲裁失败时被置“1”,此位可以通过uC写入“0”而清除。
■Bit3:保留。
■Bit2:SRW(R),从设备读写标志位,此位反映了主设备的读写位的值,“1”表示主设备从从设备读;“0”表示主设备写入从设备。
■Bit1:MIF(R/软仵清除),中断标志位。当有中断发生时,此位被置“1”。如果中断允许,MIEN= “1”,则会使uC产生一个中断。在中断服务程序中通过uC写入“0”进行软件清零。
■Bit0:RXAK(R)接收应答位,此位反映了SDA总线ACK阶段的值,“1”表示没有ACK;“0”表示收到ACK。
(4)MBDR:数据I/O寄存器(地址为MBASE+$95h)
8位,可读/写。数据寄存器保存的是要发送到I2C总线上的数据,或者从I2C总线上接收的数据。在物理上,这个寄存器是由两个同地址的寄存器组成的,一个用于I2C发送;另一个用于I2C接收,这种机制消除了uC和I2C控制器之间的竞争。