USER GUIDE / PERIPHERALS / I2C / REGISTER DESCRIPTION

寄存器描述

I2C 控制寄存器

当I2C被禁用时,该寄存器才可以写入,对应于I2C_ENABLE[0]被设为0。其他时间写入无效。

I2C_CONBASE + 0x0000
Bit313029282726252423222120191817161514131211109876543210
字段ReservedSLVDISRESTARTMATPSATPSPEEDMD
RST00000000000000000000000001111111
位名称说明RW
31:7Reserved写入无影响,读取为零。
R
6SLVDIS该位控制I2C是否禁用其从机。
0:从机启用 1:从机禁用 注意:软件应该确保如果该位写“0”,则第0位应该也要写“0”。
RW
5RESTART确定在作为主机时是否可以发送重复起始条件。
一些老的从机不支持处理重复起始条件。
0:不能 1:能
RW
4MATP该位是I2C_TAR.MATP的只读副本。
0:7位寻址 1:10位寻址
R
3SATP当作为从机时,该位控制I2C是否响应7位或10位地址。
0:7位寻址 1:10位寻址
RW
2:1SPEED这些位控制I2C的运行速度。
1:标准模式 (100 kbps) 2:快速模式 (400 kbps) 3:高速模式 (3.4Mbps) 注意:当这两位设置为2’b00 时,速度模式将会自动设置为2’b11,即高速 模式。
RW
0MD该位控制是否使能I2C主机。
0:主机不使能 1:主机使能 注意:软件应该确保如果该位写“1”,则第6位也应该写“1”。
RW

I2C 目标地址寄存器

I2C_TARBASE + 0x0004
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C10BITADDR_MAST ER (MATP)SPECIALGC_OR_STARTI2C_TAR
RST00000000000000000001000001010101
位名称说明RW
31:13Reserved写入无影响,读取为零。
R
12I2C10BITADDR_MAST ER (MATP)该位控制当I2C作为主机时,是否以7位或10位寻址模式开始 其传输。
0:7位寻址 1:10位寻址 注意:该位初始设置为0。
RW
11SPECIAL该位指示软件是否执行广播呼叫或起始字节命令。
0:忽略第10位GC_OR_START,正常使用I2C_TAR。
1:执行GC_OR_START位中指定的特殊I2C命令。
注意:该位初始设置为0。
RW
10GC_OR_START如果第11位(SPECIAL)设置为1,则该位指示I2C是否执行 广播呼叫或起始字节命令。
0:广播呼叫地址—在发出广播呼叫之后,只能执行写入。
尝 试发出读命令会设置I2C_INTST寄存器的第6位 (TX_ABRT)。
I2C仍处于广播呼叫模式,直到SPECIAL 位(第11位)被清除 1:起始字节
RW
9:0I2C_TAR这是任何主机事务的目标地址。
当传送广播呼叫时,这些位 被忽略。
为了生成起始字节,CPU只需要对这些位写一次。
如果I2C_TAR和I2C_SAR相同,则存在环回,但是FIFO在主 机和从机之间共享,因此完全环回是不可行的。
只支持单方 向环回(单工),不支持双工。
主机不能发送给自己,只能 发送给从机。
RW

I2C 从机地址寄存器

I2C_SARBASE + 0x0008
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_SAR
RST00000000000000000000000001010101
位名称说明RW
31:10Reserved写入无影响,读取为零。
R
9:0I2C_SAR当I2C作为从机运行时,I2C_SAR保存从机地址。
对于7位寻址,只使用 了I2C_SAR[6:0]。
只有当I2C接口被禁用时,才能写入此寄存器。
其他时间写入无效
RW

I2C 高速模式主码地址寄存器

I2C_HS_MADDRBASE + 0x000C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_HS_MAR
RST00000000000000000000000000000001
位名称说明RW
31:3Reserved写入无影响,读取为零。
R
2:0I2C_HS_MARI2C主码值。
高速模式主码由8位编码组成(0000_1xxx),不用于从机寻址或其他 目的。
同一I2C总线系统上最多允许8个高速模式的主控制器。
仅当I2C_ENABLE.I2CENB为0时,可写入此寄存器。
RW

I2C 接收/发送数据命令寄存器

这是CPU在填充发送FIFO时写入的寄存器,也是CPU从接收FIFO检索字节时读取的寄存器。

I2C_DCBASE + 0x0010
Bit313029282726252423222120191817161514131211109876543210
字段ReservedRESTARTSTOPCMDDATA
RST00000000000000000000000000000000
位名称说明RW
31:11Reserved写入无影响,读取为零。
R
10RESTART该位控制是否在字节被发送或接收之前发送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
9STOP该位控制是否在字节被发送或接收之后发送STOP。
1:STOP在字节之后发出,不管TX FIFO是否为空。
如果TX FIFO不为空, 主机会立即通过发出开始和总线仲裁来尝试启动一个新的传输。
0:在字节之后不发出STOP,不管TXFIFO是否为空。
如果TXFIFO不为空, 主机根据CMD位的值通过发送/接收数据字节来继续当前的传输。
如果TX FIFO为空,主机保持SCL线为低并暂停总线,直到TXFIFO中有新的命令可 用。
W
8CMD该位控制是执行读还是写,当I2C作为从机时,该位不控制方向,当它作为 主机时,它只控制方向。
1:读 0:写 当对该位进行编程时,应该记住以下内容: 在发送广播呼叫命令后尝试执行读操作会导致TX_ABRT中断 (I2C_RAW_INTR_STAT寄存器的第6位),除非I2C_TAR寄存器的第11 位(SPECIAL)已被清除。
如果在接收到RD_REQ中断后将“1”写入该位,则发生TX_ABRT中断。
W
7:0DATA该寄存器包含要在I2C总线上发送或接收的数据。
如果你正在写入此寄存器
RW

I2C 标准速度 SCL 高计数寄存器

I2C_SHCNTBASE + 0x0014
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_SHCNT
RST00000000000000000000000110010000
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_SHCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O 时序。
该寄存器设置标准速度的SCL时钟高周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入 该寄存器。
其他时间写入无效。
最小有效值为6;
硬件阻止写入小于此值,如果要写,会设置为6。
RW

I2C 标准速度 SCL 低计数寄存器

I2C_SLCNTBASE + 0x0018
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_SLCNT
RST00000000000000000000000111010110
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_SLCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。
该寄存器设置标准速度的SCL时钟低周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该 寄存器。
其他时间写入无效。
最小有效值为8;
硬件阻止写入小于此值,如果要写,会设置为8。
RW

I2C 快速 SCL 高计数寄存器

I2C_FHCNTBASE + 0x001C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_FHCNT
RST00000000000000000000000000111100
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_FHCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。
该寄存器设置快速的SCL时钟高周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。
其他时间写入无效。
最小有效值为6;
硬件阻止写入小于此值,如果要写,会设置为6。
RW

I2C 快速 SCL 低计数寄存器

I2C_FLCNTBASE + 0x0020
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_FLCNT
RST00000000000000000000000010000010
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_FLCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。
该寄存器设置快速的SCL时钟低周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。
其他时间写入无效。
最小有效值为8;
硬件阻止写入小于此值,如果要写,会设置为8。
RW

I2C 高速 SCL 高计数寄存器

I2C_HHCNTBASE + 0x0024
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_HHCNT
RST00000000000000000000000000000110
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_HHCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。
该寄存器设置高速的SCL时钟高周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。
其他时间写入无效。
最小值为6;
硬件阻止写入小于此值,如果要写,会设置为6。
RW

I2C 高速 SCL 低计数寄存器

I2C_HLCNTBASE + 0x0028
Bit313029282726252423222120191817161514131211109876543210
字段ReservedI2C_HLCNT
RST00000000000000000000000000001010
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0I2C_HLCNT在发生任何I2C总线事务之前,必须设置该寄存器,以确保适当的I/O时 序。
该寄存器设置高速的SCL时钟低周期计数。
只有当I2C接口被禁用,对应I2C_ENABLE[0]被设置为0,才能写入该寄 存器。
其他时间写入无效。
最小值为8;
硬件阻止写入小于此值,如果要写,会设置为8。
RW

I2C 中断状态寄存器

该寄存器中的每一位在I2C_INTM寄存器中都有一个相应的屏蔽位。通过读取匹配的中断清除寄存器来清除这些位。这些位的未屏蔽原始版本可以在I2C_RAW_INTR_STAT寄存器中获得。

I2C_INTSTBASE + 0x002C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedMST_HOLDReservedIGCISTTISTPIACTRXDNTXABTRDREQTXEMPTXOFRXFLRXOFRXUF
RST00000000000000000000000000000000
位名称说明RW
31:14Reserved写入无影响,读取为零。
R
13MST_HOLD表明主设备是否占用总线,Tx_FIFO 是否为空。
R
12Reserved写入无影响,读取为零。
R
11IGC仅当接收到广播呼叫并被响应时设置。
它保持设置,直到通过禁用I2C或 CPU读取I2C_CGC寄存器的0位时被清除。
I2C将接收到的数据存储在接 收缓存中。
R
10ISTT指示在I2C接口上是否发生了START 或 RESTART条件,无论I2C是以从 机或主机模式运行。
R
9ISTP指示在I2C接口上是否发生了STOP条件,无论I2C是以从机或主机模式运 行。
R
8IACT该位捕捉I2C活动并保持设置,直到它被清除。
有四种方法可以清除它:
R
7RXDN当I2C作为从机-发送器时,如果主机不响应传输的字节,该位被设置为1。
这种情况发生在传输的最后一个字节上,表明传输已经完成。
R
6TXABT该位指示作为I2C发送器的I2C是否无法完成发送FIFO内容的预期行为。这种情况可以作为I2C主机或I2C从机发生,并被称为“传输中止”。
当该位设置为1,I2C_ABTSRC寄存器表明发生传输中止的原因。
注意:每当设置该位时,I2C会刷新/重置/清空TX FIFO。TX FIFO一直处于刷新状态,直到读取寄存器I2C_CTXABT。一旦执行此读取,TX FIFO就准备从APB接口接收更多的数据字节。
R
5RDREQ当I2C作为从机,另一个I2C主机尝试从I2C读取数据时,该位被设置为1。I2C将I2C总线保持在等待状态,直到这个中断得到服务,这意味着从机已经被要求传输数据的远程主机处理。处理器必须响应这个中断,然后将所请求的数据写入到I2C_DC寄存器。在处理器读取I2C_CRXREQ寄存器之后,该位被设置为0。R
4TXEMP当发送缓存达到或低于I2C_TXTL寄存器中设置的阈值时,该位设置为1。
当缓存量超过这个阈值,硬件会自动清除它。当I2C_ENB[0]为0,TX FIFO被刷新并保持复位。TX FIFO看起来像是它里面没有数据,所以该位设置为1,前提是主状态机或从状态机中有活动。当不再有活动时,则使用I2C_ENB[0]=0,该位设置为0。
R
3TXOF如果发送缓存填满I2C_TX_BUFFER_DEPTH,并且处理器试图通过写入I2C_DC寄存器来发出另一个I2C命令,则在发送期间设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R
2RXFL当接收缓存达到或超过I2C_RXTL寄存器中的RX_TL阈值时进行设置。当缓存量低于该阈值时,硬件会自动清除它。
如果模块被禁用(I2C_ENB[0]=0),则RX FIFO被刷新并保持在复位状态,因此RX FIFO未满。一旦I2C_ENB[0]被设置为0,该位就被清除,无论是否有活动继续。
R
1RXOF如果接收缓存完全填满I2C_RX_BUFFER_DEPTH,并且从外部I2C设备接收到一个额外字节,则设置。I2C响应这一点,但在FIFO满后收到的任何数据字节都将丢失。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R
0RXUF如果处理器在接收缓存为空时,试图通过从I2C_DC寄存器读取接收缓存,则设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R

I2C 中断屏蔽寄存器

这些位屏蔽了它们相应的中断状态位。该寄存器低电平有效,值0屏蔽中断,而值1取消屏蔽中断。

I2C_INTMBASE + 0x0030
Bit313029282726252423222120191817161514131211109876543210
字段ReservedMMST_HOLDReservedMIGCMISTTMISTPMIACTMRXDNMTXABTMRDREQMTXEMPMTXOFMRXFLMRXOFMRXUF
RST00000000000000000010100011111111
位名称说明RW
31:14Reserved写入无影响,读取为零。
R
13MMST_HOLD这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位RW
12Reserved写入无影响,读取为零。
R
11MIGC这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位RW
10MISTTRW
9MISTPRW
8MIACTRW
7MRXDNRW
6MTXABTRW
5MRDREQRW
4MTXEMPRW
3MTXOFRW
2MRXFLRW
1MRXOFRW
0MRXUF这些位在I2C_INTST寄存器中屏蔽了它们相应的中断状态位RW

I2C 原始中断状态寄存器

与I2C_INTST寄存器不同,这些位没有屏蔽位,因此它们总是显示I2C的真实状态。有关这些位的详细描述,请参阅I2C_INTST。所有位都是只读的。

I2C_RAW_INTR_STATBASE + 0x0034
Bit313029282726252423222120191817161514131211109876543210
字段ReservedMST_HOLDReservedIGCISTTISTPIACTRXDNTXABTRDREQTXEMPTXOFRXFLRXOFRXUF
RST00000000000000000000000000000000
位名称说明RW
31:14Reserved写入无影响,读取为零。
R
13MST_HOLD表明主设备是否占用总线,Tx_FIFO 是否为空。
R
12Reserved写入无影响,读取为零。
R
11IGC仅当接收到广播呼叫并被响应时设置。
它保持设置,直到通过禁用I2C或 CPU读取I2C_CGC寄存器的0位时被清除。
I2C将接收到的数据存储在接 收缓存中。
R
10ISTT指示在I2C接口上是否发生了START 或 RESTART条件,无论I2C是以从 机或主机模式运行。
R
9ISTP指示在I2C接口上是否发生了STOP条件,无论I2C是以从机或主机模式运 行。
R
8IACT该位捕捉I2C活动并保持设置,直到它被清除。
有四种方法可以清除它:
R
7RXDN当I2C作为从机-发送器时,如果主机不响应传输的字节,该位被设置为1。
这种情况发生在传输的最后一个字节上,表明传输已经完成。
R
6TXABT该位指示作为I2C发送器的I2C是否无法完成发送FIFO内容的预期行为。这种情况可以作为I2C主机或I2C从机发生,并被称为“传输中止”。
当该位设置为1,I2C_ABTSRC寄存器表明发生传输中止的原因。
注意:每当设置该位时,I2C会刷新/重置/清空TX FIFO。TX FIFO一直处于刷新状态,直到读取寄存器I2C_CTXABT。一旦执行此读取,TX FIFO就准备从APB接口接收更多的数据字节。
R
5RDREQ当I2C作为从机,另一个I2C主机尝试从I2C读取数据时,该位被设置为1。I2C将I2C总线保持在等待状态,直到这个中断得到服务,这意味着从机已经被要求传输数据的远程主机处理。处理器必须响应这个中断,然后将所请求的数据写入到I2C_DC寄存器。在处理器读取I2C_CRXREQ寄存器之后,该位被设置为0。R
4TXEMP当发送缓存达到或低于I2C_TXTL寄存器中设置的阈值时,该位设置为1。
当缓存量超过这个阈值,硬件会自动清除它。当I2C_ENB[0]为0,TX FIFO被刷新并保持复位。TX FIFO看起来像是它里面没有数据,所以该位设置为1,前提是主状态机或从状态机中有活动。当不再有活动时,则使用I2C_ENB[0]=0,该位设置为0。
R
3TXOF如果发送缓存填满I2C_TX_BUFFER_DEPTH,并且处理器试图通过写入I2C_DC寄存器来发出另一个I2C命令,则在发送期间设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R
2RXFL当接收缓存达到或超过I2C_RXTL寄存器中的RX_TL阈值时进行设置。当缓存量低于该阈值时,硬件会自动清除它。
如果模块被禁用(I2C_ENB[0]=0),则RX FIFO被刷新并保持在复位状态,因此RX FIFO未满。一旦I2C_ENB[0]被设置为0,该位就被清除,无论是否有活动继续。
R
1RXOF如果接收缓存完全填满I2C_RX_BUFFER_DEPTH,并且从外部I2C设备接收到一个额外字节,则设置。I2C响应这一点,但在FIFO满后收到的任何数据字节都将丢失。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R
0RXUF如果处理器在接收缓存为空时,试图通过从I2C_DC寄存器读取接收缓存,则设置。当模块被禁用时,该位保持它的电平,直到主状态机或从状态机进入空闲状态,当I2C_ENB[0]=0,该中断被清除。R

I2C 接收 FIFO 阈值寄存器

I2C_RXTLBASE + 0x0038
Bit313029282726252423222120191817161514131211109876543210
字段ReservedRXTL
RST00000000000000000000000000011111
位名称说明RW
31:8Reserved写入无影响,读取为零。
R
7:0RXTL接收FIFO阈值。
控制触发RXFL中断的数据量。
有效范围为0-63。
值n设置n+1的阈值,例如:值0设置1的阈值,值63设置64的阈值。
RW

I2C 发送 FIFO 阈值寄存器

I2C_TXTLBASE + 0x003C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedTXTL
RST00000000000000000000000000100000
位名称说明RW
31:8Reserved写入无影响,读取为零。
R
7:0TXTL发送FIFO阈值。
控制触发TXEMP中断的数据量。
有效范围为0-64。
值n设置n的阈值,例如:值0设置0的阈值,值64设置64的阈值。
RW

I2C 清除组合和单个中断寄存器

I2C_CINTBASE + 0x0040
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCINT
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CINT读该寄存器以清除组合中断、所有单独中断和I2C_ABTSRC寄存器。
该 位不清除硬件可清除的中断,而是清除软件可清除的中断。
有关清除 I2C_ABTSRC的例外情况,请参阅I2C_ABTSRC寄存器的第9位。
R

I2C 清除 RXUF中断寄存器

I2C_CRXUFBASE + 0x0044
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCRXUF
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CRXUF读该寄存器以清除I2C_INTST寄存器的RXUF中断(第0位)。
R

I2C 清除 RXOF 中断寄存器

I2C_CRXOFBASE + 0x0048
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCRXOF
RST????????????????????????????????
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CRXOF读该寄存器以清除I2C_INTST寄存器的RXOF中断(第1位)。
R

I2C 清除 TX_OVER中断寄存器

I2C_CTXOFBASE + 0x004C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCTXOF
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CTXOF读该寄存器以清除I2C_INTST寄存器的TX_OVER中断(第3位)。
R

I2C 清除 RDREQ 中断寄存器

I2C_CRXREQBASE + 0x0050
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCLRDREQ
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CLRDREQ读该寄存器以清除I2C_INTST寄存器的RDREQ中断(第5位)。
R

I2C 清除 TX_ABRT 中断寄存器

I2C_CTXABTBASE + 0x0054
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCTXABT
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CTXABT读该寄存器以清除I2C_INTST寄存器的TX_ABRT中断(第6位)。
这也可以将TXFIFO从刷新/重置中释放出来,允许对TXFIFO进行更多的写 入。
有关清除I2C_ABTSRC的例外情况,请参阅I2C_ABTSRC寄存器的第9位。
R

I2C 清除 RX_DONE 中断寄存器

I2C_CRXDNBASE + 0x0058
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCRXDN
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CRXDN读该寄存器以清除I2C_INTST寄存器的RX_DONE中断(第7位)。
R

I2C 清除 ACTIVITY 中断寄存器

I2C_CACTBASE + 0x005C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCACT
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CACT如果I2C不再处于活动状态,读该寄存器将清除ACTIVITY中断。
如果I2C在总线上仍处于活动状态,则继续设置ACTIVITY中断位。
如果模块被禁用,并且总线上没有进一步的活动,它会由硬件自动清除。
从该寄存器读取的值以获取I2C_INTST寄存器的ACTIVITY中断(第8位) 的状态。
R

I2C 清除 STOP中断寄存器

I2C_CSTPBASE + 0x0060
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCSTP
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CSTP读该寄存器以清除I2C_INTST寄存器的STOP中断(第9位)。
R

I2C 清除 START 中断寄存器

I2C_CSTTBASE + 0x0064
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCSTT
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CSTT读该寄存器以清除I2C_INTST寄存器的START中断(第10位)。
R

I2C 清除 GEN_CALL 中断寄存器

I2C_CGCBASE + 0x0068
Bit313029282726252423222120191817161514131211109876543210
字段ReservedCGC
RST00000000000000000000000000000000
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0CGC读该寄存器以清除I2C_INTST寄存器的GEN_CALL中断(第11位)。
R

I2C 使能寄存器

I2C_ENABLEBASE + 0x006C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedABORTI2CENB
RST00000000000000000000000000000000
位名称说明RW
31:2Reserved写入无影响,读取为零。
R
1ABORT设置后,控制器将启动传输中止。
0:ABORT未启动或ABORT已完成 1:ABORT操作正在进行 软件可以通过设置该位,中止主机模式下的I2C传输。
只有当ENABLE已经设置时,软件才能设置该位;
否则,控制器将忽 略任何对ABORT的写入。
一旦设置,软件无法清除ABORT位。
为了响应ABORT,控制器在完成当前传输后发出STOP并刷新Tx FIFO,然后在中止操作后设置TX_ABORT中断。
ABORT位在中止操作后自动清除。
RW
0I2CENB控制是否启用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

I2C_STBASE + 0x0070
Bit313029282726252423222120191817161514131211109876543210
字段ReservedSLVACTMSTACTRFFRFNETFETFNFACT
RST00000000000000000000000000000110
位名称说明RW
31:7Reserved写入无影响,读取为零。
R
6SLVACT从机FSM激活状态。
0:从机FSM处于空闲状态,因此I2C的从机部分未激活 1:从机FSM未处于空闲状态,因此I2C的从机部分处于激活状态
R
5MSTACT主机FSM激活状态。
0:主机FSM处于空闲状态,因此I2C的主机部分未激活 1:主机FSM未处于空闲状态,因此I2C的主机部分处于激活状态
R
4RFF接收FIFO完全满。
当接收FIFO完全满时,设置该位。当接收FIFO包含一个或多个空位置时,该位被清除。
0:接收FIFO未满
1:接收FIFO满
R
3RFNE接收FIFO非空。
当接收FIFO包含一个或多个数据时,设置该位;当接收FIFO为空时,该位被清除。
0:接收FIFO为空
1:接收FIFO非空
R
2TFE发送FIFO完全空。
当发送FIFO完全空时,设置该位。当发送FIFO包含一个或多个有效的数据时,该位被清除。该位不请求中断。
0:发送FIFO非空。
1:发送FIFO为空。
R
1TFNF发送FIFO未满。
当发送FIFO包含一个或多个空位置时,设置该位,且在FIFO为满时清除。
0:发送FIFO为满
1:发送FIFO未满
R
0ACTI2C激活状态。R

I2C 发送 FIFO Level 寄存器

该寄存器包含发送FIFO缓存中有效数据的数量,在以下情况它将被清除:
—I2C被禁用
— 传输中止,即在I2C_RAW_INTR_STAT寄存器中设置TX_ABRT位
— 从机批量传输模式被中止
当数据被放入发送FIFO时,该寄存器递增,当从发送FIFO取数据时,该寄存器递减。

I2C_TXFLRBASE + 0x0074
Bit313029282726252423222120191817161514131211109876543210
字段ReservedTXFLR
RST00000000000000000000000000000000
位名称说明RW
31:6Reserved写入无影响,读取为零。
R
5:0TXFLR包含发送FIFO中有效数据的数量R

I2C 接收 FIFO Level 寄存器

该寄存器包含接收FIFO缓存中有效数据的数量,在以下情况它将被清除:
—I2C被禁用
— 每当由I2C_ABTSRC寄存器中追踪的任何事件导致传输中止时,只要将数据放入接收FIFO,
该寄存器就会递增,当从接收FIFO取数据时,该寄存器就会递减。

I2C_RXFLRBASE + 0x0078
Bit313029282726252423222120191817161514131211109876543210
字段ReservedRXFLR
RST00000000000000000000000000000000
位名称说明RW
31:6Reserved写入无影响,读取为零。
R
5:0RXFLR包含接收FIFO中有效数据的数量R

I2C SDA保持时间寄存器

该寄存器以APB 时钟周期为单位,在主机和从机模式下控制SDA信号在SCL负边沿后的保持时间。 编程的值必须大于每个模式下要实现的值的最小保持时间—主机模式下一个周期,从机模式下七个周期。只有当I2C_ENABLE[0]=0时,才能成功写入此寄存器。 已编程的 SDA 保持时间在任何时候都不能超过 SCL 低部分的持续时间。因此,编程值不能大于 N_SCL_LOW-2,其中N_SCL_LOW是以APB时钟周期测量的SCL周期低部分的持续时间。

I2C_SDAHDBASE + 0x007C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedSDAHD
RST00000000000000000000000001010101
位名称说明RW
31:16Reserved写入无影响,读取为零。
R
15:0SDAHDI2C 保持时间。
以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位会清除一个周期,然后重新断言。

I2C_ABTSRCBASE + 0x0080
Bit313029282726252423222120191817161514131211109876543210
字段TX_FLUSH_CNTReservedUSER_ABRTSLVRD_INTXSLV_ARBLOSTSLVFLUSH_TXFIFOARB_LOSTABRT_MASTER_DISABRT_10B_RD_NORSTRTSBYTE_NORSTRTABRT_HS_NORSTRTSBYTE_ACKDETABRT_HS_ACKDETABRT_GCALL_READABRT_GCALL_NOCKABRT_TXDATA_NOACKABRT_10ADDR2_NOACKABRT_10ADDR1_NOACKABRT_7B_ADDR_NOACK
RST00000000000000000000000000000000
位名称说明RW
31:24TX_FLUSH_CNT该字段保留最后一个TX_ABRT事件之前的TXFLR的 值,当I2C被禁用时,它被清除。
R
23:17Reserved写入无影响,读取为零。
R
16USER_ABRT该位仅限于主机模式。
主机已检测到传输中止。
R
15SLVRD_INTX1:当处理器端响应从机模式请求,将数据传输到远程主 机时,用户在I2C_DC寄存器的CMD(位8)中写1。
R
14SLV_ARBLOST1:从机向远程主机传输数据时丢失数据,同时设置 I2C_ABTSRC[12]。
注意:即使从机从不“占用”总线,总线上也可能出现问 题。
这是一个故障安全检查。
例如,在SCL从低到高 转换的数据传输期间,如果数据总线上的内容不是应 该传输的内容,则I2C不再占用总线。
R
13SLVFLUSH_TXFIFO1:从机接收到读取命令,并且TX FIFO中存在一些数据,因此从机发出TX_ABRT中断以刷新TX FIFO中的旧数据。
复位值:0x0。
R
12ARB_LOST1:主机丢失仲裁,或者如果I2C_ABTSRC[14]也被设置,则从机发送器丢失仲裁。
复位值:0x0。
R
11ABRT_MASTER_DIS1:用户尝试在禁用主机模式的情况下启动主机操作。
复位值:0x0。
R
10ABRT_10B_RD_NORSTRT1:禁用重启(RESTART位(I2C_CON[5])=0)并且主机以10位寻址模式发送读取命令。
复位值:0x0。
R
9SBYTE_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
8ABRT_HS_NORSTRT1:重启被禁用(RESTART位(I2C_CON[5])),并且用户正在尝试使用主机在高速模式下传输数据。
复位值:0x0。
R
7SBYTE_ACKDET1:主机已发送一个起始字节,且起始字节被响应(错误行为)。
复位值:0x0。
R
6ABRT_HS_ACKDET1:主机处于高速模式,且高速主机码被响应(错误行为)。
复位值:0x0。
R
5ABRT_GCALL_READ1:I2C在主机模式下发送一个广播呼叫,但是用户将广播呼叫之后的字节编程为从总线读取(I2C_DC[9]设置为1)。
复位值:0x0。
R
4ABRT_GCALL_NOACK1:I2C在主机模式下发送一个广播呼叫,但是在总线上没有从机响应该广播呼叫。
复位值:0x0。
R
3ABRT_TXDATA_NOACK1:该位仅限于主机模式。主机已接收且响应地址,但当它在地址之后发送数据字节时,没有收到来自远程从机的响应。
复位值:0x0。
R
2ABRT_10ADDR2_NOACK1:主机处于10位寻址模式,且该10位寻址的第二个地址字节没有被任何从机响应。
复位值:0x0。
R
1ABRT_10ADDR1_NOACK1:主机处于10位寻址模式,且第一个10位地址字节没有被任何从机响应。
复位值:0x0。
R
0ABRT_7B_ADDR_NOACK1:主机处于7位寻址模式,且所发送的地址没有被任何从机响应。
复位值:0x0。
R

I2C DMA 控制寄存器

该寄存器用于使能DMA控制器接口操作。有一个单独的位用于发送和接收。无论I2C_ENABLE的状态如何,都可以对其进行编程。

I2C_DMACRBASE + 0x0088
Bit313029282726252423222120191817161514131211109876543210
字段ReservedTDENRDEN
RST00000000000000000000000000000000
位名称说明RW
31:2Reserved写入无影响,读取为零。
R
1TDEN发送DMA使能。
该位启用/禁用发送DMA通道。
0:发送DMA禁用
RW
0RDEN接收DMA使能。
该位启用/禁用接收DMA通道。
0:接收DMA禁用
1:接收DMA启用
复位值:0x0。
RW

I2C DMA 发送数据 Level 寄存器

I2C_DMATDLRBASE + 0x008C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedTDLR
RST00000000000000000000000000000000
位名称说明RW
31:6Reserved写入无影响,读取为零。
R
5:0TDLRDMA发送数据量。
该位控制由发送逻辑发出DMA请求的数据量。
当发送FIFO中的有效数据量 等于或低于该字段值时,生成dma_tx_req 信号。
RW

I2C DMA 接收数据 Level 寄存器

I2C_DMARDLRBASE + 0x0090
Bit313029282726252423222120191817161514131211109876543210
字段ReservedRDLR
RST00000000000000000000000000000000
位名称说明RW
31:6Reserved写入无影响,读取为零。
R
5:0RDLRDMA接收数据量。
RW

I2C SDA建立寄存器

当I2C在从机—发送器操作中处理一个读请求时,该寄存器控制在SCL上升沿中引入的相对于SDA变化的时间延迟量(根据APB时钟周期的数量)。

I2C_SDASUBASE + 0x0094
Bit313029282726252423222120191817161514131211109876543210
字段ReservedSDASU
RST00000000000000000000000001100100
位名称说明RW
31:8Reserved写入无影响,读取为零。
R
7:0SDASUSDA建立。
建议如果要求的时间为1000ns,那么对于一个APB时钟频率为 10MHz,I2C_SDASU应编程为值11。
RW

I2C 响应广播呼叫寄存器

该寄存器控制I2C在接收到I2C广播呼叫地址时是用ACK还是NACK响应。

I2C_ACKGCBASE + 0x0098
Bit313029282726252423222120191817161514131211109876543210
字段ReservedACKGC
RST00000000000000000000000000000001
位名称说明RW
31:1Reserved写入无影响,读取为零。
R
0ACKGC响应广播呼叫。
当设置为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时会发生延迟。

I2C_ENBSTBASE + 0x009C
Bit313029282726252423222120191817161514131211109876543210
字段ReservedSLVRDLSTSLVDISBI2CEN
RST00000000000000000000000000000000
位名称说明RW
31:3Reserved写入无影响,读取为零。
R
2SLVRDLST从机接收到的数据丢失。
该位表示由于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
1SLVDISB忙时禁用从机(发送,接收)。
该位指示是否由于将I2C_ENABLE寄存器 的0位从1设置为0而中止了潜在的或活动的从机操作。
当CPU向 I2C_ENABLE寄存器的第0位写入0,同时:(a)I2C正在接收来自远程主
R
0I2CEN当读作1,I2C被视为处于使能状态;
当读作0,I2C被视为完全未激活。
R

I2C 快速模式滤波寄存器

该寄存器用于存储在标准模式或快速模式下运行时,由峰值抑制逻辑过滤出的最长峰值的持续时间(以 APB时钟周期为单位)。这个寄存器必须用最小值1进行编程。

I2C_FS_SPKLENBASE + 0x00A0
Bit313029282726252423222120191817161514131211109876543210
字段ReservedFS_SPKLEN
RST00000000000000000000000000000001
位名称说明RW
31:8Reserved写入无影响,读取为零。
R
7:0FS_SPKLEN该寄存器设置由峰值抑制逻辑过滤出的SCL或SDA线路中最长峰值的持 续时间(以I2C设备时钟周期为单位)。
只有当I2C接口被禁用时,才能写入该寄存器,在其他时间写入无效。
最小有效值为1;
硬件阻止写入小于此值,如果尝试,将设置为1。
RW

I2C 高速模式滤波寄存器

该寄存器用于存储在高速模式下运行时,由峰值抑制逻辑过滤出的最长峰值的持续时间(以APB时钟周期为单位)。这个寄存器必须用最小值1进行编程。

I2C_HS_SPKLENBASE + 0x00A4
Bit313029282726252423222120191817161514131211109876543210
字段ReservedHS_SPKLEN
RST00000000000000000000000000000001
位名称说明RW
31:8Reserved写入无影响,读取为零。
R
7:0HS_SPKLEN该寄存器设置由峰值抑制逻辑过滤出的SCL或SDA线路中最长峰值的持 续时间(以I2C设备时钟周期为单位)。
只有当I2C接口被禁用时,才能写入该寄存器,在其他时间写入无效。
最小有效值为1;
硬件阻止写入小于此值,如果尝试,将设置为1。
RW