bool getAcceleration(alt_16 *iXYZ) { bool bSuccess = false; if(!bSPIReady) bSPIReady = ADXL345_SPI_Init(GSENSOR_SPI_BASE); if(bSPIReady) { if (ADXL345_SPI_IsDataReady(GSENSOR_SPI_BASE)) { bSuccess = ADXL345_SPI_XYZ_Read(GSENSOR_SPI_BASE, (unsigned short*) iXYZ); if (bSuccess) { iXYZ[0]*=4; iXYZ[1]*=4; iXYZ[2]*=4; //printf("X=%d mg, Y=%d mg, Z=%d mg\r\n", iXYZ[0], iXYZ[1], iXYZ[2]); } } } return bSuccess; }
void DEMO_ACCELEROMETER(void){ bool bSuccess; alt_16 szXYZ[3]; alt_u8 id; const int mg_per_digi = 4; // release i2c pio pin //IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SCL_BASE, ALTERA_AVALON_PIO_DIRECTION_OUTPUT); //IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, ALTERA_AVALON_PIO_DIRECTION_INPUT); IOWR(SELECT_I2C_CLK_BASE, 0, 0x00); // configure accelerometer as +-2g and start measure bSuccess = ADXL345_SPI_Init(GSENSOR_SPI_BASE); if (bSuccess){ // dump chip id bSuccess = ADXL345_SPI_IdRead(GSENSOR_SPI_BASE, &id); if (bSuccess) printf("id=%02Xh\r\n", id); } if (bSuccess) printf("Monitor Accerometer Value. Press KEY0 or KEY1 to terminal the monitor process.\r\n"); while(bSuccess && !bKeyPressed){ if (ADXL345_SPI_IsDataReady(GSENSOR_SPI_BASE)){ bSuccess = ADXL345_SPI_XYZ_Read(GSENSOR_SPI_BASE, szXYZ); if (bSuccess){ printf("X=%d mg, Y=%d mg, Z=%d mg\r\n", szXYZ[0]*mg_per_digi, szXYZ[1]*mg_per_digi, szXYZ[2]*mg_per_digi); // show raw data, //printf("X=%04x, Y=%04x, Z=%04x\r\n", (alt_u16)szXYZ[0], (alt_u16)szXYZ[1],(alt_u16)szXYZ[2]); usleep(1000*1000); } } } if (!bSuccess) printf("Failed to access accelerometer\r\n"); }