FXLS8471Q - Accelerometer motion detection function example code

Document created by Tomas Vaverka Employee on Jul 25, 2017Last modified by Tomas Vaverka Employee on Jul 28, 2017
Version 2Show Document
  • View in full screen mode

Hi Everyone,


If you are interested in a simple bare metal example code illustrating the use of the accelerometer motion detection function, please find below one of my examples I created for the FXLS8471Q accelerometer while working with the NXP FRDM-KL25Z platform and FRDMSTBC-A8471 board.


The FXLS8471Q is set to detect motion exceeding 315mg for a minimum period of 40 ms on either the X or Y axis. Once an event is triggered, an interrupt will be generated on the INT1 pin:


void FXLS8471Q_Init (void)
  FXLS8471Q_WriteRegister(FT_MT_THS_REG, 0x85);           // Set threshold to 312.5mg (5 x 62.5mg )
  FXLS8471Q_WriteRegister(FF_MT_COUNT_REG, 0x02);          // Set debounce timer period to 40ms
  FXLS8471Q_WriteRegister(FF_MT_CFG_REG, 0xD8);            // Latch enabled, motion detection enabled for X and Y axis
  FXLS8471Q_WriteRegister(CTRL_REG4, 0x04);                // Motion interrupt enabled
  FXLS8471Q_WriteRegister(CTRL_REG5, 0x04);                // Route motion interrupt to INT1 - PTD4
  FXLS8471Q_WriteRegister(CTRL_REG1, 0x29);                // ODR = 12.5Hz, Active mode



In the ISR, only the interrupt flag is cleared and the FF_MT_SRC (0x16) register is read in order to clear the SRC_FFMT flag in the INT_SOURCE register and deassert the INT1 pin, as shown on the screenshot below.


void PORTD_IRQHandler()
  PORTD_PCR4 |= PORT_PCR_ISF_MASK;                         // Clear the interrupt flag
  IntSource = FXLS8471Q_ReadRegister(FF_MT_SRC_REG);       // Read the FF_MT_SRC register to clear the SRC_FFMT flag in the INT_SOURCE register     




Attached you can find the complete source code. If there are any questions regarding this simple example code, please feel free to ask below.