首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >树莓猪GPIO的内存映射区

树莓猪GPIO的内存映射区
EN

Stack Overflow用户
提问于 2016-03-29 12:32:01
回答 1查看 981关注 0票数 0

我在理解数据表部分BCM2835-ARM-Peripherals.pdf时遇到了真正的困难,其中谈到了以下内容:

参考:表6-1所有gpio通用的GPIO寄存器分配可用于设置/CLEAR/GPFSEL0-5等,但具有10个Q1 ( 0 -9)寄存器的GPIO功能选择寄存器的用途参考:表6-2 - GPIO交替功能选择寄存器0。

Q2:如何通过记忆映射区域到达给定的GPIO?,是否类似于下面的Case#1 : GPIO 4与备用功能5作为输入: as (4< 10)它将使用带有FSEL4寄存器的"0x7E200000“参考:表6-2 - GPIO备用功能选择寄存器0具有000且010 =GPIO引脚9采用备用功能5。

case#2 :GPIO27具有替代功能3作为输出: as ( 27 < 30)它将使用带有FSEL3寄存器的"0x7E20000C“参考:表6-2 - GPIO替代功能选择寄存器0具有001和111 = GPIO引脚9采用替代功能5。

请告诉我我的理解是否正确?

Q3:下面表格的用途是什么?

表6-3 - GPIO备用功能选择寄存器1表6-4 - GPIO备用功能选择寄存器2表6-5 - GPIO备用功能选择寄存器3表6-6 - GPIO备用功能选择寄存器4表6-7 - GPIO备用功能选择寄存器5

BR,&Sanumala

EN

回答 1

Stack Overflow用户

发布于 2016-03-31 06:38:09

http://elinux.org/RPi_GPIO_Code_Samples

代码语言:javascript
运行
复制
//
// Set up a memory regions to access GPIO
//

void 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);
   }

   /* mmap GPIO */
   gpio_map = mmap(
      NULL,             //Any adddress in our space will do
      BLOCK_SIZE,       //Map length
      PROT_READ|PROT_WRITE,// Enable reading & writting to mapped memory
      MAP_SHARED,       //Shared with other processes
      mem_fd,           //File to map
      GPIO_BASE         //Offset to GPIO peripheral
   );

   close(mem_fd); //No need to keep mem_fd open after mmap

   if (gpio_map == MAP_FAILED) {
      printf("mmap error %d\n", (int)gpio_map);//errno also set!
      exit(-1);
   }

   // Always use volatile pointer!
   gpio = (volatile unsigned *)gpio_map;


} // setup_io
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36275480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档