1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include "gpio-raw.h"
-
- int mem_fd;
- char *gpio_mem, *gpio_map;
- char *spi0_mem, *spi0_map;
-
-
- // I/O access
- volatile unsigned *gpio;
-
- //
- // Set up a memory regions to access GPIO
- //
- bool setup_io()
- {
- /* open /dev/mem */
- if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0) {
- /*printf("can't open /dev/mem \n");
- exit (-1);*/
- return false;
- }
-
- /* mmap GPIO */
-
- // Allocate MAP block
- if ((gpio_mem = (char*)malloc(BLOCK_SIZE + (PAGE_SIZE-1))) == NULL) {
- /*printf("allocation error \n");
- exit (-1);*/
- return false;
- }
-
- // Make sure pointer is on 4K boundary
- if ((unsigned long)gpio_mem % PAGE_SIZE)
- gpio_mem += PAGE_SIZE - ((unsigned long)gpio_mem % PAGE_SIZE);
-
- // Now map it
- gpio_map = (char *)mmap(
- (caddr_t)gpio_mem,
- BLOCK_SIZE,
- PROT_READ|PROT_WRITE,
- MAP_SHARED|MAP_FIXED,
- mem_fd,
- GPIO_BASE
- );
-
- if ((long)gpio_map < 0) {
- /*printf("mmap error %d\n", (int)gpio_map);
- exit (-1);*/
- return false;
- }
-
- // Always use volatile pointer!
- gpio = (volatile unsigned *)gpio_map;
- return true;
-
- } // setup_io
|