这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【STCAi8051U】主机模式下I2C有关的寄存器说明

共1条 1/1 1 跳转至

【STCAi8051U】主机模式下I2C有关的寄存器说明

专家
2025-07-07 15:18:10     打赏

一、配置寄存器(I2CCFG),总线速度控制 1

图片1.png

ENI2CI2C 功能使能控制位

0:禁止 I2C 功能

1:允许 I2C 功能

MSSLI2C 工作模式选择位

0:从机模式

1:主机模式

MSSPEED[5:0]I2C 总线速度控制的低 6 位,和 I2CPSCR 中的 MSSPEED[13:6]合并为 14 位分频器

二、主机时钟分频寄存器(I2CPSCR),总线速度控制 2

图片2.png

MSSPEED[13:6]I2CCFG 中的 MSSPEED[5:0]合并为 14 MSSPEED[13:0]分频器

MSSPEED[13:0]I2C 总线速度(等待时钟数)控制,I2C 总线速度=SYSCLK / 2 / (MSSPEED * 2 + 4)

I2C 最快速度为 SYSCLK/8

图片3.png

只有当 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

图片4.png

1:当 MSSPEED10 时,TSSTATHSTATSSTOTHSTOTHCKL24/FOSC

2:当 24MHz 的工作频率下需要 400K I2C 总线速度时,MSSPEED(24M / 400K / 2 - 4) / 213

 三、主机控制寄存器(I2CMSCR

图片5.png

EMSI:主机模式中断使能控制位

0:关闭主机模式的中断

1:允许主机模式的中断

MSCMD[3:0]:主机命令

0000:待机,无动作。

0001:起始命令。

发送 START 信号。如果当前 I2C 控制器处于空闲状态,即 MSBUSYI2CMSST.7)为 0 时,写此命令会使控制器进入忙状态,硬件自动将 MSBUSY 状态位置 1,并开始发送 START 信号;若当前 I2C 控制器处于忙状态,写此命令可触发发送 START 信号。发送 START 信号的波形如下图所示:

图片6.png

0010:发送数据命令。

写此命令后,I2C 总线控制器会在 SCL 管脚上产生 8 个时钟,并将 I2CTXD 寄存器里面数据按位送到 SDA 管脚上(先发送高位数据)。发送数据的波形如下图所示:

图片7.png

 0011:接收 ACK 命令。

写此命令后,I2C 总线控制器会在 SCL 管脚上产生 1 个时钟,并将从 SDA 端口上读取的数据保存到 MSACKII2CMSST.1)。接收 ACK 的波形如下图所示:

图片8.png

0100:接收数据命令。

写此命令后,I2C 总线控制器会在 SCL 管脚上产生 8 个时钟,并将从 SDA 端口上读取的数据依次左移到 I2CRXD 寄存器(先接收高位数据)。接收数据的波形如下图所示:

 图片9.png

0101:发送 ACK 命令。

写此命令后,I2C 总线控制器会在 SCL 管脚上产生 1 个时钟,并将 MSACKOI2CMSST.0)中的数据发送到 SDA 端口。发送 ACK 的波形如下图所示:

图片10.png

0110:停止命令。

发送 STOP 信号。写此命令后,I2C 总线控制器开始发送 STOP 信号。信号发送完成后,硬件自动将 MSBUSY 状态位清零。STOP 信号的波形如下图所示:

图片11.png

0111:保留。

1000:保留。

1001:起始命令+发送数据命令+接收 ACK 命令。

此命令为命令 0001、命令 0010、命令 0011 三个命令的组合,下此命令后控制器会依次执行这三个命令。

1010:发送数据命令+接收 ACK 命令。

此命令为命令 0010、命令 0011 两个命令的组合,下此命令后控制器会依次执行这两个命令。

1011:接收数据命令+发送 ACK(0)命令。

此命令为命令 0100、命令 0101 两个命令的组合,下此命令后控制器会依次执行这两个命令。

注意:此命令所返回的应答信号固定为 ACK0),不受 MSACKO 位的影响。

1100:接收数据命令+发送 NAK(1)命令。

此命令为命令 0100、命令 0101 两个命令的组合,下此命令后控制器会依次执行这两个命令。

注意:此命令所返回的应答信号固定为 NAK1),不受 MSACKO 位的影响。

四、主机辅助控制寄存器(I2CMSAUX

图片12.png

WDTA:主机模式时 I2C 数据自动发送允许位

0:禁止自动发送

1:使能自动发送

若自动发送功能被使能,当 MCU 执行完成对 I2CTXD 数据寄存器的写操作后,I2C 控制器会自动触发“1010”命令,即自动发送数据并接收 ACK 信号。

 五、主机状态寄存器(I2CMSST

图片13.png

MSBUSY:主机模式时 I2C 控制器状态位(只读位)

0:控制器处于空闲状态

1:控制器处于忙碌状态

I2C 控制器处于主机模式时,在空闲状态下,发送完成 START 信号后,控制器便进入到忙碌状态,忙碌状态会一直维持到成功发送完成 STOP 信号,之后状态会再次恢复到空闲状态。

MSIF:主机模式的中断请求位(中断标志位)。当处于主机模式的 I2C 控制器执行完成寄存器 I2CMSCRMSCMD 命令后产生中断信号,硬件自动将此位 1,向 CPU 发请求中断,响应中断后 MSIF 位必须用软件清零。

MSACKI:主机模式时,发送“0011”命令到 I2CMSCR MSCMD 位后所接收到的 ACK 数据。(只读位)

MSACKO:主机模式时,准备将要发送出去的 ACK 信号。当发送“0101”命令到 I2CMSCR MSCMD位后,控制器会自动读取此位的数据当作 ACK 发送到 SDA





关键词: 菜鸟学单片机     STCAi8051U     I2C主机模式    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]