GPIO 4の代替機能、つまりGPCLK0機能を使用したい。どのようにしてGPIOを代替機能に設定できますか?多くの代替機能がここにまとめられています:elinux-wiki
最も良いのは、wiringPiライブラリで可能であればです。しかし、誰かが私にそれを行う方法を教えてくれれば、私は任意のCコードを使用してもかまいません。代替機能を入力した後、それを構成する必要があると思いますか?
GPIO 4の代替機能、つまりGPCLK0機能を使用したい。どのようにしてGPIOを代替機能に設定できますか?多くの代替機能がここにまとめられています:elinux-wiki
最も良いのは、wiringPiライブラリで可能であればです。しかし、誰かが私にそれを行う方法を教えてくれれば、私は任意のCコードを使用してもかまいません。代替機能を入力した後、それを構成する必要があると思いますか?
回答:
次の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))
これは、関数を処理している他のスレッド(www.raspberrypi.org)ですGPCLK0
。
2番目のリンクには、GPCLK0代替機能の設定方法に関する正確なCの例があります。
/* Setup GPIO 4 as ALT0 function i.e. GPCLK0 */
mov r0, #4
mov r1, #4 /* ALT0 */
このチュートリアルでは、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などに何を設定するかを正確に知る必要があります。
このコードを使用して、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
}