我在理解数据表部分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
发布于 2016-03-31 06:38:09
http://elinux.org/RPi_GPIO_Code_Samples
//
// 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
https://stackoverflow.com/questions/36275480
复制相似问题