반응형
이번 예제는 interrupt 예제입니다.
main.c
1 2 3 4 5 6 7 8 9 | int main(void) { gpio_init(); while (true) { // Do nothing. } } | cs |
이번 예제는 Line 3의 gpio_init()으로 끝입니다.
1 2 3 4 5 6 7 8 9 10 11 12 | static void gpio_init(void) { nrf_gpio_cfg_output(PIN_OUT); nrf_gpio_cfg_input(PIN_IN, NRF_GPIO_PIN_PULLUP); nrf_gpio_pin_clear(PIN_OUT); // Enable interrupt: NVIC_EnableIRQ(GPIOTE_IRQn); NRF_GPIOTE->CONFIG[0] = (GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos) | (PIN_IN << GPIOTE_CONFIG_PSEL_Pos) | (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos); NRF_GPIOTE->INTENSET = GPIOTE_INTENSET_IN0_Set << GPIOTE_INTENSET_IN0_Pos; } | cs |
3~4 : gpio설정하는 부분이고 5에서는 LED 0의 초기값을 low로 해서 켜지게 합니다.
7~11 : GPIOTE interrupt를 설정하는 부분입니다.
7 : GPIOTE interrupt를 사용하겠다는 것이고,
8~11 : interrupt 설정부분입니다.
8~10 : 아래의 CONFIG 설정부분입니다.
1 2 3 4 5 6 7 8 | #define GPIOTE_CONFIG_POLARITY_Toggle (0x03UL) /*!< Toggle. */ #define GPIOTE_CONFIG_POLARITY_Pos (16UL) /*!< Position of POLARITY field. */ #define PIN_IN BSP_BUTTON_0 #define GPIOTE_CONFIG_PSEL_Pos (8UL) /*!< Position of PSEL field. */ #define GPIOTE_CONFIG_MODE_Event (0x01UL) /*!< Channel configure in event mode. */ #define GPIOTE_CONFIG_MODE_Pos (0UL) /*!< Position of MODE field. */ | cs |
위와 같이 define되어있으므로
NRF_GPIOTE->CONFIG[0]=(3<<16|0<<8|1<<0)이 되어
MODE는 Event, Event Pin은 0번(즉 button 0), 방향성은 Toggle(rising이든 falling이든 언제나 이벤트 발생)이 됩니다.
11 : interrupt를 enable하는 부분입니다.
이제 interrupt가 enable 되었고, button 0을 누를때마다 interrupt가 걸리게 됩니다.
GPIOTE의 interrupt callback 함수는 GPIOTE_IRQHandler입니다.
1 2 3 4 5 6 7 8 9 10 | void GPIOTE_IRQHandler(void) { // Event causing the interrupt must be cleared. if ((NRF_GPIOTE->EVENTS_IN[0] == 1) && (NRF_GPIOTE->INTENSET & GPIOTE_INTENSET_IN0_Msk)) { NRF_GPIOTE->EVENTS_IN[0] = 0; nrf_gpio_pin_toggle(PIN_OUT); } } | cs |
4~5 : GPIOTE 이벤트가 발생하고, 인터럽트가 enable되어있고, interrupt가 걸리게되면(GPIOTE_INTENSET_IN0_Msk가 1이되면)
7~8 : 설정된 출력pin(LED 0)을 toggle시킵니다.
이때 event모드가 toggle방식이므로, button 0을 눌렀을때, 땠을때 모두 interrupt가 발생하게 됩니다.
반응형
'Study > nRF51xxx(BLE)' 카테고리의 다른 글
nRF51 DK 예제 10 - PWM (2) | 2015.03.04 |
---|---|
nRF51 DK 예제 9 - PPI (0) | 2015.03.04 |
nRF51 DK 예제 7 -Radio Receiver (0) | 2015.03.03 |
nRF51 DK 예제 6 -Radio Transmitter (0) | 2015.03.03 |
nRF51 DK 예제 5 -GPIOTE (0) | 2015.03.02 |