Esempio n. 1
0
File: i2c.c Progetto: JMR-b/RIOT
bool i2c_initialize(uint8_t i2c_interface, uint32_t i2c_mode,
                    uint8_t slave_addr, uint32_t baud_rate, void *handler)
{
    //puts("i2c_initialize begin...\n");
    printf("i2cInterface = %d\n", i2c_interface);
    i2c_clear_buffer((uint8_t *) i2c_master_buffer,
                     I2C_BUFSIZE * sizeof(uint8_t));

    //activate power for I2C2
    i2c_active_power(i2c_interface);

    //select I2C2 functionality for pins x.xx (SDAx) and x.xx (SCLx)
    i2c_pin_select(i2c_interface);

    // clear I2CCON register flags
    i2c_clear_control_register(i2c_interface);

    //set baud rate
    i2c_set_baud_rate(i2c_interface, baud_rate);

    //set slave mode
    if (i2c_mode == I2CSLAVE) {
        i2c_set_slave_mode(i2c_interface, slave_addr);
    }

    /* Install interrupt handler */
    if (!i2c_irq_handler_register(i2c_interface, handler)) {
        return false;
    }

    i2c_initial_master_transmitter_mode(i2c_interface);

    //puts("...i2c_initialize ended\n");
    return (true);
}
Esempio n. 2
0
File: i2c.c Progetto: JMR-b/RIOT
bool i2c_read(uint8_t i2c_interface, uint8_t slave_addr, uint8_t reg_addr,
              uint8_t *rx_buff, uint8_t rx_buff_length)
{
    i2c_clear_buffer((uint8_t *) i2c_master_buffer,
                     I2C_BUFSIZE * sizeof(uint8_t));
    i2c_write_length = 1;
    i2c_read_length = rx_buff_length;
    bool successful;
    uint8_t readIndex = 3;
    i2c_master_buffer[0] = (slave_addr << 1) & WRITE_ENABLE_BIT_MASK;
    i2c_master_buffer[1] = reg_addr;
    i2c_master_buffer[2] = ((slave_addr << 1) & WRITE_ENABLE_BIT_MASK)
                           | READ_ENABLE_BIT_MASK;
    successful = i2c_transaction(i2c_interface);

    if (successful && (rx_buff != NULL) &&
        (rx_buff_length < (I2C_BUFSIZE - readIndex))) {
        memcpy(rx_buff, (const uint8_t *)(i2c_master_buffer + readIndex),
               sizeof(uint8_t) * rx_buff_length);
        return true;
    }
    else {
        return false;
    }
}
Esempio n. 3
0
File: i2c.c Progetto: JMR-b/RIOT
bool i2c_write(uint8_t i2c_interface, uint8_t slave_addr, uint8_t reg_addr,
               uint8_t *tx_buff, uint8_t tx_buff_length)
{
    //puts("[i2c.c/i2cWrite]: entered\n");
    i2c_clear_buffer((uint8_t *) i2c_master_buffer,
                     I2C_BUFSIZE * sizeof(uint8_t));
    i2c_write_length = tx_buff_length + 1;
    i2c_master_buffer[0] = (slave_addr << 1) & WRITE_ENABLE_BIT_MASK;
    i2c_master_buffer[1] = reg_addr;

    if ((tx_buff != NULL) && tx_buff_length < (I2C_BUFSIZE - 2)) {
        int32_t j = 0;
        for (int32_t i = 2; i < tx_buff_length + 2; i++) {
            i2c_master_buffer[i] = tx_buff[j];
            j++;
            //printf("I2CMasterBuffer[%d] = %d\n", i, I2CMasterBuffer[i]);
        }

        return i2c_transaction(i2c_interface);
    }
    else {
        puts("[i2c.c/i2cWrite]: Invalid buffer or invalid write buffer size\n");
        return false;
    }
}
Esempio n. 4
0
File: i2c.c Progetto: JMR-b/RIOT
//burst mode, the first element in the array
bool i2c_trans_receive(uint8_t i2c_interface, uint8_t slave_addr,
                       uint8_t *tx_buff, uint8_t tx_buff_length,
                       uint8_t *rx_buff, uint8_t rx_buff_length)
{
    puts("[i2c.c/i2cTransReceive]: entered\n");
    i2c_clear_buffer((uint8_t *) i2c_master_buffer,
                     I2C_BUFSIZE * sizeof(uint8_t));
    i2c_write_length = tx_buff_length;
    i2c_read_length = rx_buff_length;

    if (tx_buff != NULL && (tx_buff_length > 0)) {
        int32_t read_index = 0;
        i2c_master_buffer[0] = (slave_addr << 1) & WRITE_ENABLE_BIT_MASK;

        for (int32_t i = 1; i < tx_buff_length + 1; i++) {
            if (i < I2C_BUFSIZE) {
                i2c_master_buffer[i] = tx_buff[i - 1];
            }
        }

        //enable I2C to read
        if ((rx_buff_length > 0) && (i < I2C_BUFSIZE)) {
            i2c_master_buffer[i] = ((slave_addr << 1) & WRITE_ENABLE_BIT_MASK)
                                   | READ_ENABLE_BIT_MASK;
            read_index = i + 1;
        }

        bool successful = i2c_transaction(i2c_interface);

        if (successful && (rx_buff != NULL) && (rx_buff_length > 0)) {
            memcpy(rx_buff, (const uint8_t *)(i2c_master_buffer + read_index),
                   sizeof(uint8_t) * rx_buff_length);
            return true;
        }
        else {
            return false;
        }
    }
    else {
        puts(
            "[i2c.c/i2cRead]: the txBuff is not valid or has not a valid \
            length value !\n");
        return false;
    }
}
Esempio n. 5
0
static uint16_t lm75A_get_register_value(uint8_t i2c_interface,
        uint8_t reg_addr,
        uint8_t reg_size)
{
    uint8_t rx_buff[reg_size];

    i2c_clear_buffer(rx_buff, sizeof(rx_buff));
    if ((reg_size > 0) && (reg_size < 3)) {
        bool status = i2c_read(i2c_interface, LM75A_ADDR, reg_addr, rx_buff, sizeof(rx_buff));
        if (!status) { //Slave is not ready
            puts(
                "[lm75a_tempSensorI2C/lm75A_getConfigReg]: Slave is not\
                ready !\n");

            if (reg_size < 2) {
                return UCHAR_MAX;
            }
            else {
                return UINT16_MAX;
            }
        }