USER GUIDE / PERIPHERALS / I2C / REGISTER DESCRIPTION
寄存器描述
I2C 控制寄存器
当I2C被禁用时,该寄存器才可以写入,对应于I2C_ENABLE[0]被设为0。其他时间写入无效。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:7 | Reserved | 写入无影响,读取为零。 | R |
| 6 | SLVDIS | 该位控制I2C是否禁用其从机。 0:从机启用 1:从机禁用 注意:软件应该确保如果该位写“0”,则第0位应该也要写“0”。 | RW |
| 5 | RESTART | 确定在作为主机时是否可以发送重复起始条件。 一些老的从机不支持处理重复起始条件。 0:不能 1:能 | RW |
| 4 | MATP | 该位是I2C_TAR.MATP的只读副本。 0:7位寻址 1:10位寻址 | R |
| 3 | SATP | 当作为从机时,该位控制I2C是否响应7位或10位地址。 0:7位寻址 1:10位寻址 | RW |
| 2:1 | SPEED | 这些位控制I2C的运行速度。 1:标准模式 (100 kbps) 2:快速模式 (400 kbps) 3:高速模式 (3.4Mbps) 注意:当这两位设置为2’b00 时,速度模式将会自动设置为2’b11,即高速 模式。 | RW |
| 0 | MD | 该位控制是否使能I2C主机。 0:主机不使能 1:主机使能 注意:软件应该确保如果该位写“1”,则第6位也应该写“1”。 | RW |
I2C 目标地址寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:13 | Reserved | 写入无影响,读取为零。 | R |
| 12 | I2C10BITADDR_MAST ER (MATP) | 该位控制当I2C作为主机时,是否以7位或10位寻址模式开始 其传输。 0:7位寻址 1:10位寻址 注意:该位初始设置为0。 | RW |
| 11 | SPECIAL | 该位指示软件是否执行广播呼叫或起始字节命令。 0:忽略第10位GC_OR_START,正常使用I2C_TAR。 1:执行GC_OR_START位中指定的特殊I2C命令。 注意:该位初始设置为0。 | RW |
| 10 | GC_OR_START | 如果第11位(SPECIAL)设置为1,则该位指示I2C是否执行 广播呼叫或起始字节命令。 0:广播呼叫地址—在发出广播呼叫之后,只能执行写入。 尝 试发出读命令会设置I2C_INTST寄存器的第6位 (TX_ABRT)。 I2C仍处于广播呼叫模式,直到SPECIAL 位(第11位)被清除 1:起始字节 | RW |
| 9:0 | I2C_TAR | 这是任何主机事务的目标地址。 当传送广播呼叫时,这些位 被忽略。 为了生成起始字节,CPU只需要对这些位写一次。 如果I2C_TAR和I2C_SAR相同,则存在环回,但是FIFO在主 机和从机之间共享,因此完全环回是不可行的。 只支持单方 向环回(单工),不支持双工。 主机不能发送给自己,只能 发送给从机。 | RW |
I2C 从机地址寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:10 | Reserved | 写入无影响,读取为零。 | R |
| 9:0 | I2C_SAR | 当I2C作为从机运行时,I2C_SAR保存从机地址。 对于7位寻址,只使用 了I2C_SAR[6:0]。 只有当I2C接口被禁用时,才能写入此寄存器。 其他时间写入无效 | RW |
I2C 高速模式主码地址寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:3 | Reserved | 写入无影响,读取为零。 | R |
| 2:0 | I2C_HS_MAR | I2C主码值。 高速模式主码由8位编码组成(0000_1xxx),不用于从机寻址或其他 目的。 同一I2C总线系统上最多允许8个高速模式的主控制器。 仅当I2C_ENABLE.I2CENB为0时,可写入此寄存器。 | RW |
I2C 接收/发送数据命令寄存器
这是CPU在填充发送FIFO时写入的寄存器,也是CPU从接收FIFO检索字节时读取的寄存器。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:11 | Reserved | 写入无影响,读取为零。 | R |
| 10 | RESTART | 该位控制是否在字节被发送或接收之前发送RESTART。 1:如果I2C_CON.RESTART为1,则在发送或接收字节之前发送一个 RESTART,不管传输方向是否从上一个命令发生变化; 如果 I2C_CON.RESTART为0,发出一个STOP后跟一个START。 0:如果I2C_CON.RESTART为1,只有当传输方向从上一个命令发生变化 时才发出一个RESTART; 如果I2C_CON.RESTART为0,发出一个STOP 后跟一个START。 | W |
| 9 | STOP | 该位控制是否在字节被发送或接收之后发送STOP。 1:STOP在字节之后发出,不管TX FIFO是否为空。 如果TX FIFO不为空, 主机会立即通过发出开始和总线仲裁来尝试启动一个新的传输。 0:在字节之后不发出STOP,不管TXFIFO是否为空。 如果TXFIFO不为空, 主机根据CMD位的值通过发送/接收数据字节来继续当前的传输。 如果TX FIFO为空,主机保持SCL线为低并暂停总线,直到TXFIFO中有新的命令可 用。 | W |
| 8 | CMD | 该位控制是执行读还是写,当I2C作为从机时,该位不控制方向,当它作为 主机时,它只控制方向。 1:读 0:写 当对该位进行编程时,应该记住以下内容: 在发送广播呼叫命令后尝试执行读操作会导致TX_ABRT中断 (I2C_RAW_INTR_STAT寄存器的第6位),除非I2C_TAR寄存器的第11 位(SPECIAL)已被清除。 如果在接收到RD_REQ中断后将“1”写入该位,则发生TX_ABRT中断。 | W |
| 7:0 | DATA | 该寄存器包含要在I2C总线上发送或接收的数据。 如果你正在写入此寄存器 | RW |
I2C 标准速度 SCL 高计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_SHCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O 时序。 该寄存器设置标准速度的SCL时钟高周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入 该寄存器。 其他时间写入无效。 最小有效值为6; 硬件阻止写入小于此值,如果要写,会设置为6。 | RW |
I2C 标准速度 SCL 低计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_SLCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。 该寄存器设置标准速度的SCL时钟低周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该 寄存器。 其他时间写入无效。 最小有效值为8; 硬件阻止写入小于此值,如果要写,会设置为8。 | RW |
I2C 快速 SCL 高计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_FHCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。 该寄存器设置快速的SCL时钟高周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。 其他时间写入无效。 最小有效值为6; 硬件阻止写入小于此值,如果要写,会设置为6。 | RW |
I2C 快速 SCL 低计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_FLCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。 该寄存器设置快速的SCL时钟低周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。 其他时间写入无效。 最小有效值为8; 硬件阻止写入小于此值,如果要写,会设置为8。 | RW |
I2C 高速 SCL 高计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_HHCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。 该寄存器设置高速的SCL时钟高周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。 其他时间写入无效。 最小值为6; 硬件阻止写入小于此值,如果要写,会设置为6。 | RW |
I2C 高速 SCL 低计数寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | I2C_HLCNT | 在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。 该寄存器设置高速的SCL时钟低周期计数。 只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。 其他时间写入无效。 最小值为8; 硬件阻止写入小于此值,如果要写,会设置为8。 | RW |
I2C 中断状态寄存器
该寄存器中的每一位在I2C_INTM寄存器中都有一个相应的屏蔽位。通过读取匹配的中断清除寄存器来清除这些位。这些位的未屏蔽原始版本可以在I2C_RAW_INTR_STAT寄存器中获得。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:14 | Reserved | 写入无影响,读取为零。 | R |
| 13 | MST_HOLD | 表明主设备是否占用总线,Tx_FIFO 是否为空。 | R |
| 12 | Reserved | 写入无影响,读取为零。 | R |
| 11 | IGC | 仅当接收到广播呼叫并被响应时设置。 它保持设置,直到通过禁用I2C或 CPU读取I2C_CGC寄存器的0位时被清除。 I2C将接收到的数据存储在接 收缓存中。 | R |
| 10 | ISTT | 指示在I2C接口上是否发生了START 或 RESTART条件,无论I2C是以从 机或主机模式运行。 | R |
| 9 | ISTP | 指示在I2C接口上是否发生了STOP条件,无论I2C是以从机或主机模式运 行。 | R |
| 8 | IACT | 该位捕捉I2C活动并保持设置,直到它被清除。 有四种方法可以清除它: | R |
| 7 | RXDN | 当I2C作为从机-发送器时,如果主机不响应传输的字节,该位被设置为1。 这种情况发生在传输的最后一个字节上,表明传输已经完成。 | R |
| 6 | TXABT | 该位指示作为I2C发送器的I2C是否无法完成发送FIFO内容的预期行为。这种情况可以作为I2C主机或I2C从机发生,并被称为“传输中止”。 当该位设置为1,I2C_ABTSRC寄存器表明发生传输中止的原因。 注意:每当设置该位时,I2C会刷新/重置/清空TX FIFO。TX FIFO一直处于刷新状态,直到读取寄存器I2C_CTXABT。一旦执行此读取,TX FIFO就准备从APB接口接收更多的数据字节。 | R |
| 5 | RDREQ | 当I2C作为从机,另一个I2C主机尝试从I2C读取数据时,该位被设置为1。I2C将I2C总线保持在等待状态,直到这个中断得到服务,这意味着从机已经被要求传输数据的远程主机处理。处理器必须响应这个中断,然后将所请求的数据写入到I2C_DC寄存器。在处理器读取I2C_CRXREQ寄存器之后,该位被设置为0。 | R |
| 4 | TXEMP | 当发送缓存达到或低于I2C_TXTL寄存器中设置的阈值时,该位设置为1。 当缓存量超过这个阈值,硬件会自动清除它。当I2C_ENB[0]为0,TX FIFO被刷新并保持复位。TX FIFO看起来像是它里面没有数据,所以该位设置为1,前提是主状态机或从状态机中有活动。当不再有活动时,则使用I2C_ENB[0]=0,该位设置为0。 | R |
| 3 | TXOF | 如果发送缓存填满I2C_TX_BUFFER_DEPTH,并且处理器试图通过写入I2C_DC寄存器来发出另一个I2C命令,则在发送期间设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
| 2 | RXFL | 当接收缓存达到或超过I2C_RXTL寄存器中的RX_TL阈值时进行设置。当缓存量低于该阈值时,硬件会自动清除它。 如果模块被禁用(I2C_ENB[0]=0),则RX FIFO被刷新并保持在复位状态,因此RX FIFO未满。一旦I2C_ENB[0]被设置为0,该位就被清除,无论是否有活动继续。 | R |
| 1 | RXOF | 如果接收缓存完全填满I2C_RX_BUFFER_DEPTH,并且从外部I2C设备接收到一个额外字节,则设置。I2C响应这一点,但在FIFO满后收到的任何数据字节都将丢失。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
| 0 | RXUF | 如果处理器在接收缓存为空时,试图通过从I2C_DC寄存器读取接收缓存,则设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
I2C 中断屏蔽寄存器
这些位屏蔽了它们相应的中断状态位。该寄存器低电平有效,值0屏蔽中断,而值1取消屏蔽中断。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:14 | Reserved | 写入无影响,读取为零。 | R |
| 13 | MMST_HOLD | 这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位 | RW |
| 12 | Reserved | 写入无影响,读取为零。 | R |
| 11 | MIGC | 这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位 | RW |
| 10 | MISTT | RW | |
| 9 | MISTP | RW | |
| 8 | MIACT | RW | |
| 7 | MRXDN | RW | |
| 6 | MTXABT | RW | |
| 5 | MRDREQ | RW | |
| 4 | MTXEMP | RW | |
| 3 | MTXOF | RW | |
| 2 | MRXFL | RW | |
| 1 | MRXOF | RW | |
| 0 | MRXUF | 这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位 | RW |
I2C 原始中断状态寄存器
与I2C_INTST寄存器不同,这些位没有屏蔽位,因此它们总是显示I2C的真实状态。有关这些位的详细描述,请参阅I2C_INTST。所有位都是只读的。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:14 | Reserved | 写入无影响,读取为零。 | R |
| 13 | MST_HOLD | 表明主设备是否占用总线,Tx_FIFO 是否为空。 | R |
| 12 | Reserved | 写入无影响,读取为零。 | R |
| 11 | IGC | 仅当接收到广播呼叫并被响应时设置。 它保持设置,直到通过禁用I2C或 CPU读取I2C_CGC寄存器的0位时被清除。 I2C将接收到的数据存储在接 收缓存中。 | R |
| 10 | ISTT | 指示在I2C接口上是否发生了START 或 RESTART条件,无论I2C是以从 机或主机模式运行。 | R |
| 9 | ISTP | 指示在I2C接口上是否发生了STOP条件,无论I2C是以从机或主机模式运 行。 | R |
| 8 | IACT | 该位捕捉I2C活动并保持设置,直到它被清除。 有四种方法可以清除它: | R |
| 7 | RXDN | 当I2C作为从机-发送器时,如果主机不响应传输的字节,该位被设置为1。 这种情况发生在传输的最后一个字节上,表明传输已经完成。 | R |
| 6 | TXABT | 该位指示作为I2C发送器的I2C是否无法完成发送FIFO内容的预期行为。这种情况可以作为I2C主机或I2C从机发生,并被称为“传输中止”。 当该位设置为1,I2C_ABTSRC寄存器表明发生传输中止的原因。 注意:每当设置该位时,I2C会刷新/重置/清空TX FIFO。TX FIFO一直处于刷新状态,直到读取寄存器I2C_CTXABT。一旦执行此读取,TX FIFO就准备从APB接口接收更多的数据字节。 | R |
| 5 | RDREQ | 当I2C作为从机,另一个I2C主机尝试从I2C读取数据时,该位被设置为1。I2C将I2C总线保持在等待状态,直到这个中断得到服务,这意味着从机已经被要求传输数据的远程主机处理。处理器必须响应这个中断,然后将所请求的数据写入到I2C_DC寄存器。在处理器读取I2C_CRXREQ寄存器之后,该位被设置为0。 | R |
| 4 | TXEMP | 当发送缓存达到或低于I2C_TXTL寄存器中设置的阈值时,该位设置为1。 当缓存量超过这个阈值,硬件会自动清除它。当I2C_ENB[0]为0,TX FIFO被刷新并保持复位。TX FIFO看起来像是它里面没有数据,所以该位设置为1,前提是主状态机或从状态机中有活动。当不再有活动时,则使用I2C_ENB[0]=0,该位设置为0。 | R |
| 3 | TXOF | 如果发送缓存填满I2C_TX_BUFFER_DEPTH,并且处理器试图通过写入I2C_DC寄存器来发出另一个I2C命令,则在发送期间设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
| 2 | RXFL | 当接收缓存达到或超过I2C_RXTL寄存器中的RX_TL阈值时进行设置。当缓存量低于该阈值时,硬件会自动清除它。 如果模块被禁用(I2C_ENB[0]=0),则RX FIFO被刷新并保持在复位状态,因此RX FIFO未满。一旦I2C_ENB[0]被设置为0,该位就被清除,无论是否有活动继续。 | R |
| 1 | RXOF | 如果接收缓存完全填满I2C_RX_BUFFER_DEPTH,并且从外部I2C设备接收到一个额外字节,则设置。I2C响应这一点,但在FIFO满后收到的任何数据字节都将丢失。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
| 0 | RXUF | 如果处理器在接收缓存为空时,试图通过从I2C_DC寄存器读取接收缓存,则设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。 | R |
I2C 接收 FIFO 阈值寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | RXTL | 接收FIFO阈值。 控制触发RXFL中断的数据量。 有效范围为0-63。 值n设置n+1的阈值,例如:值0设置1的阈值,值63设置64的阈值。 | RW |
I2C 发送 FIFO 阈值寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | TXTL | 发送FIFO阈值。 控制触发TXEMP中断的数据量。 有效范围为0-64。 值n设置n的阈值,例如:值0设置0的阈值,值64设置64的阈值。 | RW |
I2C 清除组合和单个中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CINT | 读该寄存器以清除组合中断、所有单独中断和I2C_ABTSRC寄存器。 该 位不清除硬件可清除的中断,而是清除软件可清除的中断。 有关清除 I2C_ABTSRC的例外情况,请参阅I2C_ABTSRC寄存器的第9位。 | R |
I2C 清除 RXUF中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CRXUF | 读该寄存器以清除I2C_INTST寄存器的RXUF中断(第0位)。 | R |
I2C 清除 RXOF 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CRXOF | 读该寄存器以清除I2C_INTST寄存器的RXOF中断(第1位)。 | R |
I2C 清除 TX_OVER中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CTXOF | 读该寄存器以清除I2C_INTST寄存器的TX_OVER中断(第3位)。 | R |
I2C 清除 RDREQ 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CLRDREQ | 读该寄存器以清除I2C_INTST寄存器的RDREQ中断(第5位)。 | R |
I2C 清除 TX_ABRT 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CTXABT | 读该寄存器以清除I2C_INTST寄存器的TX_ABRT中断(第6位)。 这也可以将TXFIFO从刷新/重置中释放出来,允许对TXFIFO进行更多的写 入。 有关清除I2C_ABTSRC的例外情况,请参阅I2C_ABTSRC寄存器的第9位。 | R |
I2C 清除 RX_DONE 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CRXDN | 读该寄存器以清除I2C_INTST寄存器的RX_DONE中断(第7位)。 | R |
I2C 清除 ACTIVITY 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CACT | 如果I2C不再处于活动状态,读该寄存器将清除ACTIVITY中断。 如果I2C在总线上仍处于活动状态,则继续设置ACTIVITY中断位。 如果模块被禁用,并且总线上没有进一步的活动,它会由硬件自动清除。 从该寄存器读取的值以获取I2C_INTST寄存器的ACTIVITY中断(第8位) 的状态。 | R |
I2C 清除 STOP中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CSTP | 读该寄存器以清除I2C_INTST寄存器的STOP中断(第9位)。 | R |
I2C 清除 START 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CSTT | 读该寄存器以清除I2C_INTST寄存器的START中断(第10位)。 | R |
I2C 清除 GEN_CALL 中断寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | CGC | 读该寄存器以清除I2C_INTST寄存器的GEN_CALL中断(第11位)。 | R |
I2C 使能寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:2 | Reserved | 写入无影响,读取为零。 | R |
| 1 | ABORT | 设置后,控制器将启动传输中止。 0:ABORT未启动或ABORT已完成 1:ABORT操作正在进行 软件可以通过设置该位,中止主机模式下的I2C传输。 只有当ENABLE已经设置时,软件才能设置该位; 否则,控制器将忽 略任何对ABORT的写入。 一旦设置,软件无法清除ABORT位。 为了响应ABORT,控制器在完成当前传输后发出STOP并刷新Tx FIFO,然后在中止操作后设置TX_ABORT中断。 ABORT位在中止操作后自动清除。 | RW |
| 0 | I2CENB | 控制是否启用I2C。 0:禁用I2C(TX和RX FIFO保持在擦除状态) | RW |
I2C 状态寄存器
这是一个只读寄存器,用于指示当前的传输状态和FIFO状态。状态寄存器可以随时读取。该寄存器中的所有位都不会请求中断。 当通过在I2C_ENABLE寄存器的0位写0,禁用I2C时:
— 位1和位2设置为1
— 位3和位4设置为0
当主机或从机状态机进入空闲,并且I2C_ENABLE[0]=0时:
— 位5和位6设置为0
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:7 | Reserved | 写入无影响,读取为零。 | R |
| 6 | SLVACT | 从机FSM激活状态。 0:从机FSM处于空闲状态,因此I2C的从机部分未激活 1:从机FSM未处于空闲状态,因此I2C的从机部分处于激活状态 | R |
| 5 | MSTACT | 主机FSM激活状态。 0:主机FSM处于空闲状态,因此I2C的主机部分未激活 1:主机FSM未处于空闲状态,因此I2C的主机部分处于激活状态 | R |
| 4 | RFF | 接收FIFO完全满。 当接收FIFO完全满时,设置该位。当接收FIFO包含一个或多个空位置时,该位被清除。 0:接收FIFO未满 1:接收FIFO满 | R |
| 3 | RFNE | 接收FIFO非空。 当接收FIFO包含一个或多个数据时,设置该位;当接收FIFO为空时,该位被清除。 0:接收FIFO为空 1:接收FIFO非空 | R |
| 2 | TFE | 发送FIFO完全空。 当发送FIFO完全空时,设置该位。当发送FIFO包含一个或多个有效的数据时,该位被清除。该位不请求中断。 0:发送FIFO非空。 1:发送FIFO为空。 | R |
| 1 | TFNF | 发送FIFO未满。 当发送FIFO包含一个或多个空位置时,设置该位,且在FIFO为满时清除。 0:发送FIFO为满 1:发送FIFO未满 | R |
| 0 | ACT | I2C激活状态。 | R |
I2C 发送 FIFO Level 寄存器
该寄存器包含发送FIFO缓存中有效数据的数量,在以下情况它将被清除:
—I2C被禁用
— 传输中止,即在I2C_RAW_INTR_STAT寄存器中设置TX_ABRT位
— 从机批量传输模式被中止
当数据被放入发送FIFO时,该寄存器递增,当从发送FIFO取数据时,该寄存器递减。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:6 | Reserved | 写入无影响,读取为零。 | R |
| 5:0 | TXFLR | 包含发送FIFO中有效数据的数量 | R |
I2C 接收 FIFO Level 寄存器
该寄存器包含接收FIFO缓存中有效数据的数量,在以下情况它将被清除:
—I2C被禁用
— 每当由I2C_ABTSRC寄存器中追踪的任何事件导致传输中止时,只要将数据放入接收FIFO,
该寄存器就会递增,当从接收FIFO取数据时,该寄存器就会递减。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:6 | Reserved | 写入无影响,读取为零。 | R |
| 5:0 | RXFLR | 包含接收FIFO中有效数据的数量 | R |
I2C SDA保持时间寄存器
该寄存器以APB 时钟周期为单位,在主机和从机模式下控制SDA信号在SCL负边沿后的保持时间。 编程的值必须大于每个模式下要实现的值的最小保持时间—主机模式下一个周期,从机模式下七个周期。只有当I2C_ENABLE[0]=0时,才能成功写入此寄存器。 已编程的 SDA 保持时间在任何时候都不能超过 SCL 低部分的持续时间。因此,编程值不能大于 N_SCL_LOW-2,其中N_SCL_LOW是以APB时钟周期测量的SCL周期低部分的持续时间。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | SDAHD | I2C 保持时间。 以APB时钟周期为单位设置所需的SDA保持时间。 | RW |
I2C 传输中止源寄存器
该寄存器有32位,表示TX_ABRT位的来源。除了第9位外,每当读取I2C_CTXABT寄存器和I2C_CINT 寄存器时,该寄存器将被清除。要清除第9位,必须首先固定SBYTE_NORSTRT的源;必须启用RESTART (I2C_CON[5]=1),必须清除 SPECIAL 位(I2C_TAR[11]),或者必须清除 GC_OR_START 位 (I2C_TAR[10])。一旦SBYTE_NORSTRT的源被固定,那么就可以以与该寄存器中其他位相同的方式清除该位。如果在尝试清除该位之前没有固定SBYTE_NORSTRT的源,则第9位会清除一个周期,然后重新断言。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:24 | TX_FLUSH_CNT | 该字段保留最后一个TX_ABRT事件之前的TXFLR的 值,当I2C被禁用时,它被清除。 | R |
| 23:17 | Reserved | 写入无影响,读取为零。 | R |
| 16 | USER_ABRT | 该位仅限于主机模式。 主机已检测到传输中止。 | R |
| 15 | SLVRD_INTX | 1:当处理器端响应从机模式请求,将数据传输到远程主 机时,用户在I2C_DC寄存器的CMD(位8)中写1。 | R |
| 14 | SLV_ARBLOST | 1:从机向远程主机传输数据时丢失数据,同时设置 I2C_ABTSRC[12]。 注意:即使从机从不“占用”总线,总线上也可能出现问 题。 这是一个故障安全检查。 例如,在SCL从低到高 转换的数据传输期间,如果数据总线上的内容不是应 该传输的内容,则I2C不再占用总线。 | R |
| 13 | SLVFLUSH_TXFIFO | 1:从机接收到读取命令,并且TX FIFO中存在一些数据,因此从机发出TX_ABRT中断以刷新TX FIFO中的旧数据。 复位值:0x0。 | R |
| 12 | ARB_LOST | 1:主机丢失仲裁,或者如果I2C_ABTSRC[14]也被设置,则从机发送器丢失仲裁。 复位值:0x0。 | R |
| 11 | ABRT_MASTER_DIS | 1:用户尝试在禁用主机模式的情况下启动主机操作。 复位值:0x0。 | R |
| 10 | ABRT_10B_RD_NORSTRT | 1:禁用重启(RESTART位(I2C_CON[5])=0)并且主机以10位寻址模式发送读取命令。 复位值:0x0。 | R |
| 9 | SBYTE_NORSTRT | 要清除第9位,必须首先固定SBYTE_NORSTRT的源;必须启用RESTART(I2C_CON[5]=1),必须清除SPECIAL位(I2C_TAR[11]),或者必须清除GC_OR_START位(I2C_TAR[10])。一旦SBYTE_NORSTRT的源被固定,那么就可以以与该寄存器中其他位相同的方式清除该位。如果在尝试清除该位之前没有固定SBYTE_NORSTRT的源,则第9位会清除一个周期,然后重新断言。 1:重启被禁用(RESTART位(I2C_CON[5])),并且用户正在尝试发送一个起始字节。 复位值:0x0。 | R |
| 8 | ABRT_HS_NORSTRT | 1:重启被禁用(RESTART位(I2C_CON[5])),并且用户正在尝试使用主机在高速模式下传输数据。 复位值:0x0。 | R |
| 7 | SBYTE_ACKDET | 1:主机已发送一个起始字节,且起始字节被响应(错误行为)。 复位值:0x0。 | R |
| 6 | ABRT_HS_ACKDET | 1:主机处于高速模式,且高速主机码被响应(错误行为)。 复位值:0x0。 | R |
| 5 | ABRT_GCALL_READ | 1:I2C在主机模式下发送一个广播呼叫,但是用户将广播呼叫之后的字节编程为从总线读取(I2C_DC[9]设置为1)。 复位值:0x0。 | R |
| 4 | ABRT_GCALL_NOACK | 1:I2C在主机模式下发送一个广播呼叫,但是在总线上没有从机响应该广播呼叫。 复位值:0x0。 | R |
| 3 | ABRT_TXDATA_NOACK | 1:该位仅限于主机模式。主机已接收且响应地址,但当它在地址之后发送数据字节时,没有收到来自远程从机的响应。 复位值:0x0。 | R |
| 2 | ABRT_10ADDR2_NOACK | 1:主机处于10位寻址模式,且该10位寻址的第二个地址字节没有被任何从机响应。 复位值:0x0。 | R |
| 1 | ABRT_10ADDR1_NOACK | 1:主机处于10位寻址模式,且第一个10位地址字节没有被任何从机响应。 复位值:0x0。 | R |
| 0 | ABRT_7B_ADDR_NOACK | 1:主机处于7位寻址模式,且所发送的地址没有被任何从机响应。 复位值:0x0。 | R |
I2C DMA 控制寄存器
该寄存器用于使能DMA控制器接口操作。有一个单独的位用于发送和接收。无论I2C_ENABLE的状态如何,都可以对其进行编程。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:2 | Reserved | 写入无影响,读取为零。 | R |
| 1 | TDEN | 发送DMA使能。 该位启用/禁用发送DMA通道。 0:发送DMA禁用 | RW |
| 0 | RDEN | 接收DMA使能。 该位启用/禁用接收DMA通道。 0:接收DMA禁用 1:接收DMA启用 复位值:0x0。 | RW |
I2C DMA 发送数据 Level 寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:6 | Reserved | 写入无影响,读取为零。 | R |
| 5:0 | TDLR | DMA发送数据量。 该位控制由发送逻辑发出DMA请求的数据量。 当发送FIFO中的有效数据量 等于或低于该字段值时,生成dma_tx_req 信号。 | RW |
I2C DMA 接收数据 Level 寄存器
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:6 | Reserved | 写入无影响,读取为零。 | R |
| 5:0 | RDLR | DMA接收数据量。 | RW |
I2C SDA建立寄存器
当I2C在从机—发送器操作中处理一个读请求时,该寄存器控制在SCL上升沿中引入的相对于SDA变化的时间延迟量(根据APB时钟周期的数量)。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | SDASU | SDA建立。 建议如果要求的时间为1000ns,那么对于一个APB时钟频率为 10MHz,I2C_SDASU应编程为值11。 | RW |
I2C 响应广播呼叫寄存器
该寄存器控制I2C在接收到I2C广播呼叫地址时是用ACK还是NACK响应。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | ACKGC | 响应广播呼叫。 当设置为1时,I2C在收到一个广播呼叫时使用一个ACK 进行响应。 当设置为0,I2C不产生广播呼叫中断。 | RW |
I2C 使能状态寄存器
当I2C_ENABLE[0]设置从1到0时,也就是说I2C被禁用时,该寄存器用于报告I2C硬件状态。 如果I2C_ENABLE[0]已被设置为1,则2:1位强制为0,0位强制为1。 如果I2C_ENABLE[0]已被设置为0,则2:1位仅在0位被读取为“0”时才有效。 当I2C_ENABLE[0]被设置为0时,由于禁用I2C取决于I2C总线活动,因此0位被读取为0时会发生延迟。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:3 | Reserved | 写入无影响,读取为零。 | R |
| 2 | SLVRDLST | 从机接收到的数据丢失。 该位表示由于I2C_ENABLE[0]从1设置为0,从 I2C传输中接收到至少一个数据字节后,从机—接收器操作是否中止。 当 读作为1时,I2C被视为已主动参与中止的I2C传输(具有匹配地址),且 已进入I2C传输的数据阶段,即使数据字节已以NACK响应。 注意: 1.如果远程I2C主机在I2C有机会不响应传输之前以停止条件中止传输,并 且I2C_ENABLE[0]已设置为0,则该位也设置为1。 当读取为0时,I2C被 视为已禁用,而没有主动参与从机—接收器传输的数据阶段。 2.当I2C_ENABLE[0]被读取为0时,CPU可以安全的读取此位。 复位值:0x0。 | R |
| 1 | SLVDISB | 忙时禁用从机(发送,接收)。 该位指示是否由于将I2C_ENABLE寄存器 的0位从1设置为0而中止了潜在的或活动的从机操作。 当CPU向 I2C_ENABLE寄存器的第0位写入0,同时:(a)I2C正在接收来自远程主 | R |
| 0 | I2CEN | 当读作1,I2C被视为处于使能状态; 当读作0,I2C被视为完全未激活。 | R |
I2C 快速模式滤波寄存器
该寄存器用于存储在标准模式或快速模式下运行时,由峰值抑制逻辑过滤出的最长峰值的持续时间(以 APB时钟周期为单位)。这个寄存器必须用最小值1进行编程。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | FS_SPKLEN | 该寄存器设置由峰值抑制逻辑过滤出的SCL或SDA线路中最长峰值的持 续时间(以I2C设备时钟周期为单位)。 只有当I2C接口被禁用时,才能写入该寄存器,在其他时间写入无效。 最小有效值为1; 硬件阻止写入小于此值,如果尝试,将设置为1。 | RW |
I2C 高速模式滤波寄存器
该寄存器用于存储在高速模式下运行时,由峰值抑制逻辑过滤出的最长峰值的持续时间(以APB时钟周期为单位)。这个寄存器必须用最小值1进行编程。
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | HS_SPKLEN | 该寄存器设置由峰值抑制逻辑过滤出的SCL或SDA线路中最长峰值的持 续时间(以I2C设备时钟周期为单位)。 只有当I2C接口被禁用时,才能写入该寄存器,在其他时间写入无效。 最小有效值为1; 硬件阻止写入小于此值,如果尝试,将设置为1。 | RW |