DSP280049C初学(5)-基于IIC的FM24CL16B存储器的使用

DSP280049C初学(5)-基于IIC的FM24CL16B存储器的使用

实现目的:
DSP280049C芯片能够通过IIC通讯实现写入和读取FM24CL16B存储器,其中本文参考了文章TMS320F280049 I2C IIC 相对于库函数操作CAT24C02 中文

1.userIIC.h头文件配置

#ifndef USER_INC_USERIIC_H_
#define USER_INC_USERIIC_H_

#include "stdint.h"

void userIIC_int(void);
void Write_bit_F24(uint16_t ADDR,uint16_t Data);
uint8_t Read_bit_F24(uint16_t ADDR);

2.userIIC.c源文件配置


#include "F28x_Project.h"
#include "driverlib.h"
#include "device.h"
#include "IQmathLib.h"
#include "userIIC.h"
#include "userSPI.h"

#define Delay_MinTime               5*1000
//  I2C PIN
#define SLAVE_ADDRESS               0x50
//初始化
void userIIC_int(void)
{
    //IO初始化
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_SDAA, GPIO_DIR_MODE_OUT);//GPIO_DIR_MODE_IN
    GPIO_setPadConfig(DEVICE_GPIO_PIN_SDAA, GPIO_PIN_TYPE_STD);//GPIO_PIN_TYPE_PULLUP
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_SDAA, GPIO_QUAL_ASYNC);

    GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCLA, GPIO_DIR_MODE_OUT);//GPIO_DIR_MODE_IN
    GPIO_setPadConfig(DEVICE_GPIO_PIN_SCLA, GPIO_PIN_TYPE_STD);//GPIO_PIN_TYPE_PULLUP
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCLA, GPIO_QUAL_ASYNC);

    GPIO_setPinConfig(DEVICE_GPIO_CFG_SDAA);
    GPIO_setPinConfig(DEVICE_GPIO_CFG_SCLA);
    //I2C模块初始化
    I2C_disableModule(I2CA_BASE);
    I2C_initMaster(I2CA_BASE, DEVICE_SYSCLK_FREQ, 100000, I2C_DUTYCYCLE_50);
    I2C_setBitCount(I2CA_BASE, I2C_BITCOUNT_8);
    I2C_setSlaveAddress(I2CA_BASE, SLAVE_ADDRESS);
    I2C_setConfig(I2CA_BASE, I2C_MASTER_SEND_MODE);
    I2C_setEmulationMode(I2CA_BASE, I2C_EMULATION_FREE_RUN);
    //中断源为:检测到停止位,寄存器访问准备就绪
    I2C_enableInterrupt(I2CA_BASE, I2C_INT_STOP_CONDITION | I2C_INT_REG_ACCESS_RDY);

    I2C_enableFIFO(I2CA_BASE);
    I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_RXFF | I2C_INT_TXFF);
    I2C_enableModule(I2CA_BASE);

}

/*
 * F24CL16:16Kbit的存储器,能够存储16*1024/8=2048个uint8类型的数据
 * function:向目标地址写入一个字节的数据
 * parameter-ADDR:地址位,范围为0-2047
 * parameter-Data:数据位,该地址为的数据大小,uint8类型,取值范围为0-255
 */
void Write_bit_F24(uint16_t ADDR,uint16_t Data)
{
    I2C_setDataCount(I2CA_BASE,2);

    I2C_putData(I2CA_BASE, ADDR);//发送需要写入的地址
    I2C_putData(I2CA_BASE, Data);//发送需要写入的数据

    I2C_setConfig(I2CA_BASE, I2C_MASTER_SEND_MODE);//设置为发送模式
    I2C_sendStartCondition(I2CA_BASE);//发送起始信号,并将刚刚配置的信息发送出
    I2C_sendStopCondition(I2CA_BASE);//发送终止信号
    DEVICE_DELAY_US(Delay_MinTime);
    SPIB_sendtwo(ADDR,Read_bit_F24(ADDR));
}

/*
 * F24CL16:16Kbit的存储器,能够存储16*1024/8=2048个uint8类型的数据
 * function:读取目标地址的数值
 * parameter-ADDR:地址位,范围为0-2047
 */
uint8_t Read_bit_F24(uint16_t ADDR)
{
    uint16_t Data;
    I2C_setDataCount(I2CA_BASE,1);
    I2C_putData(I2CA_BASE, ADDR);//发送地址信息
    I2C_setConfig(I2CA_BASE, I2C_MASTER_SEND_MODE);//配置为发送模式
    I2C_sendStartCondition(I2CA_BASE);//发送起始信号

    DEVICE_DELAY_US(Delay_MinTime);

    I2C_setConfig(I2CA_BASE, I2C_MASTER_RECEIVE_MODE);//配置为接收模式
    I2C_sendStartCondition(I2CA_BASE);//发送起始信号

    DEVICE_DELAY_US(Delay_MinTime);
    Data = I2C_getData(I2CA_BASE);//读取数据
    I2C_sendNACK(I2CA_BASE);//发送NACK
    I2C_sendStopCondition(I2CA_BASE);//发送停止信号
    DEVICE_DELAY_US(Delay_MinTime);
    return Data;
}

3.main.c主函数文件配置

#include "F28x_Project.h"
#include "driverlib.h"
#include "device.h"
#include "IQmathLib.h"
#include "userGPIO.h"
#include "userSCI.h"
#include "userSPI.h"
#include "userPWM.h"
#include "userADC.h"
#include "userIIC.h"
#include "stddef.h"

void main(void)
{
    Device_init();
    Device_initGPIO();
    DINT;
    Interrupt_initModule();
    Interrupt_initVectorTable();
    IER = 0x0000;
    IFR = 0x0000;
    DELAY_US(1000L);

    userGPIO_int ();
    userSCIA_int ();
    userIIC_int ();
    SPIB_int ();
//    EPWM1_int();
    ADC_int();
    EINT;
    ERTM;
    while (1)
    {
        Write_bit_F24(2000,255);
        Write_bit_F24(123,123);
//        SCIA_sendtwo(_IQtoF(a),_IQtoF(b));
//        SPIB_sendtwo(0,Read_bit_F24(2000));
        DELAY_US(1000000L);
    }
}

4.实现过程与结果

userIIC.c源文件配置中,写入函数的末尾加入了通过SPI向外打印数据函数,将写入函数中的地址和写入数据打印出来,运行结果如下图:
在这里插入图片描述

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony0925

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值