Пример #1
0
/***************************************************************************//**
 * @brief
 *   GPIO even interrupt handler
 *
 * @details
 *   This function is automatically called by the hardware upon incoming
 *   interrupt generated by an even-numbered GPIO pin.
 ******************************************************************************/
void GPIO_EVEN_IRQHandler(void)
{
	uint32_t flag;
	uint32_t system_mask = TD_GPIO_Hooks[TD_GPIO_SYSTEM_EVEN].mask;
	uint32_t user_mask = TD_GPIO_Hooks[TD_GPIO_USER_EVEN].mask;

	// Get interrupt bits
	flag = GPIO_IntGet() & TD_GPIO_EVEN_MASK & GPIO_IntGetEnabled();

	// Acknowledge IRQ.
	// We acknowledge all IRQ read, for this IRQ (EVEN) and enabled
	// even if theses IRQ are not used (otherwise, it will infinitely reenter in this IRQ)
	GPIO_IntClear(flag);
#ifdef WAKE_MAIN_LOOP_DEBUG
	tfp_printf("IO:0x%08X\r\n");
#endif
	// System hook set on odd IRQ
	if (TD_GPIO_Hooks[TD_GPIO_SYSTEM_EVEN].callback && (flag & system_mask)) {

		// Call the IRQ hook
		TD_GPIO_Hooks[TD_GPIO_SYSTEM_EVEN].callback(flag & system_mask);

		// Remember that this interrupt source has been processed
		flag &= ~system_mask;
		TD_WakeMainLoop();
	}

	// User hook on even IRQ
	if (TD_GPIO_Hooks[TD_GPIO_USER_EVEN].callback && (flag & user_mask)) {

		// Call the IRQ hook
		TD_GPIO_Hooks[TD_GPIO_USER_EVEN].callback(flag & user_mask);
		TD_WakeMainLoop();
	}
}
Пример #2
0
/***************************************************************************//**
 * @brief
 *   GPIO ODD interrupt handler. Interrupt handler clears all IF odd flags and
 *   call the dispatcher passing the flags which triggered the interrupt.
 *
 ******************************************************************************/
void GPIO_ODD_IRQHandler(void)
{
  uint32_t iflags;

  /* Get all odd interrupts. */
  iflags = GPIO_IntGetEnabled() & 0x0000AAAA;

  /* Clean only even interrupts. */
  GPIO_IntClear(iflags);

  GPIOINT_IRQDispatcher(iflags);
}