IIC模块的控制通过寄存器实现,在其内部结构中与模块相关的寄存器有5个,即IIC地址寄存器(IIC1A)、IIC频率分频寄存器(IIC1F)、IIC控制寄存器(IIC1C)、IIC状态寄存器(IIC1S)和IIC数据寄存器(IIC1D)。
1.IIC地址寄存器(IIC1A)
当IIC模块作为从设备时,该寄存器用于设定IIC模块的从地址,对于不同的从设备该地址不同,只有和命令中的地址相同的从设备才会响应主设备。当IIC模块处于主设备时,该寄存器忽略,IIC地址寄存器如图12-7所示。
●ADDR[7:1]:包含被IIC模块使用的从机地址。该寄存器包含7位地址方案和10位地址方案中的低7位。当IIC模块为从设备时,模块将会响应主设备的地址呼叫。
2.IIC频率分频寄存器(IIC1F)
IIC模块频率分频寄存器主要用于确定IIC模块的串行总线时钟频率。
IIC时钟频率=总线时钟/(mul×SCL分频系数) (式12-1)
式中总线频率为Hz,mul和SCL分频因子由本寄存器设定,IIC模块频率分频寄存器见图12-8。
图12-6 IIC模块内部框结构图
图12-7 IIC地址寄存器
图12-8 IIC模块频率分频寄存器
●MULT:IIC倍频因子位(IIC Multiplier Factor),定义了倍频因子(mul),mul和SCL分频系数一起确定IIC的波特率,倍频因子共有3种,如表12-1所示。
●ICR:IIC时钟速率位(IIC Clock Rate),用于总线时钟预分频。此6位定义了SCL分频系数和SDA维持时间,IIC分频因子和保持值如表12-2所示。SDA维持时间定义为从SCL的下降沿到SDA发生改变的延迟时间。维持时间的计算公式如下:
SDA维持时间=总线周期×SDA维持值 (式12-2)
式中,总线周期的单位为s。
表12-1 IIC倍频因子表
表12-2 IIC分频因子和保持值
例如:内部总线频率为4MHz,倍频因子为2(即MULT=01),要使IIC总线频率设置在100kbit/s,则代入式12-1计算。
100000=4000000/(2×SCL分频系数)
可得SCL分频系数=20,此时,ICR=0x00,SDA维持值=7。代入式12-2计算可得
SDA维持时间=(1/4000000)s×7=1.75μs。
3.IIC控制寄存器(IIC1C)
IIC控制寄存器主要用于IIC模块、中断、应答使能,以及选择主模式、从模式和发送模式等控制,是模块中较为重要的寄存器之一,IIC控制寄存器见图12-9。
图12-9 IIC控制寄存器
●IICEN:IIC模块使能位(IIC Enable)。
0:IIC模块禁用。
1:IIC模块使能。
●IICIE:IIC中断使能位(IIC Interrupt Enable)。
0:IIC中断禁止。
1:IIC中断使能。
●MST:主设备模式选择位(Master Mode Select)。在该位由0变为1时,主设备模式被选定,总线上产生一个开始(START)信号。在该位由1变为0时,IIC模块由主设备模式变为从设备模式,总线产生一个停止(STOP)信号。
0:从设备模式。
1:主设备模式。
●TX:发送模式选择位(Transmit Mode Select)。用于选择主/从设备模式下的传送方向。在主设备模式下,根据传送要求的类型确定TX位是否置位,因而对于寻址周期而言,该位将始终为高。当IIC模块作为从设备被寻址时,软件根据状态寄存器的从设备读/写标志位(SRW)选择是否将TX位置位。(www.xing528.com)
0:接收。
1:发送。
●TXAK:发送应答使能位(Transmit Acknowledge Enable)。
0:接收到一字节数据后,发送应答信号到总线上。
1:不发送应答信号。
●RSTA:重复开始位(Repeat START)。如果MCU的IIC模块是当前主设备,向该位写1将产生一个重复开始信号。读该位始终为0,在错误时间发送重复开始信号将导致仲裁失败。
4.IIC状态寄存器(IIC1S)
IIC状态寄存器用于显示IIC模块数据传输是否完成、总线忙碌和是否收到应答等当前状态,IIC状态寄存器如图12-10所示。
图12-10 IIC状态寄存器
●TCF:传输完成标志位(Transfer Complete Flag),当一字节传送完成后该位置位。注意,该位只在向IIC模块发送数据或接收数据期间或结束后片刻才有效。接收模式下读IIC1D存器或在发送模式时写IIC1D存器,均可清除该位。
0:正在传送。
1:传送完成。
●IAAS:从设备寻址位(Addressed as a Slave),当调用地址与从设备的可编程地址(由IIC1A的值和读/写位确定)匹配时,该位置位。写IIC1C寄存器将清除该位。
0:未被寻址。
1:作为从设备被寻址到。
●BUSY。总线忙标志位(Bus Busy),不管IIC模块处于主设备模式还是从设备模式,该位都表明总线的当前状态。当检测到起始信号,BUSY位置位,当检测到STOP信号时该位清除。
0:总线空闲。
1:总线忙。
●ARBL:仲裁失败标志位(Arbitration Lost),仲裁过程失败时该位将硬件置位,ARBL必须通过软件向该位写1才能清除。
0:标准总线操作。
1:仲裁失败。
●SRW:从设备读/写标志位(Slave Read/Write)。
0:从设备接收,主设备写数据到从设备。
1:从设备发送,主设备读取从设备数据。
●IICIF:IIC中断标志位(IIC Interrupt Flag),必须通过软件向该位写1才能清除。当一字节传送完毕、从地址匹配调用地址或仲裁失败这3类事件中的任意一种发生时都将置位IICIF位。
0:未产生中断。
1:产生中断。
●RXAK:接收应答位(Receive Acknowledge),该位为低表明在总线传送完一字节后收到一个应答信号;该位为高表示未收到应答信号。
0:收到应答信号。
1:未收到应答信号。
5.IIC数据寄存器(IIC1D)
IIC数据寄存器可用于暂存接收或发送数据,IIC数据寄存器如图12-11所示。
图12-11 IIC数据寄存器
●DATA:数据位(Data)。
在主设备发送模式下,如果数据写入IIC1D将开始一次数据传送,最高有效位(MSB)先被发送。在主设备接收模式,读取该寄存器开始下一字节数据接收。需要注意的是,当主设备由接收模式转为发送模式时,IIC模块应在读IIC1D前切换以避免无意中启动一次主设备接收数据传送。
在从设备模式下,当地址匹配后,IIC1D的功能和主设备模式时相同。注意,需由IIC1C寄存器中的TX位确定主/从设备模式下的数据传送方向。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。