/* * 获取角速度。 * 异步,读取成功后,l3g4200d_measureCompleted()会被调用。 * 返回值 : {L3G4200D_RT_NORMAL,L3G4200D_RT_BUS_BUSY} */ uint8_t l3g4200d_measureOmega(void) { if(I2C_transmit(L3G4200D_WHICH_I2C,l3g4200d_measureOmega_callback_reg) == I2C_RT_TRANSMIT_NORMAL) return L3G4200D_RT_NORMAL; return L3G4200D_RT_BUS_BUSY; }
/* * 读角速度的I2C回调函数,设置当前寄存器地址。 */ uint8_t l3g4200d_measureOmega_callback_reg(uint8_t seq,uint8_t * data) { if(seq == 0) { *data = I2C_addressToByte_write(L3G4200D_ADDRESS); return I2C_RT_ACK; } if(seq == 1) { *data = L3G4200D_REG_OMEGA; /* 角速度数据的寄存器地址。 */ return I2C_RT_ACK; } // I2C_setNextCallback(L3G4200D_WHICH_I2C,l3g4200d_measureOmega_callback_read); return I2C_RT_REPEAT_START_OR_STOP; }
/* * 读角速度的I2C回调函数,读取数据。 */ uint8_t l3g4200d_measureOmega_callback_read(uint8_t seq,uint8_t * data) { if(seq == 0) { *data = I2C_addressToByte_read(L3G4200D_ADDRESS); return I2C_RT_ACK; } if(seq > L3G4200D_BUFFER_SIZE) return I2C_RT_STOP; // l3g4200d_var.buffer_8u[seq-1] = *data; if(seq == L3G4200D_BUFFER_SIZE) { l3g4200d_measureCompleted(); return I2C_RT_NACK; } return I2C_RT_ACK; }/* * 获取角速度。 * 异步,读取成功后,l3g4200d_measureCompleted()会被调用。 * 返回值 : {L3G4200D_RT_NORMAL,L3G4200D_RT_BUS_BUSY} */ uint8_t l3g4200d_measureOmega(void) { if(I2C_transmit(L3G4200D_WHICH_I2C,l3g4200d_measureOmega_callback_reg) == I2C_RT_TRANSMIT_NORMAL) return L3G4200D_RT_NORMAL; return L3G4200D_RT_BUS_BUSY; }
/* * 读角速度的I2C回调函数,设置当前寄存器地址。 */ uint8_t l3g4200d_measureOmega_callback_reg(uint8_t seq,uint8_t * data) { if(seq == 0) { *data = I2C_addressToByte_write(L3G4200D_ADDRESS); return I2C_RT_ACK; } if(seq == 1) { *data = L3G4200D_REG_OMEGA; /* 角速度数据的寄存器地址。 */ return I2C_RT_ACK; } // I2C_setNextCallback(L3G4200D_WHICH_I2C,l3g4200d_measureOmega_callback_read); return I2C_RT_REPEAT_START_OR_STOP; }
/* * 读角速度的I2C回调函数,读取数据。 */ uint8_t l3g4200d_measureOmega_callback_read(uint8_t seq,uint8_t * data) { if(seq == 0) { *data = I2C_addressToByte_read(L3G4200D_ADDRESS); return I2C_RT_ACK; } if(seq > L3G4200D_BUFFER_SIZE) return I2C_RT_STOP; // l3g4200d_var.buffer_8u[seq-1] = *data; if(seq == L3G4200D_BUFFER_SIZE) { l3g4200d_measureCompleted(); |