寄存器描述
0x000 I2C_CTL
默认值:0x0000006F | I2C控制(I2C Control) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:12 | - | - | - |
10 | R/W | 0x0 | BUS_CLEAR_FEATURE_CTL 总线清除控制
此位置1,SDA挂死机制使能以及SCL_STUCK_AT_LOW中断可触发 仅master模式有效 |
9 | R/W | 0x0 | RX_FIFO_FULL_HLD_CTL RX_FIFO 满状态保持总线控制,仅在Master模式下:
|
8 | R/W | 0x0 | TX_EMPTY_CTL TX_EMPTY中断控制
|
7 | R/W | 0x0 | STOP_DET_IFADDRESSED STOP_DET中断控制在slave模式下:
注: 此位设为1时,且在GEN_CALL下,即使响应也不会发出 |
STOP_DET中断 |
6 | R/W | 0x1 | RESTART_ENABLE 重开始使能控制
master发送RESTART信号控制,一些旧slave设备不支持处理RESTART信号。当RESTART禁止时,master被禁止执行以下功能:
|
5:4 | R/W | 0x2 | SPEED_MODE_SELECT 速率模式选择
|
3 | R/W | 0x1 | 10BITADDR_SELECT_SLAVE Slave被寻址bit选择
|
2 | R/W | 0x1 | 10BITADDR_SELECT_MASTER Master寻址bit选择
|
1 | R/W | 0x1 | SLAVE_MODE_DISABLE Slave模式使能控制
当I2C_CTL[0]设置为1时,此位也需设置为1;I2C_CTL [0]设 | 置为0时,此位也设置为0. |
0 | R/W | 0x1 | MASTER_MODE_ENABLE Master模式使能控制
当I2C_CTL [1]设置为1时,此位也需设置为1;I2C_CTL [1] | 设置为0时,此位也设置为0. |
0x004 I2C_TAR
默认值:0x0000005A | I2C目标设备(I2C Target) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:12 | - | - | - |
11 | R/W | 0 | GEN_CALL_CTL
此位配1,当bit[10]为0时,master进行广播模式寻址,无视bit[9:0]中的目标地址,进行GEN_CALL模式,GEN_CALL模式只允许进行写操作,尝试读操作会导致TX_ABRT(I2C_INTR_STAT[6])中断产生;当bit[10]为1时,start字节使能时,master先发起start字节,再进行目标寻址 |
10 | R/W | 0 | START_BYTE_CTL Start字节控制
|
9:0 | R/W | 0x5A | I2C_TAR 目标地址 Master依此目标地址寻址建立通信。如果I2C_TAR和I2C_SAR相同,则存在回环,但是FIFO在master与slave之间共享,因此双向传输是不可行的,只能单向传输。Master不能传输数据给自己,只能传输给slave。 当进行GEN_CALL时,无视此地址。 |
0x008 I2C_SAR
默认值:0x0000005A | I2C从机地址(I2C Slave Address) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:10 | - | - | - |
9:0 | R/W | 0x5A | I2C_SAR SLAVE模式被寻址的地址 当为7bit寻址时,只有bit[6:0]有效。此位仅在I2C禁止时可写(I2C_ENABLE[0]写0),其他时间写入无效。 |
0x00C I2C_ACK_GEN_CALL
默认值:0x00000001 | I2C响应广播(I2C Acknowledge General Call) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:1 | - | - | - |
0 | R/W | 0x1 | ACK_GEN_CALL GEN_CALL应答状态。
|
0x010 I2C_DATA_CMD
默认值:0x00000000 | I2C数据命令(I2C Data Command) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:11 | - | - | - |
10 | W | 0x0 | RESTART 重开始行为控制
|
9 | W | 0x0 | STOP STOP命令控制
|
8 | W | 0x0 | CMD 操作命令,仅在Master模式下有效
|
7:0 | R/W | 0x0 | DAT 数据缓冲区 发送数据时,数据需写入此位段;接收数据时,数据亦接收到此位段。 |
0x020 I2C_SS_SCL_HCNT
默认值:0x00000060 | I2C标准速度时钟高位计数(I2C Standard SCL High Count) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:0 | R/W | 0x60 | I2C_SS_SCL_HCNT 标准速率模式下SCL高电平持续时间计数。 此位仅在I2C禁止时可写(I2C_ENABLE[0]写0),其他时间写入无效。最小值为0x60,写入小于0x60的数值无效。 对于APB_DATA_WIDTH=8的设计,需确定先写入低8位再写高8位。计算方法:
以快速模式为例:
|
0x024 I2C_SS_SCL_LCNT
默认值:0x00000070 | I2C标准速度时钟低位计数(I2C Standard SCL Low Count) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:0 | R/W | 0x70 | I2C_SS_SCL_LCNT 标准速率模式下SCL低电平持续时间计数。 此位仅在I2C禁止时可写(I2C_ENABLE[0]写0),其他时间写入无效。最小值为0x70,写入小于0x70的数值无效。 对于APB_DATA_WIDTH=8的设计,需确定先写入低8位再写高8位。计算方法:
以快速模式为例
|
0x028 I2C_FS_SCL_HCNT
默认值:0x0000000F | I2C快速时钟高位计数(I2C Fast SCL High Count) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:0 | R/W | 0xF | I2C_FS_SCL_HCNT 快速模式下SCL高电平持续时间计数。 此位仅在I2C禁止时可写(I2C_ENABLE[0]写0),其他时间写入无效。最小值为0xF,写入小于0xF的数值无效。 对于APB_DATA_WIDTH=8的设计,需确定先写入低8位再写高8位。计算方法:
以快速模式为例
|
0x02C I2C_FS_SCL_LCNT
默认值:0x0000001F | I2C快速时钟低位计数(I2C Fast SCL Low Count) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:0 | R/W | 0x1F | I2C_FS_SCL_LCNT 快速模式下SCL低电平持续时间计数。此位仅在I2C禁止时可写(I2C_ENABLE[0]写0),其他时间写入无效。最小值为0x1F,写入小于0x1F的数值无效。 对于APB_DATA_WIDTH=8的设计,需确定先写入低8位再写高8位。计算方法:
以快速模式为例
|
0x030 I2C_SDA_HOLD
默认值:0x00000001 | I2C SDA 保持时间(I2C SDA Hold Time) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:24 | - | - | - |
23:16 | R/W | 0x0 | I2C_SDA_RX_HOLD I2C接收时设置所需的SDA保持时间,以I2C_clk周期为单位 |
15:0 | R/W | 0x1 | I2C_SDA_TX_HOLD I2C发送时设置所需的SDA保持时间,以I2C_clk周期为单位 |
0x034 I2C_SDA_SETUP
默认值:0x00000002 | I2C SDA 建立时间(I2C SDA Setup Time) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:8 | - | - | - |
7:0 | R/W | 0x2 | I2C_SDA_SETUP SDA设置时间,数值为(该值-1),以I2C_clk周期为单位。 如默认值为(2-1)个cycle建议如果需要延迟1000ns,则对于10Mhz的I2C,时钟频率此字段设为11,此字段最小值设2 |
0x038 I2C_INTR_MASK
默认值:0x000048FF | I2C 中断屏蔽(I2C Interrupt Mask) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:15 | - | - | - |
14 | R/W | 0x1 | M_SCL_STUCK_AT_LOW
|
13 | R/W | 0x0 | M_MASTER_ON_HOLD
|
12 | - | - | - |
11 | R/W | 0x1 | M_GEN_CALL
|
10 | R/W | 0x0 | M_START_DET
|
9 | R/W | 0x0 | M_STOP_DET
|
8 | R/W | 0x0 | M_ACTIVITY
|
7 | R/W | 0x1 | M_RX_DONE
|
6 | R/W | 0x1 | M_TX_ABRT
|
5 | R/W | 0x1 | M_RD_REQ
|
4 | R/W | 0x1 | M_TX_EMPTY
|
3 | - | - | - |
2 | R/W | 0x1 | M_RX_FULL
|
1 | - | - | - |
0 | R/W | 0x1 | M_RX_UNDER
|
0x03C I2C_INTR_CLR
默认值:0x00000000 | I2C 中断清除(I2C Interrupt Clear) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:15 | - | - | - |
14 | R/W1C | 0x0 | CLR _SCL_STUCK_AT_LOW
详细描述见I2C_INTR_STAT |
13:12 | - | - | - |
11 | R/W1C | 0x0 | CLR _GEN_CALL
ACK需持续一个SCL周期,在此期间无法对GEN_CALL中断清零详细描述见I2C_INTR_STAT |
10 | R/W1C | 0x0 | CLR _START_DET
详细描述见I2C_INTR_STAT |
9 | R/W1C | 0x0 | CLR _STOP_DET
详细描述见I2C_INTR_STAT |
8 | R/W1C | 0x0 | CLR _ACTIVITY
详细描述见I2C_INTR_STAT |
7 | R/W1C | 0x0 | CLR _RX_DONE
详细描述见I2C_INTR_STAT |
6 | R/W1C | 0x0 | CLR _TX_ABRT
详细描述见I2C_INTR_STAT |
5 | R/W1C | 0x0 | CLR _RD_REQ
详细描述见I2C_INTR_STAT |
4:1 | - | - | - |
0 | R/W1C | 0x0 | CLR _RX_UNDER
详细描述见I2C_INTR_STAT |
0x040 I2C_RAW_INTR_STAT
默认值:0x00000000 | I2C 中断状态(I2C Interrupt Status) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:15 | - | - | - |
14 | R | 0x0 | SCL_STUCK_AT_LOW
指示SCL处于低电平的持续时间是否为I2C_SCL_STUCK_TIMEOUT设置的时间,需配置I2C_CTL[10]为1 |
13 | R | 0x0 | MASTER_ON_HOLD
Master是否保持总线并且TX FIFO为空,硬件自动清零 |
12 | - | - | - |
11 | R | 0x0 | GEN_CALL
仅在接收到GEN_CALL地址并且回复ACK时触发。 |
10 | R | 0x0 | START_DET
指示master或者slave模式下,是否检测到一个START信号 |
9 | R | 0x0 | STOP_DET
指示master或者slave模式下,是否检测到一个STOP信号。 在slave模式下:当I2C_CON[7](STOP_DET_IFADDRESSED)设为1,中断STOP_DET仅在寻址模式下触发,GEN_CALL模式下不触发;当I2C_CON[7](STOP_DET_IFADDRESSED)设为0,中断STOP_DET不管是否被寻址都会触发。 |
8 | R | 0x0 | ACTIVITY
指示I2C捕获活动状态并且一直保持为1直到被清零,清除此位有3种方式:
一旦此位被设为1,即使I2C处于空闲状态,也会保持直到以上其中一种方式清零 |
7 | R | 0x0 | RX_DONE
当I2C作为Slave发送数据时,若master不再回复一个ACK,则此位设为1。此中断在传输的最后一个字节发生,指示传输结束 |
6 | R | 0x0 | TX_ABRT
指示I2C作为发送者无法完成对发送FIFO内容的预期操作。Master和Slave模式都可发生此中断。当此中断发生时,I2C_TX_ABRT_SOURCE寄存器指示发生停止发送的原因 |
5 | R | 0x0 | RD_REQ
当此位设为1时,表明在slave模式下,master设备在尝试读取I2C的数据。I2C将总线保持为等待状态,直到此中断被服务,这意味这slave已经被master寻址。当中断发生时,处理器必须响应此中断,将请求的数据写入I2C_DATA_CMD寄存器。 |
4 | R | 0x0 | TX_EMPTY
TX_EMPTY_CTL设为0:当发送缓冲器小于等于I2C_TX_TL寄存器设定的阈值时,此位设为1 TX_EMPTY_CTL设为1:当发送缓冲器小于等于I2C_TX_TL寄存器设定的阈值时,并且最新命令的地址/数据从内部的移位寄存器传输完成,此位设为1当缓冲器数据量超过I2C_TX_TL寄存器设定值硬件会自动清零。 |
3 | - | - | - |
2 | R | 0x0 | RX_FULL
当接收缓冲器达到或超过I2C_RX_TL寄存器设定的阈值时,此位设1。当缓冲器深度低于阈值,硬件自动清零。 |
1 | - | - | - |
0 | R | 0x0 | RX_UNDER(接收下溢出)
|
0x048 I2C_ENABLE
默认值:0x00000000 | I2C 使能(I2C Enable) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | - | - | - |
3 | R/W | 0x0 | SDA_STUCK_RECOVERY_ENABLE SDA 挂死恢复使能控制
如果SDA挂死状态由I2C_TX_ABRT_SOURCE[17] 指示的TX_ABORT中断,然后此位发起一个恢复机制,即发送9个SCL时钟和一个STOP信号释放SDA线,之后此位清零 |
2 | R/W | 0x0 | TX_CMD_BLOCK 阻止数据传输控制
要阻止master命令的执行,仅当TX FIFO为空并且master处于空闲状态时,才设置此位。若此位置1,不会执行TX FIFO中任何其他的命令,直到此位置0 |
1 | R/W | 0x0 | ABORT, 传输停止控制
软件设置此位可以停止master模式下的传输。只有在ENABLE设为1的情况下才能对此位操作,否则操作无效。一旦ABORT设为1,软件则无法清除。响应一个ABORT,控制器在当前传输完成后发出STOP信号并且冲刷TX FIFO,然后在完成停止操作后设置TX_ABORT中断(I2C_INTR_STAT[6]) |
0 | R/W | 0x0 | ENABLE I2C使能控制
|
0x04C I2C_ENABLE_STATUS
默认值:0x00000000 | I2C 使能状态(I2C Enable Status) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:3 | - | - | - |
2 | R | 0x0 | SLV_RX_DATA_LOST Slave 接收数据丢失。
指示slave模式接收下是否由于I2C_ENABLE[0]由1设为0导致至少一个数据丢失。 |
1 | R | 0x0 | SLV_DISABLED_WHILE_BUSY Slave 禁用时状态
指示由于I2C_ENABLE[0]由1设为0时,导致活跃或者潜在的slave操作被停止。 |
0 | R | 0x0 | I2C_EN_STATUSI2C使能状态
|
0x050 I2C_STATUS
默认值:0x00000006 | I2C 状态(I2C Status) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:12 | - | - | - |
11 | R | 0x0 | SDA_STUCK_NOT_RECOVERED SDA挂死未恢复
此位仅在master模式有效,slave模式无效 |
10 | R | 0x0 | SLV_HOLD_RX_FIFO_FULL Slave因RX FIFO为满保持总线
指示当RX FIFO为满并且接收额外的字节数据,slave则保持总线停止接收。 |
9 | R | 0x0 | SLV_HOLD_TX_FIFO_EMPTY Slave因TX FIFO为空保持总线
指示当slave收到读请求而TX FIFO为空,slave则保持总线直到TX FIFO有数据响应读请求 |
8 | R | 0x0 | MST_HOLD_RX_FIFO_FULL Master因RX FIFO为满保持总线
指示当RX FIFO为满并且接收额外的字节数据,master则保持总线停止接收。 |
7 | R | 0x0 | MST_HOLD_TX_FIFO_EMPTY Master因TX FIFO为空保持总线
|
6 | R | 0x0 | SLV_ACTIVITY Slave状态
|
5 | R | 0x0 | MST_ACTIVITY Master状态
|
4 | R | 0x0 | RFF(RX FIFO FULL) 接收FIFO为满状态标志
|
3 | R | 0x0 | RFNE(RX FIFO NOT EMPTY) 接收FIFO非空状态标志
|
2 | R | 0x1 | TFE(TX FIFO EMPTY) 发送FIFO为空状态标志
|
1 | R | 0x1 | TFNF(TX FIFO NOT FULL) 发送FIFO非满状态标志
|
0 | R | 0x0 | ACTIVITY I2C状态
|
0x054 I2C_TX_ABRT_SOURCE
默认值:0x00000000 | I2C 发送停止源(I2C Transport Abort Source) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:23 | R | 0x0 | TX_FLUSH_CNT。 此位域指示由于TX_ABRT中断而冲刷的TX FIFO数据命令数。 |
22:18 | - | - | - |
17 | R | 0x0 | ABRT_SDA_STUCK_AT_LOW
仅在master模式有效,master检测SDA持续低电平的时间超过I2C_SDA_STUCK_TIMEOUT设置的阈值 |
16 | R | 0x0 | ABRT_USER_ABRT
仅在master模式有效,master检测到传输中止 (I2C_ENABLE[1]),生成停止操作。 |
15 | R | 0x0 | ABRT_SLVRD_INTX
Slave 模式下正在进行发送数据给远程master,此时用户在 I2C_CMD_DATA[8] 写1,则产生停止操作。 |
14 | R | 0x0 | ABRT_SLV_ARBLOST
指示在向远程master传输时,slave丢失总线,同时 I2C_TX_ABRT_SOURCE[12] 设1,生成停止操作。 |
13 | R | 0x0 | ABRT_SLVFLUSH_TXFIFO
指示slave已接收到读取命令,并且某些数据存在于TX FIFO中,因此slave发出TX_ABRT中断以刷新TX FIFO中的旧数据,则生成停止操作。 |
12 | R | 0x0 | ABRT_LOST
指示master失去仲裁,或者设置了I2C_TX_ABRT_SOURCE[14],则slave失去仲裁,生成停止操作 |
11 | R | 0x0 | ABRT_MASTER_DIS
指示用户在master禁用的情况下发起一个master操作,则生成停止操作 |
10 | R | 0x0 | ABRT_10B_RD_NORSTRT
|
9 | R | 0x0 | ABRT_SBYTE_NORSTRT
指示在RESTART禁止时(I2C_CTL[6]设0)用户发送一个START字节清除此位,需修复造成此位生成停止操作的源,RESTART必须先使能(I2C_CTL[6]设1),I2C_TAR[11]或者I2C_TAR[10]必须清除。一旦此位的源被修复,此位就可以读取清零。若在修复源之前尝试读取此位清零,则此位在一个周期内清除,随后重新赋值 |
8 | - | - | - |
7 | R | 0x0 | ABRT_SBYTE_ACKDET
指示master发送一个START字节并且被应答(错误行为),则生成停止操作 |
6 | - | - | - |
5 | R | 0x0 | ABRT_GCALL_READ
指示I2C发送一个GEN_CALL但是紧接着用户进行一个读操作(I2C_DATA_CMD[8]写1),则生成停止操作 |
4 | R | 0x0 | ABRT_GCALL_NOACK
指示master模式发出一个GEN_CALL,而总线上没有slave应答,则生成停止操作 |
3 | R | 0x0 | ABRT_TXDATA_NOACK
仅在master模式,当发送一个地址并且收到应答,接着发送数据而没有收到应答,则生成停止操作 |
2 | R | 0x0 | ABRT_10ADDR2_NOACK
仅在master模式,当10bit寻址模式发送第一个地址并且收到应答,接着发送第二个地址而没有收到应答,则生成停止操作 |
1 | R | 0x0 | ABRT_10ADDR1_NOACK
仅在master模式,当10bit寻址模式发送第一个地址没有收到应答,则生成停止操作 |
0 | R | 0x0 | ABRT_7B_ADDR_NOACK
仅在master模式,当7bit寻址模式发送第一个地址没有收到应答,则生成停止操作 |
0x090 I2C_RX_TL
默认值:0x00000000 | I2C 接收阈值(I2C Receive Threshold) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:3 | - | - | - |
2:0 | R/W | 0x0 | RX_TL 接收FIFO阈值深度 控制触发RX_FULL中断的数据数量,接收数据数量大于等于此值时触发。有效范围为0-7,硬件不允许该值设置为大于缓冲寄存器的最大深度。值0设置1项的阈值,值7设置8项的阈值 |
0x094 I2C_TX_TL
默认值:0x00000000 | I2C 发送阈值(I2C Transport Threshold) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:3 | - | - | - |
2:0 | R/W | 0x0 | TX_TL 发送FIFO阈值深度 控制触发TX_EMPTY中断的数据数量,发送数据数量小于等于此值时触发。有效范围为0-7,硬件不允许该值设置为大于缓冲寄存器的最大深度。值0设置0项的阈值,值7设置7项的阈值 |
0x098 I2C_TXFLR
默认值:0x00000000 | I2C 发送FIFO水位(I2C Transport FIFO Level) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:3 | - | - | - |
2:0 | R | 0x0 | TXFLR,显示发送FIFO数据量 |
0x09C I2C_RXFLR
默认值:0x00000000 | I2C 接收FIFO水位(I2C Receive FIFO Level) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:3 | - | - | - |
2:0 | R | 0x0 | RXFLR,接收FIFO数据量 |
0x0A0 I2C_SCL_STUCK_TIMEOUT
默认值:0xFFFFFFFF | I2C SCL挂死超时(I2C_SCL_STUCK_TIMEOUT) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:0 | R/W | 0xffff_ffff | I2C_SCL_STUCK_TIMEOUT SCL挂死时间设置。 如果I2C检测SCL处于低的时间超过此位域设定的时间,则产生相应的中断(SCL_STUCK_AT_LOW)。仅在I2C禁止时(I2C_ENABLE[0]设为0)可配置,其他时间写入无效。 |
0x0A4 I2C_SDA_STUCK_TIMEOUT
默认值:0xFFFFFFFF | I2C SDA挂死超时(I2C_SDA_STUCK_TIMEOUT) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:0 | R/W | 0xffff_ffff | I2C_SDA_STUCK_TIMEOUT SCL挂死时间设置。 如果I2C检测SDA处于低的时间超过此位域设定的时间,并且I2C_ENABLE[3]设为1,则触发SDA挂死恢复机制 |
0x0B0 I2C_FS_SPIKELEN
默认值:0x00000002 | I2C 快速模式毛刺抑制时长(I2C_FS_SPIKELEN) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:0 | R/W | 0x2 | I2C_FS_SPIKELEN I2C FS模式毛刺抑制寄存器。 此位设置SCL与SDA线持续抑制毛刺的最长时间,以I2C_clk周期为单位。 此位只有在I2C_ENABLE[0]设为0时可配置,其他时间配置无效。此位最小值为1,硬件会阻止写入小于此值的配置,即写0则此位会被设为1 |
0x0FC VERSION
默认值:v | I2C 版本号(VERSION) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:0 | RO | 0x00000100 | Version (模块版本号) 采用BCD码显示,V1.0 |