2011-12-14 7 views
1

私の加速度計から一連のバイトを読みたい。私はそれを働かせることはできません。 バイト単位で読むと、すべてが正常ですが、シーケンスを読み込もうとすると真の値が得られません。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

+0

データが1バイトずつ読み取られる右作業コードを送信します。 デバッグをしましたか? (少なくともいくつかのメッセージをuart経由で)それはどこに止まったのですか? – Meloun

+0

コードは正常に動作しますが、加速度計のデータは正しくありません。後でコードを投稿します。 – SevenDays

答えて

2

加速度計のドキュメントを確認してください。 I2CはSPIと非常に異なり、デバイスがI2Cによって読み取られたシーケンスをサポートしていない可能性があります。

+0

私は文書をチェックして、バイトごとではなくシーケンスでデータを読む方が良いと言います。 – SevenDays

+0

加速度計の部品名を教えてください。 – werewindle

+0

さて、問題はありません。 "ADXL345" – SevenDays

関連する問題