0

У меня есть реальные борьбы с соответственным к пониманию техпаспорта части [BCM2835-ARM-Peripherals.pdf], где, в котором он говорит о следующем:памяти отображается область GPIO в Raspberry Pi

Q1: Каждый GPIO имеет 40 регистры [refere: Таблица 6-1 Назначение регистра GPIO], которые являются общими для всех gpios, могут использоваться для SET/CLEAR/GPFSEL [0-5] и т. д., но какова цель выбора функции функции GPIO, которая имеет 10 FSEL (0 -9) регистры [см. Таблицу 6-2 - регистр выбора функции GPIO Alternate 0].

Q2: Как я могу связаться с данным GPIO через область памяти? , что-то вроде ниже Корпус №1: GPIO4 с альтернативной функцией 5 как вход: as (4 < 10) он будет использовать «0x7E200000» с регистром FSEL4 [см. таблицу 6-2 - регистр выбора функции GPIO Alternate 0] 000 и 010 = GPIO Вывод 9 принимает альтернативную функцию 5.

случай # 2: GPIO27 с альтернативной функцией 3, выход: , как (27 < 30) он будет использовать "0x7E20000C" с FSEL3 регистра [см: Таблица 6- 2 - GPIO Альтернативный регистр выбора функции 0], имеющий 001 и 111 = GPIO Штук 9 принимает альтернативную функцию 5.

Пожалуйста, дайте мне знать, правильно ли я понимаю или нет?

Q3: что является целью следующих таблиц

Таблицы 6-3 - функция GPIO Альтернативного выбор регистр 1 Таблицы 6-4 - функция GPIO альтернативного выбора регистра 2 Таблицы 6-5 - функция GPIO Alternate выбора Регистр 3 Таблица 6-6 - функция GPIO Альтернативные выбрать регистр 4 Таблица 6-7 - функция GPIO Альтернативные выбора регистра 5

BR, & Sanumala

ответ

1

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 
Смежные вопросы