STC8H8K64U I2C主机模式相关寄存器

2024-04-25 03:12

本文主要是介绍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

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数据接收寄存器

这篇关于STC8H8K64U I2C主机模式相关寄存器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933562

相关文章

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施: