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

Proggram GPIOTE using registers

Hi everyone,

I'm learning about proggram the nRF52840 dongle and I tried to code an interruption. Press the SW2 to turn on a LED

#include "boards.h"
#include "nrf_delay.h"
#include <stdbool.h>
#include <stdint.h>

#define MODE 0
#define PSEL 8
#define PORT 13
#define POLARITY 16
#define OUTINIT 20

int main(void) {

  //PIN SETTINGS
  //Boton
  NRF_P1->PIN_CNF[6] = (0x00 << 0x00) | (0x01 << 0x02) | (0x00 << 0x08) | (0x02 << 0x16);
  
  //LED
  NRF_P0->PIN_CNF[8] = (0x01 << 0x00);

  //BOTON config
  NRF_GPIOTE->CONFIG[0] = (0x01 << MODE) | (0x02 << PSEL) | (0x00 << PORT) | (0x01 << POLARITY);
  
  //LED config
  NRF_GPIOTE->CONFIG[1] = (0x03 << MODE) | (0x08 << PSEL) | (0x00 << PORT) | (0x00 << POLARITY) | (0x01 << OUTINIT);
 
  //Enable Tasks & Events
  NRF_GPIOTE->INTENSET = (0x01 << 0x00) | (0x01 << 0x01);
  
  //RESET EVENTS
  NRF_GPIOTE->EVENTS_IN[0] = 0;  

  NRF_P0->OUT = (0x01 << 0x08);

  //CODE

  while (true) {
    if (NRF_GPIOTE->EVENTS_IN[0] != 0) {
      NRF_GPIOTE->TASKS_SET[1];
    } else {
      NRF_GPIOTE->TASKS_CLR[1];
    }
  }
}

So, looking at this code, where did I fail?

Thanks for helping and best regards.

Related