Ejemplo n.º 1
0
//! [acc_irq_handler_start]
void ACC_Handler(void)
{
//! [acc_irq_handler_start]

	//! [acc_irq_handler_status]
	uint32_t ul_status;

	ul_status = acc_get_interrupt_status(ACC);

	/** Compare Output Interrupt */
	if ((ul_status & ACC_ISR_CE) == ACC_ISR_CE) {
		//! [acc_irq_handler_status]
		//! [acc_irq_handler_result_1]
		if (acc_get_comparison_result(ACC)) {
			//! [acc_irq_handler_result_1]
			puts("-ISR- Voltage Comparison Result: AD5 > DAC0\r");
		//! [acc_irq_handler_result_2]
		} else {
			//! [acc_irq_handler_result_2]
			puts("-ISR- Voltage Comparison Result: AD5 < DAC0\r");
		//! [acc_irq_handler_result_3]
		}
	//! [acc_irq_handler_result_3]
	//! [acc_irq_handler_result_end]
	}
	//! [acc_irq_handler_result_end]
	//! [acc_irq_handler_end]
}
Ejemplo n.º 2
0
Archivo: re200b.c Proyecto: marekr/asf
/**
 * \brief Initialize re200b sensor in order to detect motion
 * \param ul_acc_minus ACC minus input, use ACC peripheral definition in header.
 * \param ul_acc_plus ACC plus input, use ACC peripheral definition in header.
 */
void re200b_motion_detect_init(uint32_t ul_acc_minus, uint32_t ul_acc_plus)
{
	pmc_enable_periph_clk(ID_ACC);

	/* Initialize ACC */
	acc_init(ACC, ul_acc_plus, ul_acc_minus, ACC_MR_EDGETYP_ANY, ACC_MR_INV_DIS);

	/* clear status */
	acc_get_interrupt_status(ACC);

	/* reset event flags */
	g_compare_result = CMP_EQUAL;
	g_ul_compare_event_flag = false;
}
Ejemplo n.º 3
0
/**
 * Interrupt handler for the ACC.
 */
void ACC_Handler(void)
{
	uint32_t ul_status;

	ul_status = acc_get_interrupt_status(ACC);

	/* Compare Output Interrupt */
	if ((ul_status & ACC_ISR_CE) == ACC_ISR_CE) {
		if (acc_get_comparison_result(ACC)) {
			puts("-ISR- Voltage Comparison Result: AD0 > DAC0\r");
		} else {
			puts("-ISR- Voltage Comparison Result: AD0 < DAC0\r");
		}
	}
}
Ejemplo n.º 4
0
Archivo: re200b.c Proyecto: marekr/asf
/**
 * \brief re200b_motion_detect_handler which allow to know comparison result
 * (CMP_GREATER or CMP_LESS)
 */
void re200b_motion_detect_handler(void)
{
	uint32_t ul_status;

	ul_status = acc_get_interrupt_status(ACC);

	/* Compare Output Interrupt */
	if ((ul_status & ACC_IER_CE) == ACC_IER_CE) {
		g_ul_compare_event_flag = true;

		if (acc_get_comparison_result(ACC)) {
			g_compare_result = CMP_GREATER;
		} else {
			g_compare_result = CMP_LESS;
		}
	}
}
/**
 * \brief Application entry point for smc_lcd example.
 *
 * \return Unused (ANSI-C compatibility).
 */
int main(void)
{
	uint32_t i = 0;
	uint8_t uc_string_display[30];

	sysclk_init();
	board_init();

	/* LCD display initialization */
	_display_init();

	/* Clear LCD */
	ili9325_fill(COLOR_WHITE);

	/* Initialize Pir sensor */
	re200b_motion_detect_init(ACC_MR_SELMINUS_AD0, ACC_MR_SELPLUS_AD4);

	while (1) {
		/* Reset motion detection (enable interrupt, clear variable,
		 * clear status register) */
		re200b_motion_detect_enable();
		re200b_motion_detect_reset();
		acc_get_interrupt_status(ACC);

		/* Enter sleep mode */
		pmc_enable_sleepmode(0);

		/* Check if a motion was detected */
		if (re200b_motion_detection() != 0UL) {
			/* Disable motion detection */
			re200b_motion_detect_disable();

			/* Display information about motion detection on LCD */
			if ((i*LCD_LINE_HEIGHT) >= BOARD_LCD_HEIGHT) {
				i = 0;
				ili9325_fill(COLOR_WHITE);
			}

			sprintf((char*)uc_string_display, "Motion Detected:%ul", i);
			ili9325_draw_string(0, i*LCD_LINE_HEIGHT, uc_string_display);
			i++;
		}
	}
}