DSP28335读写M24M02程序
时间: 2023-09-28 09:04:23 浏览: 138
以下是DSP28335读写M24M02程序的示例代码:
```
#include "F2837xD_device.h"
#include "F2837xD_Examples.h"
#include "F2837xD_SysCtrl.h"
#include "F2837xD_Gpio.h"
#include "F2837xD_I2c.h"
#define M24M02_ADDRESS 0x50 // M24M02芯片地址
#define EEPROM_PAGE_SIZE 64 // EEPROM每页大小
Uint16 data[EEPROM_PAGE_SIZE]; // 存储数据的数组
void initI2C(void)
{
// 初始化I2C
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1;
GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3;
GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3;
EDIS;
I2caRegs.I2CMDR.bit.IRS = 0; // 先将I2C模块复位
I2caRegs.I2CPSC.all = 7; // 时钟分频器,将I2C时钟设为150kHz
I2caRegs.I2CSAR.all = M24M02_ADDRESS; // 设置设备地址
I2caRegs.I2CMDR.all = 0x0020; // 允许NACK,设置为主模式
I2caRegs.I2CFFTX.all = 0x6000; // 清空TX FIFO
I2caRegs.I2CFFRX.all = 0x6000; // 清空RX FIFO
I2caRegs.I2CMDR.bit.IRS = 1; // 释放I2C模块复位
}
void readEEPROM(Uint16 addr, Uint16 length)
{
Uint16 i;
// 发送EEPROM地址
I2caRegs.I2CCNT = 1;
I2caRegs.I2CDXR.all = (addr >> 8) & 0xFF;
I2caRegs.I2CDXR.all = addr & 0xFF;
// 读取数据
I2caRegs.I2CCNT = length;
I2caRegs.I2CMDR.bit.STP = 0; // 发送重启信号
I2caRegs.I2CMDR.bit.TRX = 1; // 设置为接收模式
I2caRegs.I2CMDR.bit.STT = 1; // 发送起始信号
while(I2caRegs.I2CSTR.bit.ARDY == 0); // 等待接收完成
for(i = 0; i < length; i++)
{
data[i] = I2caRegs.I2CDRR.all;
}
I2caRegs.I2CMDR.bit.STP = 1; // 发送停止信号
}
void writeEEPROM(Uint16 addr, Uint16 length)
{
Uint16 i;
// 发送EEPROM地址
I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR.all = (addr >> 8) & 0xFF;
I2caRegs.I2CDXR.all = addr & 0xFF;
// 写入数据
for(i = 0; i < length; i++)
{
I2caRegs.I2CCNT = 1;
I2caRegs.I2CDXR.all = data[i];
while(I2caRegs.I2CSTR.bit.ARDY == 0); // 等待发送完成
}
// 发送停止信号
I2caRegs.I2CMDR.bit.STP = 1;
while(I2caRegs.I2CSTR.bit.STP == 1); // 等待停止信号发送完成
}
void main(void)
{
InitSysCtrl();
InitPieCtrl();
I2C_init();
initI2C();
EnableInterrupts();
// 读取EEPROM
readEEPROM(0, EEPROM_PAGE_SIZE);
// 修改数据
data[0] = 0x1234;
data[1] = 0x5678;
// 写入EEPROM
writeEEPROM(0, EEPROM_PAGE_SIZE);
while(1);
}
```
说明:
1. 初始化I2C模块时,需要将GPIO32和GPIO33配置为I2C模式,并设置时钟分频器,将I2C时钟设为150kHz。
2. 在读取EEPROM时,先发送EEPROM地址,然后设置为接收模式,发送起始信号,等待接收完成,最后发送停止信号。在接收数据时,需要等待ARDY标志位置1,表示数据已经接收完成,然后读取数据。
3. 在写入EEPROM时,先发送EEPROM地址,然后写入数据,每次写入一个字节,等待发送完成,最后发送停止信号。在写入数据时,需要等待ARDY标志位置1,表示数据已经发送完成。
4. 在实际应用中,需要根据EEPROM的具体规格来修改程序中的代码。
阅读全文