#include "gp8302.h" #define I2C_GP8302_1_SCL_PORT I2C2_SCL_GPIO_Port #define I2C_GP8302_1_SCL_PIN I2C2_SCL_Pin #define I2C_GP8302_1_SDA_PORT I2C2_SDA_GPIO_Port #define I2C_GP8302_1_PIN I2C2_SDA_Pin #define I2C_GP8302_1_DETECTION_PORT ALARM1_GPIO_Port #define I2C_GP8302_1_DETECTION_PIN ALARM1_Pin #define I2C_GP8302_2_SCL_PORT I2C3_SCL_GPIO_Port #define I2C_GP8302_2_SCL_PIN I2C3_SCL_Pin #define I2C_GP8302_2_SDA_PORT I2C3_SDA_GPIO_Port #define I2C_GP8302_2_PIN I2C3_SDA_Pin #define I2C_GP8302_2_DETECTION_PORT ALARM2_GPIO_Port #define I2C_GP8302_2_DETECTION_PIN ALARM2_Pin static gp8302_t gp8302[GP8302_MAX]; void gp8302_init(void) { i2c_gpio_group_t gpios; gpios.scl = gpio_create(I2C_GP8302_1_SCL_PORT, I2C_GP8302_1_SCL_PIN); gpios.sda = gpio_create(I2C_GP8302_1_SDA_PORT, I2C_GP8302_1_PIN); gp8302[GP8302_1].i2c = i2c_create(gpios, 0); gpios.scl = gpio_create(I2C_GP8302_2_SCL_PORT, I2C_GP8302_2_SCL_PIN); gpios.sda = gpio_create(I2C_GP8302_2_SDA_PORT, I2C_GP8302_2_PIN); gp8302[GP8302_2].i2c = i2c_create(gpios, 0); } BOOL gp8302_detection(void) { BOOL res = FALSE; if (GPIO_READ(I2C_GP8302_1_DETECTION_PORT, I2C_GP8302_1_DETECTION_PIN) == 0) { res = TRUE; } else { return FALSE; } if (GPIO_READ(I2C_GP8302_2_DETECTION_PORT, I2C_GP8302_2_DETECTION_PIN) == 0) { res = TRUE; } else { return FALSE; } return res; } void gp8302_output(gp8302_number_e no, uint16_t pressure) { uint16_t hi = ((pressure >> 8) << 4) + ((uint8_t)pressure >> 4); uint8_t lo = ((uint8_t)pressure) << 4; pressure = (hi << 8) + lo; i2c_t *p = gp8302[no].i2c; p->interface.start(p); p->interface.write_byte(p, 0xb0); p->interface.wait_ack(p); p->interface.write_byte(p, 2); p->interface.wait_ack(p); p->interface.write_word(p, pressure); p->interface.wait_ack(p); p->interface.stop(p); }