• STC8H8K64U I2C主机模式相关寄存器


    STC8H8K64U I2C主机模式相关寄存器

    STC8H8K64U-TSSOP20
    STC8H8K64U-TSSOP20

    I2CCFG I2C配置寄存器
    I2CMSCR I2C主机控制寄存器
    I2CMSST I2C主机状态寄存器
    I2CMSAUX I2C主机辅助控制寄存器
    I2CTXD I2C数据发送寄存器
    I2CRXD I2C数据接收寄存器

    I2CCFG I2C配置寄存器

    B7=ENI2C
    ENI2C:I2C 功能使能控制位
    0:禁止 I2C 功能
    1:允许 I2C 功能
    B6=MSSL
    MSSL:I2C 工作模式选择位
    0:从机模式
    1:主机模式
    B5-B0
    MSSPEED[5:0]:I2C 总线速度(等待时钟数)控制,I2C 总线速度=FOSC / 2 / (MSSPEED * 2 + 4)
    MSSPEED[5:0] 对应的时钟数
    0 4
    1 6
    2 8
    … …
    x 2x+4
    … …
    62 128
    63 130
    只有当 I2C 模块工作在主机模式时,MSSPEED 参数设置的等待参数才有效。此等待参数主要用于主机模式的以下几个信号:
    TSSTA:起始信号的建立时间(Setup Time of START)
    THSTA:起始信号的保持时间(Hold Time of START)
    TSSTO:停止信号的建立时间(Setup Time of STOP)
    THSTO:停止信号的保持时间(Hold Time of STOP)
    THCKL:时钟信号的低电平保持时间(Hold Time of SCL Low)
    THCKH:时钟信号的高电平保持时间(Hold Time of SCL High)
    例 1:当 MSSPEED=10 时,TSSTA=THSTA=TSSTO=THSTO=THCKL=24/FOSC
    例 2:当 24MHz 的工作频率下需要 400K 的 I2C 总线速度时,
    MSSPEED=(24M / 400K / 2 - 4) / 2=13

    I2CMSCR I2C主机控制寄存器

    B7=EMSI:主机模式中断使能控制位
    0:关闭主机模式的中断
    1:允许主机模式的中断
    51汇编示例:

    MOV  A,#80H;B7=1允许I2C主机模式的中断
    MOV  DPTR,#I2CMSCR
    MOVX  @DPTR,A
    
    • 1
    • 2
    • 3

    MSCMD[3:0]:主机命令
    0000:待机,无动作。
    0001:起始命令。
    发送 START 信号。如果当前 I2C 控制器处于空闲状态,即 MSBUSY(I2CMSST.7)为 0 时,写此命令会使控制器进入忙状态,硬件自动将 MSBUSY 状态位置 1,并开始发送 START 信号;若当前 I2C 控制器处于忙状态,写此命令可触发发送 START 信号。
    0010:发送数据命令。
    写此命令后,I2C 总线控制器会在 SCL 管脚上产生 8 个时钟,并将 I2CTXD 寄存器里面数据按位送到 SDA 管脚上(先发送高位数据)。
    0011:接收 ACK 命令。
    写此命令后,I2C 总线控制器会在 SCL 管脚上产生 1 个时钟,并将从 SDA 端口上读取的数据保存到 MSACKI(I2CMSST.1)。
    0100:接收数据命令。
    写此命令后,I2C 总线控制器会在 SCL 管脚上产生 8 个时钟,并将从 SDA 端口上读取的数据依次左移到 I2CRXD 寄存器(先接收高位数据)。
    0101:发送 ACK 命令。
    写此命令后,I2C 总线控制器会在 SCL 管脚上产生 1 个时钟,并将 MSACKO(I2CMSST.0)中的数据发送到 SDA 端口。
    0110:停止命令。
    发送 STOP 信号。写此命令后,I2C 总线控制器开始发送 STOP 信号。信号发送完成后,硬件自动将 MSBUSY 状态位清零。
    0111:保留。
    1000:保留。
    1001:起始命令+发送数据命令+接收 ACK 命令。
    此命令为命令 0001、命令 0010、命令 0011 三个命令的组合,下此命令后控制器会依次执行这三个命令。
    1010:发送数据命令+接收 ACK 命令。
    此命令为命令 0010、命令 0011 两个命令的组合,下此命令后控制器会依次执行这两个命令。
    1011:接收数据命令+发送 ACK(0)命令。
    此命令为命令 0100、命令 0101 两个命令的组合,下此命令后控制器会依次执行这两个命令。
    注意:此命令所返回的应答信号固定为 ACK(0),不受 MSACKO 位的影响。
    1100:接收数据命令+发送 NAK(1)命令。
    此命令为命令 0100、命令 0101 两个命令的组合,下此命令后控制器会依次执行这两个命令。
    注意:此命令所返回的应答信号固定为 NAK(1),不受 MSACKO 位的影响。

    I2CMSST I2C主机状态寄存器

    B7=MSBUSY:主机模式时 I2C 控制器状态位(只读位)
    0:控制器处于空闲状态
    1:控制器处于忙碌状态
    当 I2C 控制器处于主机模式时,在空闲状态下,发送完成 START 信号后,控制器便进入到忙碌状态,忙碌状态会一直维持到成功发送完成 STOP 信号,之后状态会再次恢复到空闲状态。
    B6=MSIF:主机模式的中断请求位(中断标志位)。当处于主机模式的 I2C 控制器执行完成寄存器 I2CMSCR中 MSCMD 命令后产生中断信号,硬件自动将此位 1,向 CPU 发请求中断,响应中断后 MSIF 位必须用软件清零。
    B1=MSACKI:主机模式时,发送“0011”命令到 I2CMSCR 的 MSCMD 位后所接收到的 ACK 数据。(只读位)
    B0=MSACKO:主机模式时,准备将要发送出去的 ACK 信号。当发送“0101”命令到 I2CMSCR 的 MSCMD位后,控制器会自动读取此位的数据当作 ACK 发送到 SDA。

    I2CMSAUX I2C主机辅助控制寄存器

    B0=WDTA:主机模式时 I2C 数据自动发送允许位
    0:禁止自动发送
    1:使能自动发送
    若自动发送功能被使能,当 MCU 执行完成对 I2CTXD 数据寄存器的写操作后,I2C 控制器会自动触发“1010”命令,即自动发送数据并接收 ACK 信号。

    I2CTXD I2C数据发送寄存器

    I2CRXD I2C数据接收寄存器

  • 相关阅读:
    【Java】设计模式之单例模式与工厂模式
    Windows系统编译libhv带SSL,开启WITH_OPENSSL
    java计算机毕业设计环巢湖区域旅游网站MyBatis+系统+LW文档+源码+调试部署
    达梦数据库使用和常见问题
    GBase 8c 存储技术---列存储引擎(二)
    万字长文详解对账系统设计,推荐收藏
    jQuery之事务相关操作
    vue+elementUI el-select 自定义搜索逻辑(filter-method)
    数字IC后端实现 |TSMC 12nm 与TSMC 28nm Metal Stack的区别
    Lostash同步Mysql数据到Elasticsearch(三)Elasticsearch模板与索引设置
  • 原文地址:https://blog.csdn.net/USALCD/article/details/138171543