| I2CConfig i2cconfig = {
opmodeI2C,
100000,
stdDutyCycle,
0,
0
};
void cba(I2CDriver* i2cp, I2CSlaveConfig* i2cscfg) {
if(i2cp->id_slave_config->restart) {
i2cp->id_slave_config->restart = FALSE;
i2cMasterReceive(i2cp, i2cscfg);
} else {
i2cMasterStop(i2cp);
}
}
void cbe(I2CDriver* i2cp, I2CSlaveConfig* i2cscfg) {
while(1);
}
i2cblock_t rxdata[6];
i2cblock_t txdata[2] = {0x1d};
I2CSlaveConfig i2c_gyro = {
cba,
cbe,
rxdata,
6,
6,
0,
txdata,
2,
1,
0,
0x68,
TRUE
};
int main(void) {
halInit();
chSysInit();
led_thread.start();
i2cStart(&I2CD2, &i2cconfig);
while(I2CD2.id_state != I2C_READY) {
chThdSleepMilliseconds(1);
}
palSetPadMode(GPIOB, 10, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
palSetPadMode(GPIOB, 11, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
i2cMasterTransmit(&I2CD2, &i2c_gyro);
...
}
|