C2000实现IIC通讯
时间: 2024-03-05 19:53:26 浏览: 26
C2000系列的微控制器一般都带有硬件I2C接口,因此实现I2C通讯比较简单。以下是一个简单的C2000实现I2C通讯的代码示例:
```c
#include "F28x_Project.h"
#include "i2c.h"
#define I2C_SLAVE_ADDR 0x50
#define I2C_PAYLOAD_SIZE 4
Uint16 i2c_tx_data[I2C_PAYLOAD_SIZE] = {0x0000, 0x1111, 0x2222, 0x3333};
Uint16 i2c_rx_data[I2C_PAYLOAD_SIZE];
void i2c_init(void)
{
// 初始化I2C引脚
GPIO_SetupPinMux(34, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(34, GPIO_INPUT, GPIO_PUSHPULL);
GPIO_SetupPinMux(35, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(35, GPIO_INPUT, GPIO_PUSHPULL);
// 初始化I2C控制器
I2caRegs.I2CMDR.bit.IRS = 0;
I2caRegs.I2CPSC.all = 7; // 时钟分频器,设置为8
I2caRegs.I2CSAR.all = I2C_SLAVE_ADDR; // 设置从机地址
I2caRegs.I2CMDR.all = 0x0020; // 使能I2C控制器
}
void i2c_write(Uint16 addr, Uint16 *data, Uint16 len)
{
Uint16 i;
// 设置传输长度
I2caRegs.I2CCNT = len;
// 设置传输地址
I2caRegs.I2CDXR.all = addr;
// 发送数据
for (i = 0; i < len; i++) {
I2caRegs.I2CDXR.all = data[i];
}
// 等待传输完成
while (I2caRegs.I2CSTR.bit.ARDY == 0);
// 清除中断标志
I2caRegs.I2CSTR.all = I2C_CLR_INT_FLG;
}
void i2c_read(Uint16 addr, Uint16 *data, Uint16 len)
{
Uint16 i;
// 设置传输长度
I2caRegs.I2CCNT = len;
// 设置传输地址
I2caRegs.I2CDXR.all = addr;
// 发送读命令
I2caRegs.I2CMDR.all = 0x2620;
// 等待传输完成
while (I2caRegs.I2CSTR.bit.ARDY == 0);
// 读取数据
for (i = 0; i < len; i++) {
data[i] = I2caRegs.I2CDRR.all;
}
// 清除中断标志
I2caRegs.I2CSTR.all = I2C_CLR_INT_FLG;
}
void main(void)
{
// 初始化系统时钟
InitSysCtrl();
// 初始化GPIO
InitGpio();
// 初始化I2C控制器
i2c_init();
// 向从机写入数据
i2c_write(0x0000, i2c_tx_data, I2C_PAYLOAD_SIZE);
// 从从机读取数据
i2c_read(0x0000, i2c_rx_data, I2C_PAYLOAD_SIZE);
// 死循环
while (1);
}
```
在上述代码中,我们使用了C2000的I2C控制器来实现I2C通讯,具体实现步骤如下:
1. 初始化I2C引脚
2. 初始化I2C控制器,包括设置时钟分频器、从机地址等
3. 向从机写入数据,通过设置传输长度、传输地址和发送数据来实现
4. 从从机读取数据,通过设置传输长度、传输地址和发送读命令来实现
5. 清除中断标志,等待传输完成
6. 重复步骤3和4直到传输完成
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)