2017-08-01 9 views
0

私はI2C通信を使用しています。バイトの代わりに単語を読む必要がありますが、スタックしています。私はreadWordsする場合はバイトの代わりにReadWords

void I2CReadBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *value) 
{ 
    uint8_t i=0; 
    I2C_MasterSendStart(devAddr, I2C_WRITE_XFER_MODE); 
    I2C_MasterWriteByte(regAddr); 
    I2C_MasterSendRestart(devAddr, I2C_READ_XFER_MODE); 
    while (i++ < (length-1)) { 
     *value++ = I2C_MasterReadByte(I2C_ACK_DATA); 
    } 
    *value = I2C_MasterReadByte(I2C_NAK_DATA); 
    I2C_MasterSendStop(); 
} 

何?:私はバイトを読み取るために 私は*値をint16_t使用する必要がありますが、その後、私はありがとう

while (i++ < (length-1)) { 
      *value++ = I2C_MasterReadByte(I2C_ACK_DATA); 
     } 
     *value = I2C_MasterReadByte(I2C_NAK_DATA); 

とこだわっている

+1

最も簡単なことは、あなたの既存のバイト読み込み機能の観点から、次のように単語読み込み関数を書くことです: 'void I2CReadWords(uint8_t devAddr、uint8_t regAddr、uint8_t length、uint16_t * value){ I2CR eadBytes(devAddr、regAddr、length * 2、(uint8_t *)value); } '。しかし、バイトオーダーの問題があるかもしれません。 –

答えて

0

ビッグエンディアン

uint16_t ReadWord(void) 
{ 
    uint16_t result = 0; 
    uint8_t b; 
    b = I2C_MasterReadByte(I2C_ACK_DATA); 
    result = b + I2C_MasterReadByte(I2C_ACK_DATA) << 8; 
    return result; 
} 

場合、私は知らないとして、それはすべてのエラーをチェックしませんあなた

+0

bはLSBですか?MSBの最初の番号は? – Ale

+0

バスの反対側に応じて。 I2Cはバイト指向で、他のデバイスはバイトオーダーを決定します。 –