基地址和偏移量与寄存器某一位bit的关系

I2C_FLAG_SB 是 I2C 状态寄存器 1(SR1) 中的一个标志位。

寄存器与偏移量 假设 I2C 外设基地址 `BA_I2C` 为 `0x40004800`,在这个基地址的基础上,各寄存器的偏移量如下: • 状态寄存器 1(SR1) 的偏移量:`0x14` • 状态寄存器 2(SR2) 的偏移量:`0x18`  `I2C_FLAG_SB` 的解释 `I2C_FLAG_SB`(`0x10000001`)实际上是一个 32 位值,其中: • 高 4 位(`0x1`)指定寄存器类型或组。 • 剩下的位(`0x00000001`)表示寄存器内的具体位位置。

根据 I2C 的寄存器定义,高 4 位是用来区分不同寄存器的。如果高 4 位为 0x1,表示这是一个 SR1 的标志位。

  • 高 4 位 0x1:表示标志位属于 SR1 寄存器。
  • 低 28 位 0x00000001:表示该寄存器中的第 0 位(LSB,最低有效位)。

计算实际地址

若要通过基地址和偏移量来访问 I2C_FLAG_SB,步骤如下:

  1. 确定寄存器地址:基于 I2C 外设的基地址和 SR1 的偏移量来计算 SR1 寄存器的实际地址。

    SR1 Address=BA_I2C+0x14=0x40004800+0x14=0x40004814\text{SR1 Address} = \text{BA\_I2C} + 0x14 = 0x40004800 + 0x14 = 0x40004814SR1 Address=BA_I2C+0x14=0x40004800+0x14=0x40004814
  2. 标志位掩码0x00000001SR1 中的第 0 位掩码。

因此,I2C_FLAG_SB 可以解释为在 SR1 寄存器中第 0 位的标志位,用基地址和偏移量表示如下:

  • 寄存器地址: 0x40004814
  • 标志位掩码: 0x00000001

当代码中需要检查 I2C_FLAG_SB 是否被设置时,通常使用寄存器地址与标志位掩码进行位操作。

代码示例

假设我们要检查 I2C_FLAG_SB 是否被置位(即Start Bit的状态),代码可能如下:

uint32_t sr1_register_value = *((__IO uint32_t *)(BA_I2C + 0x14)); // 读取 SR1 寄存器的值
if (sr1_register_value & 0x00000001) {
    // I2C_FLAG_SB 标志被置位
}

 总结 `I2C_FLAG_SB` 通过其 32 位表示来描述特定寄存器(SR1)中的具体标志位,基地址和偏移量用于定位寄存器,而具体的掩码用于访问寄存器内的特定位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值