int main(void) {
    UART_INIT_STDIO();

    // enable watchdog (pin 6 output)
    DDRD &= ~_BV(PIND6);
    blink(3);

    printf("\n");
    i2c_init(I2C_SPEED_400KHZ);
    for (uint8_t i = 0x00; i < 0x3a; i++) {
        uint8_t value = i2c_read_reg(0x6b, i);
        printf("REG(0x%02x) = ", i);
        print_bits(sizeof value, &value);
        printf(" 0x%02x\n", value);
    }

    i2c_write_reg(0x6b, 0x39, 0b00000000);
    uint8_t ctrl1 = i2c_read_reg(0x6b, 0x20);
    i2c_write_reg(0x6b, 0x20, ctrl1 | 0b1010);

    // do some low level blinking until the watchdog hits
    while (1) {
        uint8_t status = i2c_read_reg(0x6b, 0x27);
        print_bits(sizeof status, &status);
        printf(" X(%d) Y(%d) Z(%d), REF(%02x) TEMP(%02dºC)\r",
               i2c_read_reg16(0x6b, 0x28),
               i2c_read_reg16(0x6b, 0x2A),
               i2c_read_reg16(0x6b, 0x3C),
               i2c_read_reg(0x6b, 0x25),
               i2c_read_reg(0x6b, 0x26)
        );

        PORTB ^= _BV(PORTB5);
        _delay_ms(50);
    };
}
示例#2
0
文件: apds9190.c 项目: CurieBSP/main
int apds9190_read_prox(struct td_device *dev)
{
	return i2c_read_reg16(dev, REG_PDATA);
}