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

	}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 8
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);
}
Exemplo n.º 9
0
/**
  * @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);
}
Exemplo n.º 10
0
/* 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;
}
Exemplo n.º 11
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);
}
Exemplo n.º 12
0
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 ;
    }
}