MSPM0G3507 硬件IIC EEPROM

 .H

#ifndef __MYAT24_H
#define __MYAT24_H
#include "ti_msp_dl_config.h"
#define I2C_ADDRESS_AT24C02 0x50 // AT24C02的I2C地址

void AT24C02_Init(void);
void AT24C02_WriteByte(uint8_t addr, uint8_t dat);
uint8_t AT24C02_ReadByte(uint8_t addr);

#endif

 .C

#include "myat24.h"
void AT24C02_Init(void) {
	
}

void AT24C02_WriteByte(uint8_t addr, uint8_t dat) {
    uint8_t temp[2];
    temp[0] = addr;
    temp[1] = dat;

    DL_I2C_fillControllerTXFIFO(I2C_1_INST, temp, 2);
    while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));

    DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_TX, 2);
    while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
    while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
    DL_I2C_flushControllerTXFIFO(I2C_1_INST);
}

uint8_t AT24C02_ReadByte(uint8_t addr) {
    uint8_t data;

    DL_I2C_fillControllerTXFIFO(I2C_1_INST, &addr, 1);
    while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
    DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_TX, 1);
    while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
    while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
    DL_I2C_flushControllerTXFIFO(I2C_1_INST);

    DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_RX, 1);
    while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
    while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
    data = DL_I2C_receiveControllerData(I2C_1_INST);

    return data;
}

### 关于MSPM0G3507硬件IIC接口 #### 硬件特性概述 MSPM0G3507的MCU版本支持最多2个IIC接口,这些接口能够实现高速数据传输并简化与其他设备之间的连接[^1]。 #### 初始化配置 为了正确初始化IIC接口,在编程时需设置相应的寄存器参数。通常涉及以下几个方面: - **波特率设定**:通过调整分频系数来决定通信速度。 - **地址指派**:为主机或从机指定唯一的七位地址。 - **使能状态**:开启或关闭特定通道的功能。 ```c // 假设使用C语言进行开发 void IIC_Init(void){ // 设置IIC模块的相关寄存器值 IIC_MODULE->CON |= (1 << IIC_EN); // 启用IIC外设 IIC_MODULE->CLKL = desired_low_period; // 配置SCL低电平周期 IIC_MODULE->CLKH = desired_high_period;// 配置SCL高电平周期 } ``` #### 数据收发流程 当完成基本配置之后,可以通过调用发送和接收函数来进行实际的数据交换。这里给出一个简单的例子说明如何启动一次写入操作: ```c int8_t IIC_Write(uint8_t slave_addr, uint8_t reg_addr, uint8_t *data, size_t length){ int i; // 发送起始条件 IIC_Start(); // 发送目标器件地址(读/写标志) if (!IIC_SendByte(slave_addr)){ return ERROR; } // 如果需要访问内部寄存器,则先传送寄存器地址 if(reg_addr != NO_REG_ADDR){ if(!IIC_SendByte(reg_addr)){ return ERROR; } } // 循环发送数据直到全部发出 for(i=0;i<length;i++){ if(!IIC_SendByte(data[i])){ return ERROR; } } // 结束本次通讯 IIC_Stop(); return SUCCESS; } ``` 上述代码片段展示了基于假设性的API定义下的典型IIC写过程。具体细节可能会因所使用的编译环境以及库文件的不同而有所变化,请参照官方提供的SDK文档获取最准确的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值