/**
* @file MIMXRT685S_C_Plus_Demo.cpp
* @brief Application entry point.
*/
#include
#include "board.h"
#include "peripherals.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "MIMXRT685S_cm33.h"
#include "fsl_debug_console.h"
#include "i2c_read_accel_value_transfer.h"
/* TODO: insert other include files here. */
#define ACCEL_STATUS 0x00U
#define ACCEL_XYZ_DATA_CFG 0x0EU
#define ACCEL_CTRL_REG1 0x2AU
#define ACCEL_READ_TIMES 10U
/* TODO: insert other definitions and declarations here. */
/*
* @brief Application entry point.
*/
int main(void)
{
bool isThereAccel = false;
/* Use 16 MHz clock for the FLEXCOMM2 */
CLOCK_AttachClk(kSFRO_to_FLEXCOMM2);
/* Init board hardware. */
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
/* Init FSL debug console. */
BOARD_InitDebugConsole();
PRINTF("\r\nC_Plus Mix C Demo-- Read Accelerometer Value\r\n");
I2C_MasterTransferCreateHandle(BOARD_ACCEL_I2C_BASEADDR, &g_m_handle, i2c_master_callback, NULL);
isThereAccel = I2C_ReadAccelWhoAmI();
/* read the accel xyz value if there is accel device on board */
if (true == isThereAccel)
{
uint8_t databyte = 0;
uint8_t write_reg = 0;
uint8_t readBuff[7];
int16_t x, y, z;
uint8_t status0_value = 0;
uint32_t i = 0U;
/* please refer to the "example FXOS8700CQ Driver Code" in FXOS8700 datasheet. */
/* write 0000 0000 = 0x00 to accelerometer control register 1 */
/* standby */
/* [7-1] = 0000 000 */
/* [0]: active=0 */
write_reg = ACCEL_CTRL_REG1;
databyte = 0;
I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);
/* write 0000 0001= 0x01 to XYZ_DATA_CFG register */
/* [7]: reserved */
/* [6]: reserved */
/* [5]: reserved */
/* [4]: hpf_out=0 */
/* [3]: reserved */
/* [2]: reserved */
/* [1-0]: fs=01 for accelerometer range of +/-4g range with 0.488mg/LSB */
/* databyte = 0x01; */
write_reg = ACCEL_XYZ_DATA_CFG;
databyte = 0x01;
I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);
/* write 0000 1101 = 0x0D to accelerometer control register 1 */
/* [7-6]: aslp_rate=00 */
/* [5-3]: dr=001 for 200Hz data rate (when in hybrid mode) */
/* [2]: lnoise=1 for low noise mode */
/* [1]: f_read=0 for normal 16 bit reads */
/* [0]: active=1 to take the part out of standby and enable sampling */
/* databyte = 0x0D; */
write_reg = ACCEL_CTRL_REG1;
databyte = 0x0d;
I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);
PRINTF("The accel values:\r\n");
for (i = 0; i < ACCEL_READ_TIMES; i++)
{
status0_value = 0;
/* wait for new data are ready. */
while (status0_value != 0xff)
{
I2C_ReadAccelRegs(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, ACCEL_STATUS, &status0_value, 1);
}
/* Multiple-byte Read from STATUS (0x00) register */
I2C_ReadAccelRegs(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, ACCEL_STATUS, readBuff, 7);
status0_value = readBuff[0];
x = ((int16_t)(((readBuff[1] * 256U) | readBuff[2]))) / 4U;
y = ((int16_t)(((readBuff[3] * 256U) | readBuff[4]))) / 4U;
z = ((int16_t)(((readBuff[5] * 256U) | readBuff[6]))) / 4U;
PRINTF("status_reg = 0x%x , x = %5d , y = %5d , z = %5d \r\n", status0_value, x, y, z);
}
}
PRINTF("\r\nEnd of I2C example .\r\n");
while (1)
{
}
}