<!-- 本文件由脚本自动转换生成，请勿手动编辑 -->

> **《LKS32MC08x User Manual》I2C** . 完整目录见 [README.md](README.md)
>
> **声明**：本文档由芯片用户手册自动转换生成，仅供检索与查阅参考。Markdown 格式可被自由编译、修改，本文档不构成正式技术文件，相关内容以凌鸥创芯官方网站正式发布的手册为准。
>
> 南京凌鸥创芯电子有限公司 . (C) 2019, 版权归凌鸥创芯所有 . 机密文件，未经许可不得扩散

# I2C

## 概述

I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能，控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式。根据特定设备的需要，可以使用DMA以减轻CPU的负担。

## 主要特性

- 多主机功能：该模块既可做主设备也可做从设备。

I2C主设备功能：产生时钟、START和STOP事件。

I2C从设备功能：可编程的I2C硬件地址比较（仅支持7位硬件地址）、停止位检测。

- 根据系统分频，实现不同的通讯速度。
- 状态标志：发送器/接收器模式标志、字节发送结束标志、I2C总线忙标志。
- 错误标志：主模式时的仲裁丢失、地址/数据传输后的应答(ACK)错误、检测到错位的起始或停止条件。
- 一个中断向量，包含五个中断源：总线错误中断源、完成中断源、NACK中断源、硬件地址匹配中断源和传输完成中断源。
- 具单字节缓冲器的DMA。

## 功能描述

### 功能框图

本接口采用同步串行设计，实现CPU同外部设备之间的I2C传输。支持轮询和中断方式获得传输状态信息。本接口的主要功能模块如下图所示。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-1 I<sup>2</sup>C模块顶层功能框图

I2C接口同外界通讯只有SCL和SDA两根信号线。SDA为双向复用信号线，受到sda_oe控制。模块级，I2C接口信号包括，scl_i，sda_i，scl_o，sda_o和sda_oe。

scl_i：时钟信号。当I2C接口配置为从模式时，此为I2C总线的时钟输入信号。

sda_i：数据信号。当I2C接口接收数据时（无论主模式还是从模式），此为I2C总线的数据输入信号。

scl_o：时钟信号。当I2C接口配置为主模式时，此为I2C总线的时钟输出信号。

sda_o：数据信号。当I2C接口发送数据时（无论主模式还是从模式），此为I2C总线的数据输出信号。

sda_oe：数据使能信号。当sda_o输出时，sda_oe有效；当sda_i输入时，sda_oe无效。

### 功能说明

I2C模块接收和发送数据，并将数据从串行转换成并行，或并行转换成串行。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。

#### 模式选择

接口可以下述4种模式中的一种运行：

- 从发送模式
- 从接收模式
- 主发送模式
- 主接收模式

I2C接口默认主从均不使能。接口根据配置情况，进入主模式或者从模式。当仲裁丢失或产生停止信号时，主模式自动释放总线并产生相应异常中断。允许多主机功能。

主模式时，I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。起始条件和停止条件都是在主模式下由软件控制产生。

从模式时，I2C接口能识别它自己的地址(7位)。软件能够控制开启或禁止硬件地址比较功能，硬件地址比较功能可降低CPU的负担。只有地址匹配才通知CPU进行相关处理。

数据和地址按8位/字节进行传输，高位在前。跟在起始条件后的1个字节是地址。地址只在主模式发送。

在一个字节传输的8个时钟后的第9个时钟期间，接收器必须回送一个应答位(ACK)给发送器。

软件可以开启或禁止应答(ACK)，并可以设置I2C接口的地址。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-2基本I2C传输时序图

I2C接口没有FIFO，若一次性发送大量数据，为了降低CPU的负担，需DMA配合。I2C接口支持DMA传输（多字节传输）和非DMA传输（单字节传输）。上述四种传输模式进一步扩展为：

- 从模式单字节发送，从模式DMA发送
- 从模式单字节接收，从模式DMA接收
- 主模式单字节发送，主模式DMA发送
- 主模式单字节接收，主模式DMA接收

一般情况下，非DMA方式时，一次传输一个字节（可反复单次传输，需软件介入提供数据）。DMA方式，一次连续传输可以多字节（最大不超过16字节，极端情况一次传输一个字节，因无FIFO，每次DMA请求，仅传输一个字节，多轮完成本次数据传输）。

上述所有模式，遵循如下基本原则：

- 单字节发送，中断将在8-bit数据发送完毕且收到响应后（ACK/NACK均可）产生。
- 单字节接收，中断将在8-bit数据接收完毕后产生。
- DMA发送，正常情况下，中断将在数据发送完毕且收到响应后（ACK/NACK均可）产生。
- DMA接收，正常情况下，中断将在数据接收完毕后产生。
- 当I2C接口配置为主模式时，检测到错误后，I2C接口会主动释放总线，恢复到起始状态并产生中断信号。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-3 I2C传输模式决策与执行流程图

#### I2C接口从模式

默认情况下，I2C接口主模式和从模式均关闭。若工作在从模式，需使能从模式。为了产生正确的时序，必须通过系统寄存器SYS_CLK_DIV0设定I2C接口的工作时钟频率，I2C接口时钟基于系统高速主时钟进行分频，SYS_CLK_DIV0是I2C接口工作时钟的分频系数。

- 从模式下，I2C接口时刻在监控总线上的信号。一旦检测到起始条件，其将保存地址位数据和读写位数据。
- 从模式下，若硬件地址匹配功能开启，只有地址匹配的情况下，才会产生中断，通知CPU进行后续处理。若没有开启，每次收到地址及读写位数据，都将产生中断。
- 从模式下，单字节接收模式。每次收到一个字节的数据后，产生中断，此时I2C接口可拉低SCL，直至中断完成，继续后续操作。
- 从模式下，单字节发送模式。每次发送一个字节完毕后且收到响应（ACK/NACK），产生中断，此时I2C接口可拉低SCL，直至中断完成，继续后续操作。
- 从模式下，DMA接收模式。每次收到SIZE约定后的数据，产生中断，此时I2C接口可拉低SCL，直至中断完成。
- 从模式下，DMA发送模式。每次发送SIZE约定后的数据并收到响应（ACK/NACK），产生中断，此时I2C接口可拉低SCL，直至中断完成。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-5从模式下单字节传输示意图

##### 从模式单字节发送

地址匹配后，从发送器将字节从I2C_DATA寄存器经由内部移位寄存器发送到SDA线上。在I2C_DATA数据没有准备好之前，从设备可拉底SCL，直到待发送数据已写入I2C_DATA寄存器。I2C接口在发送完毕每个字节后都执行下列操作:

- 如果接收到ACK位，装载下一个字节数据，继续传输。装载过程中，可拉底SCL。
- 如果接收到NACK位，停止下一个字节的装载。
- 等待STOP事件，停止本次传输。

##### 从模式单字节接收

地址匹配后，从接收器将通过内部移位寄存器从SDA线接收到的数据存入I2C_DATA寄存器。I2C接口在接收到每个字节后都执行下列操作:

- 如果设置了ACK位，在一个字节接收完毕后，产生一个ACK应答脉冲。
- 如果清除了ACK位，在一个字节接收完毕后，产生一个NACK应答脉冲。
- 等待STOP事件，结束本次传输。

#### 从模式DMA传输

从模式下，一般仅配置I2C时钟、从地址以及硬件地址匹配使能，等待总线有访问请求后，根据芯片实际情况决定是否响应本次传输请求。DMA传输，其含义为每次传输多个字节的数据后，将产生中断判断是否还要继续传输。DMA传输的极端情况是仅传输一个字节的数据。DMA传输，一般建议开启硬件地址比较功能，NACK中断，传输完成中断。一般DMA传输的流程如下：

- 配置I2C从地址，使能I2C中断（可使能硬件地址比较中断）。地址匹配，产生I2C地址匹配中断，在中断处理函数中，配置DMA，准备好发送数据或者准备好接收地址。然后写I2C_SCR，准备开始传输或者停止本次传输。
- 若是接收模式，I2C_BCR.BURST_SIZE约定的字节接收完毕后，产生中断，软件判断是否继续接收，返回ACK/NACK响应。
- 若是发送模式，I2C_BCR.BURST_SIZE约定的字节发送完毕后，等待响应（ACK/NACK），产生中断，根据响应判断后续操作。
- 获得总线完成标志，本次传输完成。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-6 I2C从模式（发送/接收/DMA）的逻辑流程图

##### 从模式DMA发送

地址匹配后，配置完毕DMA。通过发送DMA请求，将字节从RAM搬移到I2C_DATA寄存器，然后经由内部移位寄存器发送到SDA线上。在I2C_DATA数据没有准备好之前，从设备可拉底SCL，直到待发送数据已写入I2C_DATA寄存器。从模式下发送数据，需要软件协助触发第一次DMA搬移，配置I2C_BCR.BYTE_CMPLT为1即可。I2C接口在发送完毕I2C_BCR.BURST_SIZE约定的字节数据后都执行下列操作:

- 如果接收到ACK位，配置DMA，准备下一批数据，继续传输。准备过程中，可拉低SCL。
- 如果接收到NACK位，停止准备下一批数据，停止本次传输。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-7从模式下多字节发送示意图

##### 从模式DMA接收

地址匹配后，配置好DMA，从SDA线接收到的数据先存入I2C_DATA寄存器，然后通过DMA搬移到RAM。I2C接口在接收到一个字节后都将执行DMA请求。完成I2C_BCR.BURST_SIZE约定的数据传输后，执行下列操作:

- 如果设置了ACK位，在I2C_BCR.BURST_SIZE约定数据接收完毕后，产生一个ACK应答脉冲。
- 如果清除了ACK位，在I2C_BCR.BURST_SIZE约定数据接收完毕后，产生一个NACK应答脉冲。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-8从模式下多字节接收示意图

#### I2C接口主模式

默认情况下，I2C接口主模式和从模式均关闭。若工作在主模式，需使能主模式。为了产生正确的时序，必须在系统寄存器CLK_DIV0中设定I2C接口的工作时钟。

I2C接口执行主模式传输之前，需要判断总线是否空闲。可读取I2C_MSCR寄存器的BIT3，查询当前总线状态。若总线处于忙的状态，可以开启I2C中断，通过收到STOP中断事件判断总线是否空闲下来。只有空闲状态下，才能正常发送START状态，以及后续的数据。

##### 主模式单字节传输

单字节传输，并不意味着仅仅传输一个字节数据，其含义为每次传输完一个字节的数据后，将产生中断判断是否还要继续传输。单字节传输的极端情况是仅传输一个字节的数据。图6为单字节传输的总线示意图。从图可知，一般单字节传输的流程如下：

- 判断总线是否空闲，若空闲，准备开始传输。
- 若是接收模式，一个字节接收完毕后，产生中断，软件判断是否继续接收，返回ACK/NACK响应。
- 若是发送模式，一个字节发送完毕后，等待响应（ACK/NACK），产生中断，根据响应判断后续操作。
- 发送总线STOP事件，本次传输完成。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-9主模式下单字节传输示意图

##### 主模式单字节发送

开始传输后，I2C接口将字节从I2C_DATA寄存器经由内部移位寄存器发送到SDA线上。在I2C_DATA数据没有准备好之前，主设备可不产生SCL时钟信号，直到待发送数据已写入I2C_DATA寄存器。I2C接口在发送完毕每个字节后都执行下列操作:

- 如果接收到ACK位，装载下一个字节数据，继续传输。装载过程中，可拉底SCL。
- 如果接收到NACK位，停止下一个字节的装载。
- 产生STOP事件，结束本次传输。

##### 主模式单字节接收

开始传输后，I2C接口将通过内部移位寄存器从SDA线接收到的数据存入I2C_DATA寄存器。I2C接口在接收到每个字节后都执行下列操作:

- 如果设置了ACK位，在一个字节接收完毕后，产生一个ACK应答脉冲。
- 如果清除了ACK位，在一个字节接收完毕后，产生一个NACK应答脉冲。
- 产生STOP事件，结束本次传输。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-10 I2C主模式发送和接收的逻辑流程图

##### 主模式DMA传输

DMA传输，其含义为每次传输多个字节的数据后，将产生中断判断是否还要继续传输。DMA传输的极端情况是仅传输一个字节的数据。DMA传输，一般建议开启NACK中断，传输完成中断。一般DMA传输的流程如下：

- 总线空闲，准备开始传输。
- 若是接收模式，I2C_BCR.BURST_SIZE约定的字节接收完毕后，产生中断，软件判断是否继续接收，返回ACK/NACK响应。
- 若是发送模式，I2C_BCR.BURST_SIZE约定的字节发送完毕后，等待响应（ACK/NACK），产生中断，根据响应判断后续操作。
- 发送STOP事件，本次传输完成。

##### 主模式DMA发送

总线空闲，配置完毕DMA。通过发送DMA请求，将字节从RAM搬移到I2C_DATA寄存器，然后经由内部移位寄存器发送到SDA线上。在I2C_DATA数据没有准备好之前，主设备可不产生SCL时钟，直到待发送数据已写入I2C_DATA寄存器。I2C接口在发送完毕SIZE约定的字节数据后都执行下列操作:

- 如果接收到ACK位，配置DMA，准备下一批数据，继续传输。准备过程中，可拉低SCL。
- 如果接收到NACK位，停止加载下一批数据。
- 如果本次数据发送完毕，停止后续发送。
- 产生STOP事件，停止本次传输。

异常情况是：

- 若从设备地址不匹配或者从设备没有准备好，此时从设备将返回NACK
- 主设备产生STOP事件，停止本次传输。
- 等待一段时间后，重新配置I2C寄存器，关闭DMA对应的通道使能信号，重新配置DMA寄存器，再次发送传输请求。关闭DMA对应通道是因为I2C有预取，DMA已经不是初始状态。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-11主模式下多字节发送示意图

##### 主模式DMA接收

总线空闲，配置好DMA从SDA线接收到的数据先存入I2C_DATA寄存器，然后通过DMA搬移到RAM。I2C接口在接收到一个字节后都将执行DMA请求。完成I2C_BCR.BURST_SIZE约定的数据传输后，执行下列操作:

- 如果设置了ACK位，在I2C_BCR.BURST_SIZE约定数据接收完毕后，产生一个ACK应答脉冲。
- 如果清除了ACK位，在I2C_BCR.BURST_SIZE约定数据接收完毕后，产生一个NACK应答脉冲。
- 产生STOP事件，停止本次传输。

异常情况是：

- 若从设备地址不匹配或者从设备没有准备好，此时从设备将返回NACK。
- 主设备产生STOP事件，停止本次传输。
- 等待一段时间后，重新配置I2C寄存器，再次发送传输请求。因为上一次没有收到有效数据，DMA并没有任何动作，所以不用重置DMA。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-12主模式下多字节接收示意图

#### I2C总线异常处理

在一个地址或数据字节传输期间，当I2C接口检测到一个外部的停止或起始条件则产生总线错误。一般而言，产生总线错误是由于总线上有干扰、某些I2C设备没有同步于本I2C网络自行发送了START事件/STOP事件。根据I2C协议规定，发生总线错误的时候，在收到START事件/STOP事件后要重置本I2C设备的接口逻辑。对于从设备而言，这个操作是没有问题的；对于主设备而言，总线错误强行要求其释放总线并重置其I2C接口逻辑。因为主设备是不响应外部START和STOP事件的，发生总线错误后，需要中断处理函数处理本次异常，并指导主设备继续监视总线情况，以便后续执行I2C总线传输。

本I2C接口。主模式下，总线错误可被检测到同时总线错误中断也会产生；从模式下，总线错误将触发地址数据被接收，同时让I2C接口恢复空闲状态并产生中断。

#### DMA传输

在大容量数据传输应用下，I2C接口支持DMA传输，减轻CPU的负担。一次传输，最大传输量为16字节，最小传输量为1字节。因I2C无FIFO，I2C发送一次DMA请求，DMA只能搬移一个字节数据。若要实现多字节搬移，DMA需配置为多轮搬移，每一轮搬移一个字节的方式。

在接收到新的数据后，硬件自动产生DMA请求，通过DMA模块将数据搬移到RAM中。在发送新数据前，硬件自动产生DMA请求，通过DMA模块将数据从RAM中搬移到I2C接口。

DMA传输需要配置DMA模块相应寄存器。

因I2C接口支持DMA传输，也支持CPU传输。两者区别在于DMA传输，发送的数据来自DMA的搬移；CPU传输，发送的数据来自CPU的搬移。

DMA传输，推荐软件配置流程如下：

- 初始化DMA模块，将本次发送的数据来源，接收的数据去向配置好，传输长度配置完毕。
- 初始化GPIO模块，将I2C复用的GPIO配置完毕。
- 初始化I2C接口，I2C_CFG/I2C_BCR等寄存器配置完毕。
- 主模式下，触发I2C接口，进入发送状态；从模式下，等待主发送传输请求。

若I2C接口为从发送模式，需要考虑预取，I2C_BCR
B\[4\]为预取开关。一般从模式传输的时候，可以开启硬件地址比较(I2C_ADDR
B\[7\])，可选择是否开启硬件地址比较中断使能(I2C_BCR B\[6\])。

- 开启硬件地址比较中断，从设备收到的地址同自身匹配成功后，会产生中断。通知软件此时主设备请求获得从设备数据，软件判断是否接收，若接收就回ACK，软件需要I2C_BCR
  B\[4\]置1，协助硬件预取第一次传输的数据；否则就回NACK。
- 关闭硬件地址比较中断，一旦总线上出现START事件，从设备硬件预取第一次传输数据，无论从设备是否地址匹配成功。匹配成功，也不会产生地址匹配中断，直接开始数据传输。匹配不成功，从设备不会传输数据。此时，若匹配不成功，因为I2C有预取的操作，为后续匹配成功后传输正常，需要对DMA进行清除操作。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

I2C波特率：I2C波特率 = (系统频率 / (CLK_DIV0 + 1) ) / 17

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图16-14 I2C总线错误处理及中断管理流程图

## 寄存器

### 地址分配

I2C模块寄存器的基地址是0x4001_0400，寄存器列表如下：

表16-1
I2C寄存器地址分配表

||||
|---|---|---|
|名称|偏移|说明|
|I2C0_ADDR|0x00|I2C地址寄存器|
|I2C0_CFG|0x04|I2C配置寄存器|
|I2C0_SCR|0x08|I2C状态寄存器|
|I2C0_DATA|0x0C|I2C数据寄存器|
|I2C0_MSCR|0x10|I2C主模式寄存器|
|I2C0_BCR|0x14|I2C DMA传输控制寄存器|

### 寄存器说明

#### I2C0_ADDR 地址寄存器

地址：0x4001_0400

复位值：0x0

表16-2地址寄存器I2C0_ADDR

||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0||
|||||||||ADDR_CMP|ADDR||||||||
|||||||||RW|RW||||||||
|||||||||0|0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7\]|ADDR_CMP|I2C硬件地址比较使能开关，只有在DMA模式下开启才有效。默认值为0。1：使能0：关闭|
|\[6:0\]|ADDR|从模式下，I2C设备硬件地址。主模式下，仅在DMA模式下，才需填入从设备地址；否则，从设备地址写入I2C_DATA寄存器。|

#### I2C0_CFG 系统控制寄存器

地址：0x4001_0404

复位值：0x0

表16-3系统控制寄存器I2C0_CFG

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||IE|TC_IE|BUS_ERR_IE|STOP_IE|||MST_MODE|SLV_MODE|
|||||||||||||||||
|||||||||||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7\]|IE|I2C中断使能信号。默认值为0。1：使能I2C中断0：关闭I2C中断|
|\[6\]|TC_IE|I2C数据传输完成中断使能信号。默认值为0。1：使能此中断源0：屏蔽此中断源|
|\[5\]|BUS_ERR_IE|I2C总线错误事件中断使能信号。默认值为0。1：使能此中断源0：屏蔽此中断源|
|\[4\]|STOP_IE|I2CSTOP事件中断使能信号。默认值为0。1：使能此中断源0：屏蔽此中断源|
|\[3:2\]||NA|
|\[1\]|MST_MODE|I2C主模式使能信号。默认值为0。1：使能主模式0：关闭主模式|
|\[0\]|SLV_MODE|I2C从模式使能信号。默认值为0。1：使能从模式0：关闭从模式|

#### I2C0_SCR 状态控制寄存器

地址：0x4001_0408

复位值：0x0

表16-4状态控制寄存器I2C0_SCR

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||STT_ERR|LOST_ARB|STOP_EVT|BYTE_CMPLT|ADDR_DATA|DATA_DIR|RX_ACK|Done|
|||||||||RW|RW|RW|RW|RW|RW|RW|RW|
|||||||||0|0|0|0|0|0|0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7\]|STT_ERR|总线错误状态标志位，仅用于主模式下，写0清除。0：无START/STOP总线错误1：有START/STOP总线错误|
|\[6\]|LOST_ARB|总线仲裁丢失状态标志位，仅用于主模式下，发生总线仲裁丢失事件将此位置1，无中断事件产生，在字节完成中断中需查此位。总线上任何START事件将导致硬件清除此位。0：无总线仲裁丢失错误发生1：有总线仲裁丢失错误发生|
|\[5\]|STOP_EVT|STOP事件状态标志位，主从模式均可使用，写0清除。0：无STOP事件1：有STOP事件|
|\[4\]|BYTE_CMPLT|ACK发生控制位，主从模式均可使用。发送前配置好改位。单字节模式下，发送字节完毕后硬件自动清除；多字节模式下，全部发送完毕后硬件自动清除。0：字节发送完成，返回NACK回应1：字节发送完成，返回ACK回应|
|\[3\]|ADDR_DATA|Address数据标志位，主从模式均可使用，写0清除。0：发送或接收到的数据非Address数据1：发送或接收到的数据是Address数据|
|\[2\]|DATA_DIR|发送或接收控制位，主从模式均可使用，通过此位决定数据传输方向。总线上START事件可清除此位，同时也可写0清除此位。0：接收1：触发发送|
|\[1\]|RX_ACK|接收响应标志位，主从模式均可使用，总线上START事件可清除此位，同时也可写0清除此位。0：本I2C接口发送数据，接收到ACK响应1：本I2C接口发送数据，接收到NACK响应|
|\[0\]|Done|传输完成状态标志位，主从模式均可使用，总线上START事件可清除此位，同时也可写0清除此位。0：传输未完成1：传输已完成|

一般，进入中断后，需读取I2C_SCR寄存器，获得当前I2C总线状态及当前传输处于什么阶段；然后，对I2C_SCR进行写操作，写入不同的值，软件通知硬件下一步如何处理。

#### I2C0_DATA 数据寄存器

地址：0x4001_040C

复位值：0x0

表16-5数据寄存器I2C0_DATA

||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0||
|||||||||DATA|||||||||
|||||||||RW|||||||||
|||||||||0|||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7:0\]|DATA|数据寄存器，主从模式均可使用。对寄存器写入，数据进入I2C内部发送部分，无法直接读取到刚写入数据。读出操作，获得I2C接收到的数据。主/从接收模式：存放接收的数据。单字节传输，需等待完成中断；多字节传输，数据会被DMA搬移到RAM，仅保留最后一个字节。从发送模式：存放发送的数据。一般先填好数据，然后触发I2C_SCR的BIT\[2\]。多字节传输，数据会被DMA从RAM搬移到I2C_DATA，然后由I2C接口发送。主发送模式：单字节传输，I2C_DATA填入地址；多字节传输，I2C_ADDR填入地址，I2C_DATA数据由DMA传输。|

#### I2C0_MSCR 主模式寄存器

地址：0x4001_0410

复位值：0x0

表16-6主模式寄存器I2C0_MSCR

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||||||BUSY|MST_CHECK|RESTART|START|
|||||||||||||RW|RW|RW|RW|
|||||||||||||0|0|0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:4\]||未使用|
|\[3\]|BUSY|I2C总线，闲忙状态。1，检测到START事件，忙碌；0，检测到STOP事件，空闲。|
|\[2\]|MST_CHECK|主模式争抢总线标志位。争抢到总线，置1；STOP事件或者发生总线冲突本模块释放总线，置0。|
|\[1\]|RESTART|再次触发START事件，写1有效。发送START完毕，硬件清0。I2C_CFG\[1\]置1，才能实现写1操作。|
|\[0\]|START|触发START事件并发送地址数据至总线，写1有效。I2C_CFG\[1\]置1，才能实现写1操作。|

#### I2C0_BCR DMA传输控制寄存器

地址：0x4001_0414

复位值：0x0

表16-7DMA传输控制寄存器I2C0_BCR

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||BURST_NACK|BURST_ADDR_CMP|BUSRT_EN||BURST_SIZE||||
|||||||||RW|RW|RW||RW||||
|||||||||0|0|0||0||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7\]|BURST_NACK|I2C传输，NACK事件中断使能信号。1：使能此中断源0：屏蔽此中断源|
|\[6\]|BURST_ADDR_CMP|I2C传输，硬件地址匹配中断使能信号。1：使能此中断源0：屏蔽此中断源|
|\[5\]|BUSRT_EN|I2C多数据传输使能，需要采用DMA方式。1：使能0：关闭|
|\[4\]|SLV_DMA_PREF|I2C多数据传输。从模式执行DMA方式发送，触发硬件预取第一个字节。硬件自动清零。1：使能0：关闭|
|\[3:0\]|BURST_SIZE|I2C数据传输长度寄存器，用于多字节传输。实际传输字节数 = B\[3:0\] + 1|

