GPIOを代替機能に切り替えるにはどうすればよいですか?


9

GPIO 4の代替機能、つまりGPCLK0機能を使用したい。どのようにしてGPIOを代替機能に設定できますか?多くの代替機能がここにまとめられています:elinux-wiki

最も良いのは、wiringPiライブラリで可能であればです。しかし、誰かが私にそれを行う方法を教えてくれれば、私は任意のCコードを使用してもかまいません。代替機能を入力した後、それを構成する必要があると思いますか?

回答:


3

次のCマクロを使用して、特定のGPIOをこの表で指定されている代替機能に変更できます。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))

例(http://elinux.org/RPi_Low-level_peripherals#GPIO_hardware_hackingから)

次のCマクロは、GPIO gをそのALT0関数に変更します。

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

SET_GPIO_ALT(x、y)を使用する前に、常にINP_GPIO(x)を使用してください

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

3
ワオ。その最初のマクロは...信じられないほどです。それがどのように機能するか説明していただけませんか?
Fouric 2013年

0

これは、関数を処理している他のスレッド(www.raspberrypi.org)ですGPCLK0

2番目のリンクには、GPCLK0代替機能の設定方法に関する正確なCの例があります。

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

その答えをありがとう、私はそのアセンブラコードを少し試しましたが、アセンブラは私のものではないと思います。これは... exspectedよりも時間がかかります
user61664

0

このチュートリアルでは、bash、python、CなどのGPIOピンをwireringPiを使用して構成するさまざまな方法を示します。Arduinoと同じくらい簡単です。

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

指定していないため、WiringPiライブラリーをもう少し調べて、必要な特定の「代替機能」、たとえばSPI、PWM、I²Cなどに何を設定するかを正確に知る必要があります。


0

このコードを使用して、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
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.