@FAE_CA1 wrote: The intenral interrupt engine in BMA253 is the same as the one in BMA250E. This means that your interrupt handler that works for BMA250E should also work for BMA253. That's what I would expect, right. @FAE_CA1 wrote: Please share with us how you map all interrupts to INT1 pin and how your interrupt handler takes care of the status register 0x09. We will then try to see if we can duplicate this issue or not. Sure. Basic config: retval += bma2x2_set_latch_intr(BMA2x2_LATCH_DURN_50MS);
retval += bma2x2_set_source(BMA2x2_SOURCE_DATA, INTR_DISABLE);
retval += bma2x2_set_source(BMA2x2_SOURCE_SLOW_NO_MOTION, INTR_ENABLE);
retval += bma2x2_set_source(BMA2x2_SOURCE_TAP, INTR_DISABLE);
retval += bma2x2_set_source(BMA2x2_SOURCE_SLOPE, INTR_ENABLE);
retval += bma2x2_set_source(BMA2x2_SOURCE_HIGH_G, INTR_ENABLE);
retval += bma2x2_set_source(BMA2x2_SOURCE_LOW_G, INTR_ENABLE);
// Set interrupt outputs, active high level, 1msec pulse, push pull.
retval += bma2x2_set_intr_output_type(BMA2x2_INTR1_OUTPUT, PUSH_PULL);
retval += bma2x2_set_intr_output_type(BMA2x2_INTR2_OUTPUT, PUSH_PULL);
// INT1/INT2 outputs active high.
retval += bma2x2_set_intr_level(BMA2x2_INTR1_LEVEL,ACTIVE_HIGH);
retval += bma2x2_set_intr_level(BMA2x2_INTR2_LEVEL,ACTIVE_HIGH);
// Set interrupt mapping to INT1 output pin.
retval += bma2x2_set_intr_slow_no_motion(BMA2x2_INTR1_SLOW_NO_MOTION, INTR_ENABLE);
retval += bma2x2_set_intr_slope(BMA2x2_INTR1_SLOPE, INTR_ENABLE);
retval += bma2x2_set_intr_high_g(BMA2x2_INTR1_HIGH_G, INTR_ENABLE);
retval += bma2x2_set_intr_low_g(BMA2x2_INTR1_LOW_G, INTR_ENABLE);
// Disable non used interruptions.
retval += bma2x2_set_intr_enable(BMA2x2_DATA_ENABLE, INTR_DISABLE);
retval += bma2x2_set_intr_enable(BMA2x2_DOUBLE_TAP_INTR, INTR_DISABLE);
retval += bma2x2_set_intr_enable(BMA2x2_SINGLE_TAP_INTR, INTR_DISABLE); And then in the interrupt handler: uint8_t status;
retval= bma2x2_get_intr_stat(&status); Which for the BMA250e status has the right insterruptions bits in 1 and for the BMA253 we get status = 0. I'll ask the technicians to provide me with another board just in case something is wrong with mine...
... View more
In an already-deployed project with 6000 devices around the world we had to switch from a BMA250e to a BMA253. Originally we used two interruptions mapped to INT1 and INT2. The interrupt handler in the µProcessor would then check which interruption pin was high to know which interruption triggered. As a firmware update we switched to map all interruptions to INT1 and then read the register 0x09 (INT_STATUS_0) to know which interruption triggered. This happens to work perfectly with the BMA250e but on the BMA253 we always read 0. I proceeded to remap one interrupt in INT1 and another in INT2. Then in the interrupt handler I can see that each of the assigned interruptions work ok, but register 0x09 is sill in 0. What I might be missing? What extra information can I bring?
... View more