Làm cách nào tôi có thể biến GPIO thành chức năng thay thế của nó?


9

Tôi muốn sử dụng chức năng altenate của GPIO 4 cụ thể là chức năng GPCLK0. Làm thế nào người ta có thể đặt GPIO cho chức năng thay thế của nó? Nhiều chức năng thay thế được tóm tắt ở đây: elinux-wiki

Điều tốt nhất sẽ là nếu có thể với Thư viện WiredPi . Nhưng tôi không ngại sử dụng mã C tùy ý nếu ai đó chỉ cho tôi cách làm. Sau khi nhập một chức năng thay thế, tôi nghĩ cần phải cấu hình nó?

Câu trả lời:


3

Bạn có thể sử dụng Macro C sau đây để thay đổi GPIO đã cho thành hàm thay thế theo quy định của bảng này: http://elinux.org/RPi_BCM2835_GPIOs

volatile unsigned *gpio;

#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))

Ví dụ (từ http://elinux.org/RPi_Low-level_perodesals#GPIO_hardware_hacking )

Các macro C sau đây sẽ thay đổi GPIO g thành chức năng ALT0 của nó:

INP_GPIO(g);
SET_GPIO_ALT(g,0);

Luôn sử dụng INP_GPIO (x) trước khi sử dụng SET_GPIO_ALT (x, y)

#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))

3
Ồ Macro đầu tiên đó là ... không thể tin được. Bạn có thể giải thích làm thế nào nó hoạt động?
Fouric

0

đây là một số chủ đề khác (trên www.raspberrypi.org ) đang xử lý GPCLK0chức năng.

liên kết thứ hai có một ví dụ C chính xác về cách đặt chức năng thay thế GPCLK0.

/* Setup GPIO 4 as ALT0 function i.e. GPCLK0 */
mov r0, #4
mov r1, #4 /* ALT0 */

Cảm ơn câu trả lời đó, tôi đã thử một chút với mã trình biên dịch mã đó, nhưng tôi nghĩ trình biên dịch mã không phải là thứ của tôi. Việc này mất nhiều thời gian hơn so với dự kiến ​​..
user61664

0

Hướng dẫn này chỉ ra các cách khác nhau mà bạn có thể định cấu hình các chân GPIO, chẳng hạn như bash, python và C bằng cách sử dụng hệ thống dây điện. Nó dễ như Arduino.

http://log.liminastudio.com/wr/tutorials/tutorial-how-to-use-your-raspberry-pi-like-an-arduino

Bạn sẽ cần xem xét thư viện WiresPi thêm một chút để biết chính xác những gì cần thiết lập cho "chức năng thay thế" cụ thể mà bạn muốn, ví dụ SPI, PWM, I²C, v.v., vì bạn không chỉ định.


0

Sử dụng mã này để đặt chức năng alt

static void bcm2708_set_gpio_alt(int pin, int alt)
{
    /*
     * This is the common way to handle the GPIO pins for
     * the Raspberry Pi.
     * TODO This is a hack. Use pinmux / pinctrl.
     */
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)        <<(((g)%10)*3))
    unsigned int *gpio;
    gpio = ioremap(GPIO_BASE, SZ_16K);
    INP_GPIO(pin);
    SET_GPIO_ALT(pin, alt);
    iounmap(gpio);
#undef INP_GPIO
#undef SET_GPIO_ALT
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.