This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

clear external interrupt

link text from this post i am generating interrupt using button 3. when i push my button,interrupt generates,LED turn on. but after turning on LED, i want to clear interrupt. so LED become off.here i don't want to use nrf_drv_gpiote_out_toggle(); function. my code is here

void gpiote_evt_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    switch(action)
    {
       case NRF_GPIOTE_POLARITY_HITOLO:
			
			 nrf_drv_gpiote_out_clear(LED_3);	
            break;
        default:
            
            break;
    }
} 
Parents
  • You have to set the input pin to generate events on both High-to-Low and Low-to-High transitions(NRF_GPIOTE_POLARITY_TOGGLE). In the event handler you have to check if the pin is set( i.e. HIGH ) or not and based on that clear or set the LED.

    void gpiote_evt_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
    {
        switch(action)
        {
            case NRF_GPIOTE_POLARITY_TOGGLE:
                if(nrf_drv_gpiote_in_is_set(INTERRUPT_PIN))
                {
                    nrf_drv_gpiote_out_set(LED_3);
                }
                else
                {
                    nrf_drv_gpiote_out_clear(LED_3);
                }
                break;
            default:
                //do nothing
                break;
        }
    }
    

    MAIN:

    In main you have to configure the input pin to generate the NRF_GPIOTE_POLARITY_TOGGLEevent when the pin state is changed.

    int main(void)
    {
        
        ret_code_t ret_code;
        
        // Initialize the GPIOTE Peripheral 
        ret_code = nrf_drv_gpiote_init();
        APP_ERROR_CHECK(ret_code);
        
        // Configure LED_3 pin as output
        nrf_drv_gpiote_out_config_t led_config = GPIOTE_CONFIG_OUT_TASK_LOW;
        
        // Initialize LED_3 pin as output
        ret_code =  nrf_drv_gpiote_out_init(LED_3, &led_config);
        APP_ERROR_CHECK(ret_code);
        
        
        
        // Configuration for Interrupt Pin
        nrf_drv_gpiote_in_config_t config =
        {
            .sense = NRF_GPIOTE_POLARITY_TOGGLE, 
            .pull = NRF_GPIO_PIN_PULLUP , 
            .is_watcher = false,
            .hi_accuracy = false
        };
            
        // Initialize Interrupt Pin
        ret_code = nrf_drv_gpiote_in_init(INTERRUPT_PIN, &config, gpiote_evt_handler);
        APP_ERROR_CHECK(ret_code);
        
        // Enable Interrupts from interrupt pin
        nrf_drv_gpiote_in_event_enable(INTERRUPT_PIN,true);
        
        
        while (true)
        {
            // Do nothing.
        }
    }
    
  • hello there i have updated code. my problem : when i press button LED turn on,and i release button, LED turn off. now i want to run else condition more time. so i add delay. so now when i release button after some delay LED off.

    now i am doing same thing for sd_power_system_off(). but my nrf51822 don't off for same time that LED takes. can you tell me solution??

    so my main aim is to put nrf51822 in system off mode for more time

Reply
  • hello there i have updated code. my problem : when i press button LED turn on,and i release button, LED turn off. now i want to run else condition more time. so i add delay. so now when i release button after some delay LED off.

    now i am doing same thing for sd_power_system_off(). but my nrf51822 don't off for same time that LED takes. can you tell me solution??

    so my main aim is to put nrf51822 in system off mode for more time

Children
No Data
Related