私の加速度計から一連のバイトを読みたい。私はそれを働かせることはできません。 バイト単位で読むと、すべてが正常ですが、シーケンスを読み込もうとすると真の値が得られません。I2Cを通して一連のバイトを読み取る方法は?
void ADXL_ReadSeq(uint8_t StartAddr,signed char *data)
{
// StartAddr |= (1<<7); //
while(I2C_GetFlagStatus(I2CG, I2C_FLAG_BUSY)); // While the bus is busy
I2C_GenerateSTART(I2CG, ENABLE); // Send START condition
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_MODE_SELECT)); // Test on EV5 and clear it
I2C_Send7bitAddress(I2CG, DEV_ADDR<< 1, I2C_Direction_Transmitter); // Send address for write (SAD+W)
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // Test on EV6 and clear it
I2C_SendData(I2CG,ADXL_R| ADXL_MB|StartAddr); // Send the internal address to read from: MSB of the address first
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // Test on EV8 and clear it
I2C_GenerateSTART(I2CG, ENABLE); // Send STRAT condition a second time
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_MODE_SELECT)); // Test on EV5 and clear it
I2C_Send7bitAddress(I2CG, DEV_ADDR<< 1, I2C_Direction_Receiver); // Send address for read
while(!I2C_CheckEvent(I2CG,I2C_EVENT_MASTER_BYTE_RECEIVED)); // Test on EV6 and clear it
int num=6;
while (num)
{
if(num==1)
{
I2C_AcknowledgeConfig(I2C1, DISABLE); /* ЧоєуТ»О»єуТЄ№Ш±ХУ¦ґрµД */
I2C_GenerateSTOP(I2C1, ENABLE); /* ·ўЛННЈЦ№О» */
}
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); /* EV7 */
*data = I2C_ReceiveData(I2C1);
data++;
/* Decrement the read bytes counter */
num--;
}
/* ФЩґОФКРнУ¦ґрДЈКЅ */
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
私は間違っていますか? この機能をSPIを使用する他の機能から変換するhttp://code.google.com/p/flyless/source/browse/trunk/FLYLess/src/hal/adxl345.c
データが1バイトずつ読み取られる右作業コードを送信します。 デバッグをしましたか? (少なくともいくつかのメッセージをuart経由で)それはどこに止まったのですか? – Meloun
コードは正常に動作しますが、加速度計のデータは正しくありません。後でコードを投稿します。 – SevenDays