2017-08-01 49 views
0

我正在使用I2C通信,我需要讀字而不是字節,但我卡住了。 要讀取的字節我做的: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(); 
} 

如果我想readWords什麼?我必須使用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,長度* 2,(uint8_t *)值); }'。但是你可能有字節排序困難。 –

回答

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是面向字節的,另一個器件決定字節順序。 –

相關問題