Created
March 18, 2015 03:42
-
-
Save nasamuffin/a52e2b0c0eb97a9f5b75 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _BEAGLEBONE_GPIO_H_ | |
#define GPIO1_START_ADDR 0x4804C000 | |
#define GPIO1_END_ADDR 0x4804DFFF | |
#define GPIO1_SIZE (GPIO1_END_ADDR - GPIO1_START_ADDR) | |
#define GPIO_OE 0x134 | |
#define GPIO_SETDATAOUT 0x194 | |
#define GPIO_CLEARDATAOUT 0x190 | |
#define USR0_LED (1<<21) | |
#define USR1_LED (1<<22) | |
#define USR2_LED (1<<23) | |
#define USR3_LED (1<<24) | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <sys/mman.h> | |
#include <sys/stat.h> | |
#include <fcntl.h> | |
#include "beaglebone_gpio.h" | |
int main(int argc, char *argv[]) { | |
volatile void *gpio_addr = NULL; | |
volatile unsigned int *gpio_oe_addr = NULL; | |
volatile unsigned int *gpio_setdataout_addr = NULL; | |
volatile unsigned int *gpio_cleardataout_addr = NULL; | |
unsigned int reg; | |
int fd = open("/dev/mem", O_RDWR); | |
printf("Mapping %X - %X (size: %X)\n", GPIO1_START_ADDR, GPIO1_END_ADDR, GPIO1_SIZE); | |
gpio_addr = mmap(0, GPIO1_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO1_START_ADDR); | |
gpio_oe_addr = gpio_addr + GPIO_OE; | |
gpio_setdataout_addr = gpio_addr + GPIO_SETDATAOUT; | |
gpio_cleardataout_addr = gpio_addr + GPIO_CLEARDATAOUT; | |
if(gpio_addr == MAP_FAILED) { | |
printf("Unable to map GPIO\n"); | |
exit(1); | |
} | |
printf("GPIO mapped to %p\n", gpio_addr); | |
printf("GPIO OE mapped to %p\n", gpio_oe_addr); | |
printf("GPIO SETDATAOUTADDR mapped to %p\n", gpio_setdataout_addr); | |
printf("GPIO CLEARDATAOUT mapped to %p\n", gpio_cleardataout_addr); | |
reg = *gpio_oe_addr; | |
printf("GPIO1 configuration: %X\n", reg); | |
reg = reg & (0xFFFFFFFF - USR1_LED); | |
*gpio_oe_addr = reg; | |
printf("GPIO1 configuration: %X\n", reg); | |
printf("Start blinking LED USR1\n"); | |
while(1) { | |
printf("ON\n"); | |
*gpio_setdataout_addr= USR1_LED; | |
sleep(1); | |
printf("OFF\n"); | |
*gpio_cleardataout_addr = USR1_LED; | |
sleep(1); | |
} | |
close(fd); | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment