title: Beaglebone am335x accessing GPIO by mmap, set and clear pin
body: <p>I'm writing a simple program to set and clear a pin (the purpose is to use that pin as a custom spi_CS).
  I'm able to export that pin (gpio1_17, port 9 pin 23 bb white) and to use that trough the filesystem but I have to drive it faster.</p>
  
  <p>This is the code:</p>
  
  <pre><code>uint32_t *gpio;
  
  int fd = open("/dev/mem", O_RDWR|O_SYNC);
  if (fd &lt; 0){
      fprintf(stderr, "Unable to open port\n\r");
      exit(fd);
  }
  
  gpio =(uint32_t *) mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO1_offset); // start of GPIOA
  
  if(gpio == (void *) -1) {
      printf("Memory map failed.\n");
      exit(0);
  } else {
      printf("Memory mapped at address %p.\n", gpio);
  }
  
  printf("\nGPIO_OE:%X\n",gpio[GPIO_OE/4]);
  gpio[GPIO_OE/4]=USR1;
  printf("\nGPIO_OE:%X\n",gpio[GPIO_OE/4]);
  
  printf("\nGPIO_CLEARDATAOUT:%X\n",gpio[GPIO_CLEARDATAOUT/4]);
  gpio[GPIO_CLEARDATAOUT/4]=USR1;
  printf("\nGPIO_CLEARDATAOUT:%X\n",gpio[GPIO_CLEARDATAOUT/4]);
  
  
  sleep(1);
  
  printf("\nGPIO_SETDATAOUT%X\n",gpio[GPIO_SETDATAOUT/4]);
  gpio[GPIO_DATAOUT/4]=USR1;
  printf("\nGPIO_SETDATAOUT%X\n",gpio[GPIO_SETDATAOUT/4]);
  </code></pre>
  
  <p>with</p>
  
  <pre><code>#define GPIO1_offset  0x4804c000
  #define GPIO1_size  0x4804cfff-GPIO1_offset
  #define GPIO_OE  0x134
  #define GPIO_SETDATAOUT  0x194
  #define GPIO_CLEARDATAOUT  0x190
  #define GPIO_DATAOUT 0x13C
  #define USR1  1&lt;&lt;17
  </code></pre>
  
  <p>I'm able to outputenable that pin, beacuse if I put it high before running the program, that ping goes low. But I cannot set and reset it. Any ideas?</p>