zoukankan      html  css  js  c++  java
  • linux I2C 读写 tlv320dac3100

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <string.h>
    #include <linux/i2c.h>
    #include <linux/i2c-dev.h>
    
    #define DAC3100_DEV  "/dev/i2c-2"
    #define DAC3100_ADDR 0x18
    
    static unsigned char g_page = 0xFF;
    
    void dac3100_change_page(int fd, unsigned char page)
    {
        int err;
        struct i2c_rdwr_ioctl_data data;
        struct i2c_msg msg;
    
        if (g_page == page) {
            return;
        }
    
        data.nmsgs = 1;
        data.msgs  = &msg;
        msg.addr  = DAC3100_ADDR;
        msg.flags = 0;
        msg.len   = 2;
        msg.buf   = (unsigned char*)malloc(2);
        msg.buf[0] = 0;
        msg.buf[1] = page;
    
        err = ioctl (fd, I2C_RDWR, (unsigned long)&data);
        if (err < 0) {
            printf("ERR: I2C_RDWR => %d\n", err);
        }
        g_page = page;
        free(msg.buf);
    }
    
    
    unsigned char dac3100_read(int fd,
            unsigned char page,
            unsigned char reg)
    {
        int err;
        struct i2c_rdwr_ioctl_data data;
        struct i2c_msg msg[2];
    
        unsigned char rst;
        dac3100_change_page(fd, page);
        
        data.nmsgs = 2;
        data.msgs  = msg;
        msg[0].addr  = DAC3100_ADDR;
        msg[0].flags = 0;
        msg[0].len   = 1;
        msg[0].buf   = ®
        msg[1].addr  = DAC3100_ADDR;
        msg[1].flags = I2C_M_RD;
        msg[1].len   = 1;
        msg[1].buf   = &rst;
    
        err = ioctl(fd, I2C_RDWR, (unsigned long)&data);
        if (err < 0) {
            printf("ERR: DAC3100 READ => %d\n", err);
        }
    
        return rst;
    }
    
    int main(int argc, char** argv)
    {
        int fd, err;
        int page, reg, pcnt = 3;
        unsigned char pages[] = {0, 1, 3};
    
        fd = open(DAC3100_DEV, 0, O_RDWR);
        if (fd < 0) {
            printf("ERR: device open failed!");
            return -1;
        }
    
        err = ioctl(fd, I2C_TENBIT, 0);
        if (err < 0) {
            printf("ERR: IOCTL I2C_TENBIT => %d\n", err);
        }
    
        for (page = 0; page < pcnt; page++) {
            printf("------- PAGE %d -------\n", pages[page]);
            for (reg = 0; reg < 128; reg++) {
                printf("%02X ", dac3100_read(fd, pages[page], reg));
                if ((reg % 8) == 7) {
                    printf("\n");
                }
            }
        }
    
    
        close(fd);
        return 0;
    }
    
  • 相关阅读:
    C#实现注册码
    多表链接 Left join
    Repeater 一行显示两列数据
    Repeater一行显示数据库中多行表记录
    HP QC(Quality Center)在Windows 7 IE8 IE9下不能工作解决方案
    Android应用换肤总结
    Lua 第一个应用程序 Hello World
    JNI 技术与 Android 应用
    NSAutoreleasePool' is unavailable: not avail
    1-2基础控件
  • 原文地址:https://www.cnblogs.com/ouuy/p/2739334.html
Copyright © 2011-2022 走看看