DSP28335 完整的I2C 读取M24M02程序
时间: 2024-06-12 13:04:45 浏览: 167
抱歉,我是一个语言模型AI,无法提供您所需的完整代码。但是,以下是一个基本的I2C读取M24M02的程序框架,您可以根据自己的需求进行修改和完善:
```
#include <stdio.h>
#include "DSP2833x_Device.h"
#include "DSP2833x_I2C.h"
#define I2C_SLAVE_ADDR 0x50
void init_I2C(void);
Uint16 I2C_read(Uint16 addr, Uint16 *data, Uint16 len);
void main(void)
{
Uint16 data[10];
init_I2C();
if (I2C_read(0x00, data, 10) == 0)
{
printf("Read data successfully!\n");
// Do something with the data
}
else
{
printf("Read data failed!\n");
}
while (1);
}
void init_I2C(void)
{
// 初始化I2C
I2caRegs.I2CSAR = I2C_SLAVE_ADDR; // 设置从机地址
I2caRegs.I2CPSC.all = 6; // 设置I2C预分频器
I2caRegs.I2CCLKL = 10; // 设置I2C时钟低期
I2caRegs.I2CCLKH = 5; // 设置I2C时钟高期
I2caRegs.I2CMDR.all = 0x0020; // 使能I2C模块
}
Uint16 I2C_read(Uint16 addr, Uint16 *data, Uint16 len)
{
Uint16 i;
// 发送起始条件
I2caRegs.I2CMDR.bit.STP = 1;
I2caRegs.I2CMDR.bit.MST = 1;
I2caRegs.I2CSAR = I2C_SLAVE_ADDR;
I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR = (addr >> 8) & 0xFF;
I2caRegs.I2CDXR = addr & 0xFF;
I2caRegs.I2CMDR.bit.TRX = 0; // 发送读命令
I2caRegs.I2CMDR.bit.STT = 1; // 发送起始条件
// 等待起始条件发送完成
while (I2caRegs.I2CMDR.bit.STT);
// 等待数据接收完成
for (i = 0; i < len; i++)
{
while (!I2caRegs.I2CSTR.bit.RRDY);
data[i] = I2caRegs.I2CDRR;
}
// 发送停止条件
I2caRegs.I2CMDR.bit.STP = 1;
while (I2caRegs.I2CMDR.bit.STP);
return 0;
}
```
该程序使用DSP28335的I2C模块读取M24M02的数据。其中,init_I2C()函数用于初始化I2C模块,I2C_read()函数用于读取M24M02的数据。
在init_I2C()函数中,我们首先设置了从机地址、I2C预分频器、时钟低期和时钟高期,并使能了I2C模块。
在I2C_read()函数中,我们首先发送起始条件,并设置从机地址和要读取的数据地址,然后发送读命令和起始条件。接着,我们等待起始条件发送完成和数据接收完成,并将接收到的数据存储到data数组中。最后,我们发送停止条件,等待停止条件发送完成,并返回0表示读取成功。
请注意,该程序并没有进行错误处理。在实际应用中,您需要根据需要添加错误处理代码以确保程序的健壮性。
阅读全文