Re: [beagleboard] Re: GPIO (LED) access using mmap
Thanks. In the following line it has been chosen 0x0004 to write in to the configuration register. pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 How to select that value? On Wednesday, 2 April 2014 18:19:19 UTC+5:30, Jacek Radzikowski wrote: The address is in bytes and pinconf is an array of integers, which are 4 bytes long. j. On Wed, Apr 2, 2014 at 8:02 AM, milkyway muhamme...@gmail.comjavascript: wrote: I am new to beagle baord. I have a doubt here. Please help. In the following line pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 Why do you need the division inside the pinconf array for indexing? On Wednesday, 7 December 2011 20:26:08 UTC+5:30, dl4mea wrote: Hello, My self given task was to get a LED blinking on the Beagleboard. After getting bored from echo 0 brightness and puzzling together some pieces of code that I found on the net, I finally got a piece of plain C code that I can cross compile on a Linux machine and play on the Beagleboard. The two user LEDs as well as one pin of the extension connect flash in a 1sec clock with it. No guarantee for completeness, no guarantee for functionality, but here it works. Enjoy! Günter (dl4mea) /* Blinking of user LEDs USR0 and USR1 and gpio_157 on Expansion Connector P2 NOTE: gpio_157 is 1.8V IO, possibly not sufficient for a LED disconnect user LEDs from Linux echo none /sys/class/leds/beagleboard::usr0/trigger; echo none / sys/class/leds/beagleboard::usr1/trigger; compile using path_to_cross/arm-armv6-linux-gnueabi-g++ -static blink.c -o blink References: OMAP35x Applications Processor, Technical Reference Manual spruf98u.pdf */ #include stdio.h #include stdlib.h #include sys/types.h #include sys/stat.h #include unistd.h #include fcntl.h #include sys/mman.h int main(void) { printf (open file descriptor for PADCONFIG\n); int fd = open(/dev/mem, O_RDWR | O_SYNC); //O_SYNC makes the memory uncacheable if (fd 0) { printf(Could not open PADCONFIG memory fd\n); return 0; } // Pad configuration printf (map PINCONFIG\n); volatile ulong *pinconf; pinconf = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x4800); if (pinconf == MAP_FAILED) { printf(Pinconf Mapping failed\n); close(fd); return 0; } printf (set pinconfig GPIO\n); pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 pinconf[0x2180/4] = pinconf[0x2180/4] 0x | 0x0004; // gpio_150 pinconf[0x218c/4] = pinconf[0x218c/4] 0x | 0x0004; // gpio_157 close(fd); /* -- */ printf (open file descriptor for GPIO\n); int gpio_fd = open(/dev/mem, O_RDWR | O_SYNC); if (gpio_fd 0) { printf(Could not open GPIO memory fd\n); return 0; } // GPIO configuration printf (map GPIO\n); volatile ulong *gpio; gpio = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, gpio_fd, 0x4905); if (gpio == MAP_FAILED) { printf (GPIO Mapping failed\n); close(gpio_fd); return 0; } printf (set GPIO config\n); // Configure GPIO pins on bank 5 as output. // GPIO 5 is at physical address 0x49056000 = 0x4905+0x6000 gpio[0x6034/4] = ~0x2060; // set low for output // Also disable the wakeupenable and irqenable intertupts // GPIO clear_Wakeupenable is offset by 0x80 for each bank gpio[0x6080/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_WAKEUPENABLE register // GPIO clear_irqenable1 is offset by 0x60 for each bank gpio[0x6060/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE1 register // GPIO clear_irqenable2 is offset by 0x70 for each bank gpio[0x6070/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE2 register /* -- */ printf (Toggle Pins\n); int j=0; for (j=0; j10; j++) { printf (j=%u\n, j); //clear_data_out has offset 0x90 gpio[0x6090/4]=0x2060; usleep(50); //set_data_out has offset 0x94 gpio[0x6094/4]=0x2060; usleep(50); } close(gpio_fd); } -- 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
Re: [beagleboard] Re: GPIO (LED) access using mmap
The processor's TRM has full description of the bits in the control registers. j. On Thu, Apr 3, 2014 at 5:24 AM, milkyway muhammednouf...@gmail.com wrote: Thanks. In the following line it has been chosen 0x0004 to write in to the configuration register. pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 How to select that value? On Wednesday, 2 April 2014 18:19:19 UTC+5:30, Jacek Radzikowski wrote: The address is in bytes and pinconf is an array of integers, which are 4 bytes long. j. On Wed, Apr 2, 2014 at 8:02 AM, milkyway muhamme...@gmail.com wrote: I am new to beagle baord. I have a doubt here. Please help. In the following line pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 Why do you need the division inside the pinconf array for indexing? On Wednesday, 7 December 2011 20:26:08 UTC+5:30, dl4mea wrote: Hello, My self given task was to get a LED blinking on the Beagleboard. After getting bored from echo 0 brightness and puzzling together some pieces of code that I found on the net, I finally got a piece of plain C code that I can cross compile on a Linux machine and play on the Beagleboard. The two user LEDs as well as one pin of the extension connect flash in a 1sec clock with it. No guarantee for completeness, no guarantee for functionality, but here it works. Enjoy! Günter (dl4mea) /* Blinking of user LEDs USR0 and USR1 and gpio_157 on Expansion Connector P2 NOTE: gpio_157 is 1.8V IO, possibly not sufficient for a LED disconnect user LEDs from Linux echo none /sys/class/leds/beagleboard::usr0/trigger; echo none / sys/class/leds/beagleboard::usr1/trigger; compile using path_to_cross/arm-armv6-linux-gnueabi-g++ -static blink.c -o blink References: OMAP35x Applications Processor, Technical Reference Manual spruf98u.pdf */ #include stdio.h #include stdlib.h #include sys/types.h #include sys/stat.h #include unistd.h #include fcntl.h #include sys/mman.h int main(void) { printf (open file descriptor for PADCONFIG\n); int fd = open(/dev/mem, O_RDWR | O_SYNC); //O_SYNC makes the memory uncacheable if (fd 0) { printf(Could not open PADCONFIG memory fd\n); return 0; } // Pad configuration printf (map PINCONFIG\n); volatile ulong *pinconf; pinconf = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x4800); if (pinconf == MAP_FAILED) { printf(Pinconf Mapping failed\n); close(fd); return 0; } printf (set pinconfig GPIO\n); pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 pinconf[0x2180/4] = pinconf[0x2180/4] 0x | 0x0004; // gpio_150 pinconf[0x218c/4] = pinconf[0x218c/4] 0x | 0x0004; // gpio_157 close(fd); /* -- */ printf (open file descriptor for GPIO\n); int gpio_fd = open(/dev/mem, O_RDWR | O_SYNC); if (gpio_fd 0) { printf(Could not open GPIO memory fd\n); return 0; } // GPIO configuration printf (map GPIO\n); volatile ulong *gpio; gpio = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, gpio_fd, 0x4905); if (gpio == MAP_FAILED) { printf (GPIO Mapping failed\n); close(gpio_fd); return 0; } printf (set GPIO config\n); // Configure GPIO pins on bank 5 as output. // GPIO 5 is at physical address 0x49056000 = 0x4905+0x6000 gpio[0x6034/4] = ~0x2060; // set low for output // Also disable the wakeupenable and irqenable intertupts // GPIO clear_Wakeupenable is offset by 0x80 for each bank gpio[0x6080/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_WAKEUPENABLE register // GPIO clear_irqenable1 is offset by 0x60 for each bank gpio[0x6060/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE1 register // GPIO clear_irqenable2 is offset by 0x70 for each bank gpio[0x6070/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE2 register /* -- */ printf (Toggle Pins\n); int j=0; for (j=0; j10; j++) { printf (j=%u\n, j); //clear_data_out has offset 0x90 gpio[0x6090/4]=0x2060; usleep(50); //set_data_out has offset 0x94 gpio[0x6094/4]=0x2060; usleep(50); } close(gpio_fd); } -- 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
Re: [beagleboard] Re: GPIO (LED) access using mmap
Got it. Here it says -- 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.
Re: [beagleboard] Re: GPIO (LED) access using mmap
https://lh4.googleusercontent.com/-HKGIHkUbEBs/Uz0uGFT6tOI/AJ4/2RW_Vpai_p8/s1600/gg.png On Thursday, 3 April 2014 14:59:51 UTC+5:30, Jacek Radzikowski wrote: The processor's TRM has full description of the bits in the control registers. j. On Thu, Apr 3, 2014 at 5:24 AM, milkyway muhamme...@gmail.comjavascript: wrote: Thanks. In the following line it has been chosen 0x0004 to write in to the configuration register. pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 How to select that value? On Wednesday, 2 April 2014 18:19:19 UTC+5:30, Jacek Radzikowski wrote: The address is in bytes and pinconf is an array of integers, which are 4 bytes long. j. On Wed, Apr 2, 2014 at 8:02 AM, milkyway muhamme...@gmail.com wrote: I am new to beagle baord. I have a doubt here. Please help. In the following line pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 Why do you need the division inside the pinconf array for indexing? On Wednesday, 7 December 2011 20:26:08 UTC+5:30, dl4mea wrote: Hello, My self given task was to get a LED blinking on the Beagleboard. After getting bored from echo 0 brightness and puzzling together some pieces of code that I found on the net, I finally got a piece of plain C code that I can cross compile on a Linux machine and play on the Beagleboard. The two user LEDs as well as one pin of the extension connect flash in a 1sec clock with it. No guarantee for completeness, no guarantee for functionality, but here it works. Enjoy! Günter (dl4mea) /* Blinking of user LEDs USR0 and USR1 and gpio_157 on Expansion Connector P2 NOTE: gpio_157 is 1.8V IO, possibly not sufficient for a LED disconnect user LEDs from Linux echo none /sys/class/leds/beagleboard::usr0/trigger; echo none / sys/class/leds/beagleboard::usr1/trigger; compile using path_to_cross/arm-armv6-linux-gnueabi-g++ -static blink.c -o blink References: OMAP35x Applications Processor, Technical Reference Manual spruf98u.pdf */ #include stdio.h #include stdlib.h #include sys/types.h #include sys/stat.h #include unistd.h #include fcntl.h #include sys/mman.h int main(void) { printf (open file descriptor for PADCONFIG\n); int fd = open(/dev/mem, O_RDWR | O_SYNC); //O_SYNC makes the memory uncacheable if (fd 0) { printf(Could not open PADCONFIG memory fd\n); return 0; } // Pad configuration printf (map PINCONFIG\n); volatile ulong *pinconf; pinconf = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x4800); if (pinconf == MAP_FAILED) { printf(Pinconf Mapping failed\n); close(fd); return 0; } printf (set pinconfig GPIO\n); pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 pinconf[0x2180/4] = pinconf[0x2180/4] 0x | 0x0004; // gpio_150 pinconf[0x218c/4] = pinconf[0x218c/4] 0x | 0x0004; // gpio_157 close(fd); /* -- */ printf (open file descriptor for GPIO\n); int gpio_fd = open(/dev/mem, O_RDWR | O_SYNC); if (gpio_fd 0) { printf(Could not open GPIO memory fd\n); return 0; } // GPIO configuration printf (map GPIO\n); volatile ulong *gpio; gpio = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, gpio_fd, 0x4905); if (gpio == MAP_FAILED) { printf (GPIO Mapping failed\n); close(gpio_fd); return 0; } printf (set GPIO config\n); // Configure GPIO pins on bank 5 as output. // GPIO 5 is at physical address 0x49056000 = 0x4905+0x6000 gpio[0x6034/4] = ~0x2060; // set low for output // Also disable the wakeupenable and irqenable intertupts // GPIO clear_Wakeupenable is offset by 0x80 for each bank gpio[0x6080/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_WAKEUPENABLE register // GPIO clear_irqenable1 is offset by 0x60 for each bank gpio[0x6060/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE1 register // GPIO clear_irqenable2 is offset by 0x70 for each bank gpio[0x6070/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE2 register /* -- */ printf (Toggle Pins\n); int j=0; for (j=0; j10; j++) { printf (j=%u\n,
Re: [beagleboard] Re: GPIO (LED) access using mmap
The address is in bytes and pinconf is an array of integers, which are 4 bytes long. j. On Wed, Apr 2, 2014 at 8:02 AM, milkyway muhammednouf...@gmail.com wrote: I am new to beagle baord. I have a doubt here. Please help. In the following line pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 Why do you need the division inside the pinconf array for indexing? On Wednesday, 7 December 2011 20:26:08 UTC+5:30, dl4mea wrote: Hello, My self given task was to get a LED blinking on the Beagleboard. After getting bored from echo 0 brightness and puzzling together some pieces of code that I found on the net, I finally got a piece of plain C code that I can cross compile on a Linux machine and play on the Beagleboard. The two user LEDs as well as one pin of the extension connect flash in a 1sec clock with it. No guarantee for completeness, no guarantee for functionality, but here it works. Enjoy! Günter (dl4mea) /* Blinking of user LEDs USR0 and USR1 and gpio_157 on Expansion Connector P2 NOTE: gpio_157 is 1.8V IO, possibly not sufficient for a LED disconnect user LEDs from Linux echo none /sys/class/leds/beagleboard::usr0/trigger; echo none / sys/class/leds/beagleboard::usr1/trigger; compile using path_to_cross/arm-armv6-linux-gnueabi-g++ -static blink.c -o blink References: OMAP35x Applications Processor, Technical Reference Manual spruf98u.pdf */ #include stdio.h #include stdlib.h #include sys/types.h #include sys/stat.h #include unistd.h #include fcntl.h #include sys/mman.h int main(void) { printf (open file descriptor for PADCONFIG\n); int fd = open(/dev/mem, O_RDWR | O_SYNC); //O_SYNC makes the memory uncacheable if (fd 0) { printf(Could not open PADCONFIG memory fd\n); return 0; } // Pad configuration printf (map PINCONFIG\n); volatile ulong *pinconf; pinconf = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x4800); if (pinconf == MAP_FAILED) { printf(Pinconf Mapping failed\n); close(fd); return 0; } printf (set pinconfig GPIO\n); pinconf[0x217c/4] = pinconf[0x217c/4] 0x | 0x0004; // gpio_149 pinconf[0x2180/4] = pinconf[0x2180/4] 0x | 0x0004; // gpio_150 pinconf[0x218c/4] = pinconf[0x218c/4] 0x | 0x0004; // gpio_157 close(fd); /* -- */ printf (open file descriptor for GPIO\n); int gpio_fd = open(/dev/mem, O_RDWR | O_SYNC); if (gpio_fd 0) { printf(Could not open GPIO memory fd\n); return 0; } // GPIO configuration printf (map GPIO\n); volatile ulong *gpio; gpio = (ulong*) mmap(NULL, 0x1, PROT_READ | PROT_WRITE, MAP_SHARED, gpio_fd, 0x4905); if (gpio == MAP_FAILED) { printf (GPIO Mapping failed\n); close(gpio_fd); return 0; } printf (set GPIO config\n); // Configure GPIO pins on bank 5 as output. // GPIO 5 is at physical address 0x49056000 = 0x4905+0x6000 gpio[0x6034/4] = ~0x2060; // set low for output // Also disable the wakeupenable and irqenable intertupts // GPIO clear_Wakeupenable is offset by 0x80 for each bank gpio[0x6080/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_WAKEUPENABLE register // GPIO clear_irqenable1 is offset by 0x60 for each bank gpio[0x6060/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE1 register // GPIO clear_irqenable2 is offset by 0x70 for each bank gpio[0x6070/4] = 0x2060; // 0x1: Clear the corresponding bit in the GPIO_IRQENABLE2 register /* -- */ printf (Toggle Pins\n); int j=0; for (j=0; j10; j++) { printf (j=%u\n, j); //clear_data_out has offset 0x90 gpio[0x6090/4]=0x2060; usleep(50); //set_data_out has offset 0x94 gpio[0x6094/4]=0x2060; usleep(50); } close(gpio_fd); } -- 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.