Example #1
0
int gpio_i2c_readX_KeyPad_Fix(
    int Grp,
    unsigned char Dev,
    void (*Func[2])(void))
{
    int rxdata;

    I2C_LOCK(Grp);

    if(Func[0]) {
        (*Func[0])();
    }

    i2c_start_bit(Grp);

    i2c_send_byte(Grp, (unsigned char)(Dev) | 1);
    i2c_receive_ack(Grp);

    rxdata = i2c_receive_byte(Grp);
    i2c_receive_ack(Grp);

    i2c_stop_bit(Grp);

    if(Func[1]) {
        (*Func[1])();
    }

    I2C_UNLOCK(Grp);

    return (unsigned char)rxdata;
}
Example #2
0
int gpio_i2c_readX(int Grp, unsigned char devaddress, unsigned char address)
{
    int rxdata;

    I2C_LOCK(Grp);

    i2c_start_bit(Grp);

    i2c_send_byte(Grp, (unsigned char)(devaddress));
    i2c_receive_ack(Grp);

    i2c_send_byte(Grp, address);
    i2c_receive_ack(Grp);
     
    i2c_start_bit(Grp);

    i2c_send_byte(Grp, (unsigned char)(devaddress) | 1);
    i2c_receive_ack(Grp);

    rxdata = i2c_receive_byte(Grp);

    i2c_stop_bit(Grp);
    
    I2C_UNLOCK(Grp);

    return (unsigned char)rxdata;
}
Example #3
0
int gpio_i2c_wr_arr(int Grp, unsigned char dev,
    unsigned char rarr[], int rsize,
    unsigned char darr[], int dsize)
{
    int i;

    I2C_LOCK(Grp);

    i2c_start_bit(Grp);

    i2c_send_byte(Grp, dev);
    i2c_receive_ack(Grp);

    for(i = 0; i < rsize; i ++) {
        i2c_send_byte(Grp, rarr[i]);
        i2c_receive_ack(Grp);
    }

    if(dsize > 0) {
	    for(i = 0; i < dsize-1; i ++) {
	        i2c_send_byte(Grp, darr[i]);
	        i2c_receive_ack(Grp);
	    }

	    i2c_send_byte(Grp, darr[i]);
    }

    i2c_stop_bit(Grp);

    I2C_UNLOCK(Grp);
    
    return 0;
}
Example #4
0
void gpio_i2c_write(unsigned char devaddress, unsigned char address, unsigned char data)
{
    i2c_start_bit();
    i2c_send_byte((unsigned char)(devaddress));
    i2c_receive_ack();
    i2c_send_byte(address);
    i2c_receive_ack();
    i2c_send_byte(data); 
   // i2c_receive_ack();//add by hyping for tw2815
    i2c_stop_bit();
}
Example #5
0
int gpio_i2c_write(unsigned char devaddress, unsigned char address, unsigned char data)
{
    int Grp = 0;
    I2C_LOCK(Grp);
    
    i2c_start_bit(Grp);
    i2c_send_byte(Grp, (unsigned char)(devaddress));
    i2c_receive_ack(Grp);
    i2c_send_byte(Grp, address);
    i2c_receive_ack(Grp);
    i2c_send_byte(Grp, data); 
    i2c_stop_bit(Grp);

    I2C_UNLOCK(Grp);

    return 0 ;
}
Example #6
0
int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
{
    int ack = 0;
    int sadr;
    char *ptr;
    char addr;
    ptr = (char *)data;
    switch ((int)obj->i2c) {
        case I2C_0:
            sadr = TSC_I2C_ADDR;
            addr = address;
            break;
        case I2C_1:
            sadr = AAIC_I2C_ADDR;
            addr = address;
            break;
        case I2C_2:
        case I2C_3:
            sadr = address; //LM75_I2C_ADDR or MMA7660_I2C_ADDR;
            addr = *ptr++;
            break;
    }

//    printf("adr = %x, reg = %x\n",sadr, address);
    i2c_start(obj);

    // Set serial and register address
    i2c_send_byte(obj, sadr);
    ack += i2c_receive_ack(obj);
    i2c_send_byte(obj, addr);
    ack += i2c_receive_ack(obj);

    for (int i = 1; i < length; i++) {
        i2c_send_byte(obj, *ptr++);
        ack += i2c_receive_ack(obj);
    }

    i2c_stop(obj);
    if (ack == 3) {
        return 1;
    } else {
        return 0;
    }

}
Example #7
0
unsigned char gpio_i2c_read(unsigned char devaddress, unsigned char address)
{
    int rxdata;
    
    i2c_start_bit();
    i2c_send_byte((unsigned char)(devaddress));
    i2c_receive_ack();
    i2c_send_byte(address);
    i2c_receive_ack();   
    i2c_start_bit();
    i2c_send_byte((unsigned char)(devaddress) | 1);
    i2c_receive_ack();
    rxdata = i2c_receive_byte();
    //i2c_send_ack();
    i2c_stop_bit();

    return rxdata;
}
Example #8
0
/**
  ******************************************************************************
  *	@brief	Read bytes from slave with specify register address
  * @param	Slave device address (7-bit right aligned)
  * @param	Register address
  * @param	Number of data bytes to read from slave 
  * @param	Pointer to data array byte to store data from slave
  * @retval	Result status (SUCCESS or ERROR)
  ******************************************************************************
  */
uint8_t i2c_read_multi_with_reg(uint8_t address, uint8_t reg, uint8_t len, uint8_t* data)
{
	i2c_start();
	if (i2c_check_status(MT_START) == ERROR)
		return ERROR;

	i2c_transmit((address << 1) | I2C_WRITE);
	if (i2c_check_status(MT_SLA_WRITE_ACK) == ERROR)
	{
		i2c_stop();
		return ERROR;
	}

	i2c_transmit(reg);
	if (i2c_check_status(MT_DATA_TRANSMITTED_ACK) == ERROR)
	{
		i2c_stop();
		return ERROR;
	}

	i2c_start();
	if (i2c_check_status(MT_REP_START) == ERROR)
		return ERROR;

	i2c_transmit((address << 1) | I2C_READ);
	if (i2c_check_status(MT_SLA_READ_ACK) == ERROR)
	{
		i2c_stop();
		return ERROR;
	}	

	for (int i = 0; i < len; i++)
	{
		if (i == (len - 1))
		{
			data[i] =  i2c_receive_nack();
			if (i2c_check_status(MT_DATA_RECEIVED_NACK) == ERROR)
			{
				i2c_stop();
				return ERROR;
			}
		}
		else
		{
			data[i] = i2c_receive_ack();
			if (i2c_check_status(MT_DATA_RECEIVED_ACK) == ERROR)
			{
				i2c_stop();
				return ERROR;
			}
		}
	}

	i2c_stop();

	return SUCCESS;
}
Example #9
0
int gpio_i2c_writeX_KeyPad_Fix(
    int Grp,
    unsigned char Dev,
    unsigned char rarr[], int rsize,
    unsigned char darr[], int dsize,
    void (*Func[2])(void))
{
    int i;

    I2C_LOCK(Grp);

    if(Func[0]) {
        (*Func[0])();
    }

    i2c_start_bit(Grp);

    i2c_send_byte(Grp, Dev);
    i2c_receive_ack(Grp);

    for(i = 0; i < rsize; i ++) {
        i2c_send_byte(Grp, rarr[i]);
        i2c_receive_ack(Grp);
    }

    for(i = 0; i < dsize; i ++) {
        i2c_send_byte(Grp, darr[i]);
        i2c_receive_ack(Grp);
    }

    i2c_stop_bit(Grp);

    if(Func[1]) {
        (*Func[1])();
    }

    I2C_UNLOCK(Grp);

    return 0;
}
Example #10
0
int gpio_i2c_probeX(int Grp, unsigned char devaddress)
{
    int ret;
    
    I2C_LOCK(Grp);
    
    i2c_start_bit(Grp);
    i2c_send_byte(Grp, (unsigned char)(devaddress));
    ret = i2c_receive_ack(Grp);
    i2c_stop_bit(Grp);

    I2C_UNLOCK(Grp);

    return ret;
}
Example #11
0
int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
{
    unsigned int loop, rxdata;
    int sadr, ack, bytes_read;
    rxdata = 0;
    switch ((int)obj->i2c) {
        case I2C_0:
            sadr = TSC_I2C_ADDR;
            break;
        case I2C_1:
            sadr = AAIC_I2C_ADDR;
            break;
        case I2C_2:
        case I2C_3:
            sadr = address;     //LM75_I2C_ADDR; or MMA7660_I2C_ADDR;
            break;
    }
    bytes_read = 0;
    // Start bit
    i2c_start(obj);

    switch ((int)obj->i2c) {
        case I2C_0:
            // Set serial and register address
            i2c_send_byte(obj, sadr);
            ack += i2c_receive_ack(obj);
            i2c_send_byte(obj, address);
            ack += i2c_receive_ack(obj);

            // Stop bit
            i2c_stop(obj);

            // Start bit
            i2c_start_tsc(obj);

            // Read from I2C address
            i2c_send_byte(obj, sadr | 1);
            ack += i2c_receive_ack(obj);

            rxdata = (i2c_receive_byte(obj) & 0xFF);
            data[((length - 1) - bytes_read)] = (char)rxdata;
            bytes_read++;
            // Read multiple bytes
            if ((length > 1) && (length < 5)) {
                for (loop = 1; loop <= (length - 1); loop++) {
                    // Send ACK
                    i2c_send_ack(obj);

                    // Next byte
                    //rxdata = ((rxdata << 8) & 0xFFFFFF00);
                    //rxdata |= (i2c_receive_byte(obj) & 0xFF);
                    rxdata = i2c_receive_byte(obj);
                    data[(length - 1) - bytes_read] = (char)rxdata;
                    bytes_read++;

                }
            }
            break;
        case I2C_1:
            // Set serial and register address
            i2c_send_byte(obj, sadr);
            ack += i2c_receive_ack(obj);
            i2c_send_byte(obj, address);
            ack += i2c_receive_ack(obj);

            // Stop bit
            i2c_stop(obj);

            // Start bit
            i2c_start_tsc(obj);
        // Fall through to read data
        case I2C_2:
        case I2C_3:
            // Read from preset register address pointer
            i2c_send_byte(obj, sadr | 1);
            ack += i2c_receive_ack(obj);

            rxdata = i2c_receive_byte(obj);
            data[bytes_read] = (char)rxdata;
            bytes_read++;
            // Read multiple bytes
            if ((length > 1) && (length < 5)) {
                for (loop = 1; loop <= (length - 1); loop++) {
                    // Send ACK
                    i2c_send_ack(obj);

                    // Next byte
                    rxdata = i2c_receive_byte(obj);
                    data[loop] = (char)rxdata;
                    bytes_read++;

                }
            }
            break;
    }
    i2c_send_nack(obj);

    i2c_stop(obj);    // Actual stop bit

    return bytes_read;
}