查看: 1667|回复: 2

[求助] lpc824 硬件i2c的应用

[复制链接]

该用户从未签到

105

主题

190

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1367
最后登录
2024-12-31
发表于 2024-5-9 15:48:01 | 显示全部楼层 |阅读模式
检索了坛子里ssd1306的驱动,spi居多,i2c的应用比较少,有一个还是基于mbed的,因为系统会挂载多个i2c所以还是想用硬件的
哪位有作品分享一下,zlg的lm75做了2次封装,理解起来也比较。。,

多谢
我知道答案 目前已有2人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3936

    主题

    7557

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    40194
    最后登录
    2025-9-5
    发表于 2024-5-10 09:49:22 | 显示全部楼层
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    190

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1367
    最后登录
    2024-12-31
     楼主| 发表于 2024-5-11 08:41:06 | 显示全部楼层
    本帖最后由 chuandaoxy 于 2024-5-11 08:49 编辑

    多谢guanguan,找到个845的硬件i2c驱动,
    static void OLED_Command (uint8_t Cmd)
    {
            i2c_master_transfer_t xfer = {0};

            xfer.data = (uint8_t *)&Cmd;
            xfer.dataSize = sizeof(Cmd);
            xfer.flags = kI2C_TransferDefaultFlag;
            xfer.slaveAddress = SSD1306_ADDRESS_1;
            xfer.direction = kI2C_Write;
            xfer.subaddress = 0x0;
            xfer.subaddressSize = 1;

            I2C_MasterTransferBlocking(I2C1, &xfer);

    }

    static void OLED_Data (uint8_t *Data)
    {
            i2c_master_transfer_t xfer = {0};

            /*Start Transfer*/
            xfer.data = Data;
            xfer.dataSize = sizeof(OLED_Buffer);
            xfer.flags = kI2C_TransferDefaultFlag;
            xfer.slaveAddress = SSD1306_ADDRESS_1;
            xfer.direction = kI2C_Write;
            xfer.subaddress = 0x40;
            xfer.subaddressSize = 1;

            I2C_MasterTransferBlocking(I2C1, &xfer);

    }

    上面两个关键的函数,下面是824的demo
    * Function to setup and execute I2C transfer request */
    static void SetupXferRecAndExecute(uint8_t devAddr,
                                                                       uint8_t *txBuffPtr,
                                                                       uint16_t txSize,
                                                                       uint8_t *rxBuffPtr,
                                                                       uint16_t rxSize)
    {
            /* Setup I2C transfer record */
            i2cmXferRec.slaveAddr = devAddr;
            i2cmXferRec.status = 0;
            i2cmXferRec.txSz = txSize;
            i2cmXferRec.rxSz = rxSize;
            i2cmXferRec.txBuff = txBuffPtr;
            i2cmXferRec.rxBuff = rxBuffPtr;

            Chip_I2CM_XferBlocking(LPC_I2C, &i2cmXferRec);
    }

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 05:46 , Processed in 0.089823 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表