You can try only map 4Bytes
2015-05-22 3:13 GMT+08:00 Jacek Radzikowski <jacek.radzikow...@gmail.com>: > Clocks for some of the GPIO modules are not enabled by default, and > accessing them will cause BUS error. The easiest workaround is to > export one pin from each of the modules using /sys interface: > https://groups.google.com/d/msg/beagleboard/OYFp4EXawiI/Mq6s3sg14HoJ > Here is a short script which does the job: > https://github.com/piranha32/IOoo/blob/master/tools/bbb_enable_gpio.sh > > Regards, > j. > > > On Thu, May 21, 2015 at 2:59 PM, <ja...@dfsoftware.com> wrote: > > I've been working to get the access to the GPIO registers to replace the > > existing sys access we are using now. However, I'm crashing accessing > both > > GPIO 2 and 3 (1 and 2 appear fine). I'm sure I'm just doing something > > stupid. Here is some basic setup: > > > > __off_t MUX_OFFSET[] = { > > 0x44E07000, // GPIO 0 > > 0x4804C000, // GPIO 1 > > 0x481AC000, // GPIO 2 > > 0x481AE000 // GPIO 3 > > }; > > > > struct MUX_LAYOUT > > { > > uint8_t *gpio_addr; > > uint32_t *gpio_oe_addr; > > uint32_t *gpio_setdataout_addr; > > uint32_t *gpio_cleardataout_addr; > > uint32_t *gpio_dataout_addr; > > uint32_t *gpio_datain_addr; > > }; > > > > MUX_LAYOUT MUXes[4]; > > > > #define GPIO_MEM_LENGTH 0xfff > > #define GPIO_OE 0x134 > > #define GPIO_SETDATAOUT 0x194 > > #define GPIO_CLEARDATAOUT 0x190 > > #define GPIO_DATAOUT 0x13C > > #define GPIO_DATAIN 0x138 > > > > Then here is example code that will always crash on accessing GPIO 2: > > > > fd = open("/dev/mem", O_RDWR); > > > > for( size_t gpio = 0; gpio < 4; ++gpio) > > { > > MUX_LAYOUT& mux = MUXes[gpio]; > > > > mux.gpio_addr = (uint8_t*)mmap(0, GPIO_MEM_LENGTH, PROT_READ | > > PROT_WRITE, MAP_SHARED, fd, MUX_OFFSET[gpio]); > > > > if(mux.gpio_addr == MAP_FAILED) > > { > > throw MSC_EXCEPTION("Unable to map texpr PIO"); > > } > > > > mux.gpio_oe_addr = (uint32_t *)(mux.gpio_addr + GPIO_OE); > > mux.gpio_setdataout_addr = (uint32_t *)(mux.gpio_addr + > > GPIO_SETDATAOUT); > > mux.gpio_cleardataout_addr = (uint32_t *)(mux.gpio_addr + > > GPIO_CLEARDATAOUT); > > mux.gpio_dataout_addr = (uint32_t *)(mux.gpio_addr + > GPIO_DATAOUT); > > mux.gpio_datain_addr = (uint32_t *)(mux.gpio_addr + > GPIO_DATAIN); > > > > // Crashes here when gpio == 2 > > uint32_t temp = *mux.gpio_datain_addr; > > } > > > > In this case I'm crashing dereferencing gpio_datain_addr, but it will > crash > > accessing any of the pointers created when setting up GPIO 2 and 3. Any > > thoughts? I'm running a relatively current debian build. > > > > Thanks for the help, > > > > Jared > > > > -- > > For more options, visit http://beagleboard.org/discuss > > --- > > You received this message because you are subscribed to the Google Groups > > "BeagleBoard" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to beagleboard+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > > > -- > Given a choice between two theories, take the one which is funnier > > -- > For more options, visit http://beagleboard.org/discuss > --- > You received this message because you are subscribed to the Google Groups > "BeagleBoard" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to beagleboard+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.