示例#1
0
static void i2c_send_byte(int Grp, unsigned char c)
{
    int i;

    local_irq_disable();

    for (i = 0; i < 8; i ++) {
        DELAY(1);
        i2c_clr(Grp, PINI2C_SCL);

        DELAY(1);
        if (c & (1<<(7-i)))
            i2c_set(Grp, PINI2C_SDA);
        else
            i2c_clr(Grp, PINI2C_SDA);

        DELAY(1);
        i2c_set(Grp, PINI2C_SCL);

        DELAY(1);
        i2c_clr(Grp, PINI2C_SCL);
    }

    local_irq_enable();

    DELAY(1);
}
示例#2
0
static void i2c_send_ack(void)
{
    DELAY(1);
    i2c_clr(SCL);
    DELAY(1);
    i2c_set(SDA);
    DELAY(1);
    i2c_set(SCL);
    DELAY(1);
    i2c_clr(SCL);
    DELAY(1);
    i2c_clr(SDA);
    DELAY(1);
}
示例#3
0
/*  receives an acknowledge from I2C rountine.
 *
 *  @return value: 0--Ack received; 1--Nack received
 *          
 */
static int i2c_receive_ack(void)
{
    int nack;
    unsigned char regvalue;
    
    DELAY(1);
    
    regvalue = HW_REG(GPIO_0_DIR);
    regvalue &= (~SDA);
    HW_REG(GPIO_0_DIR) = regvalue;
    
    DELAY(1);
    i2c_clr(SCL);
    DELAY(1);
    i2c_set(SCL);
    DELAY(1);
    
    

    nack = i2c_data_read();

    DELAY(1);
    i2c_clr(SCL);
    DELAY(1);
  //  i2c_set(SDA);
  //  DELAY(1);

    if (nack == 0)
        return 1; 

    return 0;
}
示例#4
0
/*  receives a character from I2C rountine.
 *
 *  @return value: character received
 *
 */
static unsigned char i2c_receive_byte(void)
{
    int j=0;
    int i;
    unsigned char regvalue;

    local_irq_disable();
    for (i=0; i<8; i++)
    {
        DELAY(1);
        i2c_clr(SCL);
        DELAY(1);
        i2c_set(SCL);
        
        regvalue = HW_REG(GPIO_0_DIR);
        regvalue &= (~SDA);
        HW_REG(GPIO_0_DIR) = regvalue;
        DELAY(1);
        
        if (i2c_data_read())
            j+=(1<<(7-i));

        DELAY(1);
        i2c_clr(SCL);
    }
    local_irq_enable();
    DELAY(1);
   // i2c_clr(SDA);
   // DELAY(1);

    return j;
}
示例#5
0
static int i2c_receive_ack(int Grp)
{
    int nack;
    unsigned char regvalue;

    DELAY(1);
    
    regvalue  = HW_REG(GPIO_I2C_DIR[Grp]);
    regvalue &= (~GPIO_I2C_BIT[Grp][PINI2C_SDA]);
    HW_REG(GPIO_I2C_DIR[Grp]) = regvalue;

    DELAY(1);
    i2c_clr(Grp, PINI2C_SCL);

    DELAY(1);
    i2c_set(Grp, PINI2C_SCL);

    DELAY(1);
    nack = i2c_data_read(Grp);
    
    DELAY(1);       
    i2c_clr(Grp, PINI2C_SCL);

    DELAY(1);

    return !nack;
}
示例#6
0
static unsigned char i2c_receive_byte(int Grp)
{
    int j = 0;
    int i;
    unsigned char regvalue;

    local_irq_disable();

    for (i = 0; i < 8; i ++) {
        DELAY(1);
        i2c_clr(Grp, PINI2C_SCL);

        DELAY(2);
        i2c_set(Grp, PINI2C_SCL);

        regvalue  = HW_REG(GPIO_I2C_DIR[Grp]);
        regvalue &= (~GPIO_I2C_BIT[Grp][PINI2C_SDA]);
        HW_REG(GPIO_I2C_DIR[Grp]) = regvalue;

        DELAY(1);
        if (i2c_data_read(Grp)) {
            j+=(1<<(7-i));
        }

        DELAY(1);
        i2c_clr(Grp, PINI2C_SCL);
    }

    local_irq_enable();

    DELAY(1);

    return j;
}
示例#7
0
/*
 * sends a stop bit via I2C rountine.
 *
 */
static void i2c_stop_bit(void)
{
        /* clock the ack */
        DELAY(1);
        i2c_set(SCL);
        DELAY(1); 
        i2c_clr(SCL);  

        /* actual stop bit */
        DELAY(1);
        i2c_clr(SDA);
        DELAY(1);
        i2c_set(SCL);
        DELAY(1);
        i2c_set(SDA);
        DELAY(1);
}
示例#8
0
/*
 * sends a start bit via I2C rountine.
 *
 */
static void i2c_start_bit(void)
{
        DELAY(1);
        i2c_set(SDA | SCL);
        DELAY(1);
        i2c_clr(SDA);
        DELAY(1);
}
示例#9
0
static void i2c_send_ack(int Grp)
{
    DELAY(1);
    i2c_clr(Grp, PINI2C_SCL);

    DELAY(1);
    i2c_set(Grp, PINI2C_SDA);

    DELAY(1);
    i2c_set(Grp, PINI2C_SCL);

    DELAY(1);
    i2c_clr(Grp, PINI2C_SCL);

    DELAY(1);
    i2c_clr(Grp, PINI2C_SDA);

    DELAY(1);
}
示例#10
0
static void i2c_start_bit(int Grp)
{
    DELAY(1);
    i2c_set(Grp, PINI2C_DAT);

    DELAY(1);
    i2c_clr(Grp, PINI2C_SDA);

    DELAY(2);
}
示例#11
0
static void i2c_stop_bit(int Grp)
{
    /* clock the ack */
    DELAY(1);    
    i2c_set(Grp, PINI2C_SCL);

    DELAY(1); 
    i2c_clr(Grp, PINI2C_SCL);

    /* actual stop bit */
    DELAY(1);
    i2c_clr(Grp, PINI2C_SDA);

    DELAY(1);
    i2c_set(Grp, PINI2C_SCL);

    DELAY(1);
    i2c_set(Grp, PINI2C_SDA);

    DELAY(1);
}
示例#12
0
/*
 * sends a character over I2C rountine.
 *
 * @param  c: character to send
 *
 */
static void i2c_send_byte(unsigned char c)
{
    int i;
    local_irq_disable();
    for (i=0; i<8; i++)
    {
        DELAY(1);
        i2c_clr(SCL);
        DELAY(1);

        if (c & (1<<(7-i)))
            i2c_set(SDA);
        else
            i2c_clr(SDA);

        DELAY(1);
        i2c_set(SCL);
        DELAY(1);
        i2c_clr(SCL);
    }
    DELAY(1);
   // i2c_set(SDA);
    local_irq_enable();
}
示例#13
0
static int __init gpio_i2c_init(void)
{
    int ret;
    //unsigned int reg;
    
    ret = misc_register(&gpioi2c_dev);
    if(0 != ret)
    	return -1;
        
#if 1         
    //printk(KERN_INFO OSDRV_MODULE_VERSION_STRING "\n");            
    //reg = HW_REG(SC_PERCTRL1);
    //reg |= 0x00004000;
    //HW_REG(SC_PERCTRL1) = reg;
    i2c_set(SCL | SDA);
#endif        		
    return 0;    
}
示例#14
0
文件: mraa-i2c.c 项目: Hbrinj/mraa
int
process_command(int argc, char** argv)
{
    int status = 0;
    if (strcmp(argv[1], "help") == 0) {
        print_help();
        return 0;
    } else if (strcmp(argv[1], "version") == 0) {
        print_version();
        return 0;
    } else if (strcmp(argv[1], "list") == 0) {
        print_busses();
        return 0;
    } else if (strcmp(argv[1], "detect") == 0) {
        if (argc == 3) {
            int bus = strtol(argv[2], NULL, 0);
            i2c_detect_devices(bus);
            return 0;
        } else {
            print_command_error();
            return 1;
        }
    } else if ((strcmp(argv[1], "get") == 0) || (strcmp(argv[1], "getrpt") == 0)) {
        if (argc == 5) {
            int interation = 0;
            mraa_boolean_t should_repeat = strcmp(argv[1], "getrpt") == 0;
            int bus = strtol(argv[2], NULL, 0);
            uint8_t device_address = strtol(argv[3], NULL, 0);
            uint8_t register_address = strtol(argv[4], NULL, 0);
            // fprintf(stdout, "Device %02X, Register = %02X\n", device_address, register_address);
            uint8_t data;
            do {
                if (i2c_get(bus, device_address, register_address, &data) == MRAA_SUCCESS) {
                    if (should_repeat)
                        fprintf(stdout, "%4d: ", interation);
                    fprintf(stdout, "Register %#02X = %#02X\n", register_address, data);
                    status = 0;
                } else {
                    fprintf(stdout, "i2c get failed\n");
                    status = 1;
                }
                interation++;
                usleep(10000);
            } while (should_repeat && status == 0);
        } else {
            print_command_error();
            status = 1;
        }
        return status;
    } else if ((strcmp(argv[1], "set") == 0)) {
        if (argc == 6) {
            int bus = strtol(argv[2], NULL, 0);
            uint8_t device_address = strtol(argv[3], NULL, 0);
            uint8_t register_address = strtol(argv[4], NULL, 0);
            uint8_t value = strtol(argv[5], NULL, 0);
            fprintf(stdout, "Device %02X, Register = %02X, Value = %02X\n", device_address,
                    register_address, value);
            if (i2c_set(bus, device_address, register_address, value) != MRAA_SUCCESS) {
                fprintf(stdout, "i2c set failed\n");
                return 0;
            }
            return 1;
        } else {
            print_command_error();
            return 1;
        }
    } else {
        print_command_error();
        return 1;
    }
}
示例#15
0
文件: mraa-i2c.c 项目: neuroidss/mraa
int
process_command(int argc, char** argv)
{
    if (strcmp(argv[1], "help") == 0) {
        print_help();
        return 0;
    } else if (strcmp(argv[1], "version") == 0) {
        print_version();
        return 0;
    } else if (strcmp(argv[1], "list") == 0) {
        print_busses();
        return 0;
    } else if (strcmp(argv[1], "detect") == 0) {
        if (argc == 3) {
            int bus = strtol(argv[2], NULL, 0);
            i2c_detect_devices(bus);
            return 0;
        } else {
            print_command_error();
            return 1;
        }
    } else if ((strcmp(argv[1], "get") == 0)) {
        if (argc == 5) {
            int bus = strtol(argv[2], NULL, 0);
            uint8_t device_address = strtol(argv[3], NULL, 0);
            uint8_t register_address = strtol(argv[4], NULL, 0);
            // fprintf(stdout, "Device %02X, Register = %02X\n", device_address, register_address);
            uint8_t data;
            if (i2c_get(bus, device_address, register_address, &data) == MRAA_SUCCESS) {
                fprintf(stdout, "Register %#02X = %#02X\n", register_address, data);
                return 0;
            } else {
                fprintf(stdout, "i2c get failed\n");
                return 1;
            }
        } else {
            print_command_error();
            return 1;
        }
    } else if ((strcmp(argv[1], "set") == 0)) {
        if (argc == 6) {
            int bus = strtol(argv[2], NULL, 0);
            uint8_t device_address = strtol(argv[3], NULL, 0);
            uint8_t register_address = strtol(argv[4], NULL, 0);
            uint8_t value = strtol(argv[5], NULL, 0);
            fprintf(stdout, "Device %02X, Register = %02X, Value = %02X\n", device_address,
                    register_address, value);
            if (i2c_set(bus, device_address, register_address, value) != MRAA_SUCCESS) {
                fprintf(stdout, "i2c set failed\n");
                return 0;
            }
            return 1;
        } else {
            print_command_error();
            return 1;
        }
    } else {
        print_command_error();
        return 1;
    }
}