InterruptIn::InterruptIn(PinName pin) : gpio(), gpio_irq(), _rise(), _fall() { gpio_irq_init(&gpio_irq, pin, (&InterruptIn::_irq_handler), (uint32_t)this); gpio_init_in(&gpio, pin); }
void DispatcherPrivate::set_receive_input(SYNCHRONIZATION_CHANNEL* channel, PinName pin, PinMode pull, ReceiveChannelMode rcmode) { if (channel->data->state->recv.mode != ReceiveChannelModeNone) gpio_irq_free(&channel->data->state->recv.gpio_irq); channel->data->state->recv.mode = rcmode; gpio_init_in(&channel->data->state->recv.gpio, pin); gpio_irq_init(&channel->data->state->recv.gpio_irq, pin, (&DispatcherPrivate::channel_irq_handler), (uint32_t)channel); gpio_mode(&channel->data->state->recv.gpio, pull); gpio_irq_event evt = IRQ_NONE; switch (rcmode) { case ReceiveChannelInterruptRise: evt = IRQ_RISE; break; case ReceiveChannelInterruptFall: evt = IRQ_FALL; break; case ReceiveChannelModeNone: break; } if (evt != IRQ_NONE) { gpio_irq_set(&channel->data->state->recv.gpio_irq, evt, 1); gpio_irq_enable(&channel->data->state->recv.gpio_irq); } }
InterruptIn::InterruptIn(PinName pin) : gpio(), gpio_irq(), _rise(), _fall() { // No lock needed in the constructor gpio_irq_init(&gpio_irq, pin, (&InterruptIn::_irq_handler), (uint32_t)this); gpio_init_in(&gpio, pin); }
void config_loguart() { /* Log uart RX pin doesn't support gpio interrupt. * To make log uart wake system, we can parallel log uart RX with another gpio interrupt pin. */ gpio_irq_t gpio_rx_wake; gpio_irq_init(&gpio_rx_wake, LOGUART_RX_WAKE, gpio_loguart_rx_irq_callback, NULL); gpio_irq_set(&gpio_rx_wake, IRQ_FALL, 1); // Falling Edge Trigger gpio_irq_enable(&gpio_rx_wake); }
void uartadapter_gpio_init() { gpio_init(&gpio_led, UA_GPIO_IRQ_PIN); gpio_dir(&gpio_led, PIN_INPUT); // Direction: Output gpio_mode(&gpio_led, PullNone); // No pull gpio_irq_init(&gpio_btn, UA_GPIO_IRQ_PIN, uartadapter_gpio_irq, (uint32_t)(&gpio_led)); gpio_irq_set(&gpio_btn, IRQ_FALL, 1); // Falling Edge Trigger gpio_irq_enable(&gpio_btn); }
void IRSendRev::Init(int revPin) { gpio_irq_init((gpio_irq_t *)pGpioIrqRecv, (PinName)(g_APinDescription[revPin].pinname), (gpio_irq_handler)gpio_ir_recv_handler, (uint32_t)this); gpio_irq_set((gpio_irq_t *)pGpioIrqRecv, (gpio_irq_event)IRQ_LOW, 1); gpio_irq_enable((gpio_irq_t *)pGpioIrqRecv); gtimer_init((gtimer_t *)pTimerRecv, TIMER4); gtimer_start_one_shout((gtimer_t *)pTimerRecv, GAP, (void *)ir_recv_timer_handler, (uint32_t)this); gtimer_stop((gtimer_t *)pTimerRecv); Clear(); }
static int __init gpio_init(void) { /* enable EIC */ sci_adi_set(ANA_REG_GLB_APB_CLK_EN, BIT_EIC_EB | BIT_RTC_EIC_EB); sprd_greg_set_bits(REG_TYPE_GLOBAL, GEN0_EIC_EN | GEN0_EIC_RTC_EN, GR_GEN0); gpiochip_add(&d_sci_eic.chip); gpiochip_add(&d_sci_gpio.chip); gpiochip_add(&a_sci_eic.chip); gpiochip_add(&a_sci_gpio.chip); #ifndef CONFIG_NKERNEL #ifndef CONFIG_ARCH_SC7710 irq_set_chip_and_handler(IRQ_EIC_INT, &dummy_irq_chip, handle_level_irq); set_irq_flags(IRQ_EIC_INT, IRQF_VALID); #endif #endif gpio_irq_init(IRQ_EIC_INT, &d_sci_eic.chip, &d_eic_irq_chip); gpio_irq_init(IRQ_GPIO_INT, &d_sci_gpio.chip, &d_gpio_irq_chip); gpio_irq_init(IRQ_ANA_EIC_INT, &a_sci_eic.chip, &a_eic_irq_chip); gpio_irq_init(IRQ_ANA_GPIO_INT, &a_sci_gpio.chip, &a_gpio_irq_chip); return 0; }
void config_uart() { // setup uart serial_init(&mysobj, UART_TX, UART_RX); serial_baud(&mysobj, 38400); serial_format(&mysobj, 8, ParityNone, 1); serial_irq_handler(&mysobj, uart_irq_callback, (uint32_t)&mysobj); serial_irq_set(&mysobj, RxIrq, 1); serial_irq_set(&mysobj, TxIrq, 1); // config uart rx as gpio wakeup pin gpio_irq_t gpio_rx_wake; gpio_irq_init(&gpio_rx_wake, UART_RX, gpio_uart_rx_irq_callback, NULL); gpio_irq_set(&gpio_rx_wake, IRQ_FALL, 1); // Falling Edge Trigger gpio_irq_enable(&gpio_rx_wake); }
/** * @brief Main program. * @param None * @retval None */ void main(void) { gpio_irq_t gpio_btn; // Init LED control pin gpio_init(&gpio_led, GPIO_LED_PIN); gpio_dir(&gpio_led, PIN_OUTPUT); // Direction: Output gpio_mode(&gpio_led, PullNone); // No pull // Initial Push Button pin as interrupt source gpio_irq_init(&gpio_btn, GPIO_IRQ_PIN, gpio_demo_irq_handler, (uint32_t)(&gpio_led)); gpio_irq_set(&gpio_btn, IRQ_FALL, 1); // Falling Edge Trigger gpio_irq_enable(&gpio_btn); led_ctrl = 1; gpio_write(&gpio_led, led_ctrl); while(1); }
/* irq interrupt handler init */ static inline int irq_init(void) { int i; /* * After relocation done, bss data initialized. * So irq_init shoule be initialized after bss data initialized. */ if (!(gd->flags & GD_FLG_RELOC)) { debug("irq_init: interrupt should be initialized after relocation and bss data done.\n"); return -1; } debug("rk irq version: %s\n", RKIRQ_VERSION); if (gd->flags & GD_FLG_IRQINIT) { debug("irq_init: irq has been initialized.\n"); return 0; } gd->flags |= GD_FLG_IRQINIT; debug("irq_init: irq initialized.\n"); for (i = 0; i < NR_IRQS_MAXNUM; i++) { g_irq_handler[i].m_func = NULL; } gic_get_cpumask(); /* gic irq init */ #if !defined(CONFIG_ARM64) /* armv8 gic init has init when lowlevel_init done */ gic_irq_init(); #endif /* gpio irq init */ #ifdef CONFIG_RK_GPIO gpio_irq_init(); #endif return 0; }
void main(void) { gpio_t gpio_led; gpio_irq_t gpio_btn; // Init LED control pin gpio_init(&gpio_led, GPIO_LED_PIN); gpio_dir(&gpio_led, PIN_OUTPUT); // Direction: Output gpio_mode(&gpio_led, PullNone); // No pull // Initial Push Button pin as interrupt source gpio_irq_init(&gpio_btn, GPIO_IRQ_PIN, gpio_demo_irq_handler, (uint32_t)(&gpio_led)); gpio_irq_set(&gpio_btn, IRQ_FALL, 1); // Falling Edge Trigger gpio_irq_enable(&gpio_btn); // led on means system is in run mode gpio_write(&gpio_led, 1); printf("\r\nPush button at PC_4 to enter deep sleep\r\n"); while(1); }
void pinMode( uint32_t ulPin, uint32_t ulMode) { void *pGpio_t; if ( ulPin < 0 || ulPin > TOTAL_GPIO_PIN_NUM ) { return; } if ( (g_APinDescription[ulPin].ulPinType == PIO_GPIO || g_APinDescription[ulPin].ulPinType == PIO_GPIO_IRQ) && g_APinDescription[ulPin].ulPinMode == ulMode) { return; } if ( g_APinDescription[ulPin].ulPinType == PIO_PWM ) { pinRemoveMode(ulPin); } if ( g_APinDescription[ulPin].ulPinType == PIO_GPIO && (ulMode == INPUT_IRQ_FALL || ulMode == INPUT_IRQ_RISE) ) { // requst type from gpio_t to gpio_irq_t pinRemoveMode(ulPin); } if ( g_APinDescription[ulPin].ulPinType == PIO_GPIO_IRQ && (ulMode == INPUT || ulMode == OUTPUT || ulMode == INPUT_PULLUP || ulMode == INPUT_PULLNONE || ulMode == OUTPUT_OPENDRAIN) ) { // requst type from gpio_irq_t to gpio_t pinRemoveMode(ulPin); } if ( g_APinDescription[ulPin].ulPinType == NOT_INITIAL ) { if (ulMode == INPUT_IRQ_FALL || ulMode == INPUT_IRQ_RISE) { gpio_pin_struct[ulPin] = malloc ( sizeof(gpio_irq_t) ); pGpio_t = gpio_pin_struct[ulPin]; gpio_irq_init( pGpio_t, g_APinDescription[ulPin].pinname, gpioIrqHandler, ulPin); g_APinDescription[ulPin].ulPinType = PIO_GPIO_IRQ; } else { gpio_pin_struct[ulPin] = malloc ( sizeof(gpio_t) ); pGpio_t = gpio_pin_struct[ulPin]; gpio_init( pGpio_t, g_APinDescription[ulPin].pinname ); g_APinDescription[ulPin].ulPinType = PIO_GPIO; } g_APinDescription[ulPin].ulPinMode = ulMode; } else { pGpio_t = gpio_pin_struct[ulPin]; } switch ( ulMode ) { case INPUT: gpio_dir( (gpio_t *)pGpio_t, PIN_INPUT ); gpio_mode( (gpio_t *)pGpio_t, PullDown ); break; case INPUT_PULLNONE: gpio_dir( (gpio_t *)pGpio_t, PIN_INPUT ); gpio_mode( (gpio_t *)pGpio_t, PullNone ); break; case INPUT_PULLUP: gpio_dir( (gpio_t *)pGpio_t, PIN_INPUT ); gpio_mode( (gpio_t *)pGpio_t, PullUp ); break; case OUTPUT: gpio_dir( (gpio_t *)pGpio_t, PIN_OUTPUT ); gpio_mode( (gpio_t *)pGpio_t, PullNone ); break; case OUTPUT_OPENDRAIN: gpio_dir( (gpio_t *)pGpio_t, PIN_OUTPUT ); gpio_mode( (gpio_t *)pGpio_t, OpenDrain ); break; case INPUT_IRQ_FALL: gpio_irq_set( (gpio_irq_t *)pGpio_t, IRQ_FALL, 1 ); gpio_irq_enable( (gpio_irq_t *)pGpio_t ); break; case INPUT_IRQ_RISE: gpio_irq_set( (gpio_irq_t *)pGpio_t, IRQ_RISE, 1 ); gpio_irq_enable( (gpio_irq_t *)pGpio_t ); break; case INPUT_IRQ_LOW: gpio_irq_set( (gpio_irq_t *)pGpio_t, IRQ_LOW, 1 ); gpio_irq_enable( (gpio_irq_t *)pGpio_t ); break; case INPUT_IRQ_HIGH: gpio_irq_set( (gpio_irq_t *)pGpio_t, IRQ_HIGH, 1 ); gpio_irq_enable( (gpio_irq_t *)pGpio_t ); break; default: break ; } }