我想使用GPIO 4的替代功能,即GPCLK0功能。如何将GPIO设置为其备用功能?这里总结了许多替代功能:elinux-wiki
最好的办法是,如果可以使用connectioningPi库。但是,如果有人告诉我该怎么做,我不介意使用任意的C代码。输入替代功能后,我认为需要对其进行配置?
我想使用GPIO 4的替代功能,即GPCLK0功能。如何将GPIO设置为其备用功能?这里总结了许多替代功能:elinux-wiki
最好的办法是,如果可以使用connectioningPi库。但是,如果有人告诉我该怎么做,我不介意使用任意的C代码。输入替代功能后,我认为需要对其进行配置?
Answers:
您可以使用以下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
。
第二个链接提供了有关如何设置GPCLK0备用功能的精确C示例。
/* Setup GPIO 4 as ALT0 function i.e. GPCLK0 */
mov r0, #4
mov r1, #4 /* ALT0 */
本教程介绍了使用wireingPi配置GPIO引脚(例如bash,python和C)的不同方法。就像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
}