0

Ben veri sayfası kısmını anlamak için, ilgili gerçek mücadeleler var [BCM2835-ARM-Peripherals.pdf] nerede hangi aşağıdaki bahsediyor Her GPIO 40 kez Tüm gpios için ortak olan [refere: Table 6-1 GPIO Register Assignment] registerları SET/CLEAR/GPFSEL [0-5] vb. için kullanılabilir, ancak 10 FSEL'e sahip GPIO fonksiyon seçim registerının amacı nedir? -9) kaydeder [bakınız: Tablo 6-2 - GPIO Alternatif fonksiyon kayıt kaydı 0].Bellek eşlenen alan

S2: Bellek eşlemeli bölge aracılığıyla belirli bir GPIO'ya nasıl ulaşabilirim? Case # 1: GPIO4 gibi bir alternatif fonksiyon 5 ile Giriş: olarak (4 < 10) FSEL4 register ile "0x7E200000" kullanır [bakınız: Tablo 6-2 - GPIO Alternatif fonksiyon kayıt kaydı 0] olan 000 ve 010 = GPIO Pim 9. alternatif fonksiyonu alır 5.

durumda # 2: FSEL3 kayıt ile "0x7E20000C" kullanır (27 < 30) [bkz olarak: Çıkış gibi alternatif fonksiyon 3 GPIO27 Tablo 6- 2 - GPIO Alternatif fonksiyon seçimi register 0] 001 ve 111 = GPIO Pin 9, alternatif fonksiyonu 5 alır.

Lütfen benim anlayışımın doğru olup olmadığını bana bildirin.

Q3: Aşağıdaki tablolarda

Tablo 6-3 amacı nedir - seç GPIO Alternatif fonksiyonunu - 2 Tablo 6-5 kayıt seçmek GPIO Alternatif fonksiyonunu - GPIO Alternatif fonksiyonu 1 Tablo 6-4 kayıt seçmek kayıt 3 Tablo 6-6 - GPIO Alternatif fonksiyonu 4 Tablo 6-7 kayıt seç - GPIO Alternatif işlevi seçmek 5

BR kaydolun & Sanumala

cevap

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 
İlgili konular