Esempio n. 1
0
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);
}
Esempio n. 2
0
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);

}