int mma8451_setMode(AccMMA *mma, uint8_t mode) { uint8_t reg = read_reg(mma, MMA8451_REG_CTRL_REG1); if (mode == MMA8451_ACTIVE_MODE) { reg = reg | MMA8451_ACTIVE; LOG_INFO("Active mode\n"); pio_irq_set(EXTI_GPIOA, ACC_INT1_BIT, TRIGGER_RISING_EDGE, data_ready); pio_irq_set(EXTI_GPIOC, ACC_INT2_BIT, TRIGGER_RISING_EDGE, acc_event); } if (mode == MMA8451_STANDBY_MODE) { reg = reg & ~MMA8451_ACTIVE; LOG_INFO("Sleep mode\n"); pio_irq_clear(ACC_INT1_BIT); pio_irq_clear(ACC_INT2_BIT); } return write_reg(mma, MMA8451_REG_CTRL_REG1, reg); }
void irInterruptHandler (void) { if (!readArray) { difference = (tc_counter_get (tc) - prev_time); prev_time = tc_counter_get(tc); if (abs(START_BIT - difference) < TOLERANCE) { startFound = 1; irCount = 0; } else if (startFound && irCount < IR_BUFFER) { differenceArray[irCount++] = difference; } else if (irCount == IR_BUFFER){ startFound = 0; readArray = 1; } } pio_irq_clear (PA26_PIO); }