Я хочу прочитать последовательность байтов с моего акселерометра.Я не могу заставить это работать.Когда я читаю побайтно, все в порядке, но когда я пытаюсь прочитать последовательность, я не могу получить истинные значения.
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