Python GPIO库:用C直接操作GPIO
本帖最后由 soloforce 于 2013-5-20 12:13 编辑在hipboi的这个帖子http://forum.cubietech.com/forum.php?mod=viewthread&tid=456,我们可以用Python GPIO里面的GPIO C库文件直接编写应用程序了。下面是读和写的两个例子。
读GPIO:本例读取PD8的值,并打印提示信息#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include "gpio_lib.h"
#define PD0 SUNXI_GPD(0)
#define PD1 SUNXI_GPD(1)
#define PD2 SUNXI_GPD(2)
#define PD3 SUNXI_GPD(3)
#define PD4 SUNXI_GPD(4)
#define PD5 SUNXI_GPD(5)
#define PD6 SUNXI_GPD(6)
#define PD7 SUNXI_GPD(7)
#define PD8 SUNXI_GPD(8)
#define PD9 SUNXI_GPD(9)
#define PD10 SUNXI_GPD(10)
#define PD11 SUNXI_GPD(11)
#define PD12 SUNXI_GPD(12)
#define PD13 SUNXI_GPD(13)
#define PD14 SUNXI_GPD(14)
#define PD15 SUNXI_GPD(15)
#define PD16 SUNXI_GPD(16)
#define PD17 SUNXI_GPD(17)
#define PD18 SUNXI_GPD(18)
#define PD19 SUNXI_GPD(19)
#define PD20 SUNXI_GPD(20)
#define PD21 SUNXI_GPD(21)
#define PD22 SUNXI_GPD(22)
#define PD23 SUNXI_GPD(23)
#define PD24 SUNXI_GPD(24)
#define PD25 SUNXI_GPD(25)
#define PD26 SUNXI_GPD(26)
#define PD27 SUNXI_GPD(27)
#define MISO SUNXI_GPE(3)
#define MOSI SUNXI_GPE(2)
#define SCK SUNXI_GPE(1)
#define CS SUNXI_GPE(0)
struct sigaction new_act,new_act2, old_act;
/**
* @brief Signal INT handler
* */
void sigint_handler(int sig_num)
{
printf("Uninitialzing GPIO...\n");
/* uninitialize the GPIO */
sunxi_gpio_cleanup();
/* change back to the original handler */
sigaction(SIGINT, &old_act,NULL);
/* emit the SIGINT again */
kill(0,SIGINT);
}
/**
* @brief Signal TERM handler
* */
void sigterm_handler(int sig_num)
{
printf("Uninitialzing GPIO...\n");
/* uninitialize the GPIO */
sunxi_gpio_cleanup();
/* change back to the original handler */
sigaction(SIGTERM, &old_act,NULL);
/* emit the SIGTERM again */
kill(0,SIGTERM);
}
int main()
{
memset(&new_act,0,sizeof(new_act));
memset(&new_act2,0,sizeof(new_act));
memset(&old_act,0,sizeof(old_act));
new_act.sa_handler=&sigint_handler;
new_act2.sa_handler=&sigterm_handler;
sigaction(SIGINT, &new_act, &old_act);
sigaction(SIGTERM, &new_act2, &old_act);
if(SETUP_OK!=sunxi_gpio_init()){
printf("Failed to initialize GPIO\n");
return -1;
}
if(SETUP_OK!=sunxi_gpio_set_cfgpin(PD8,INPUT)){
printf("Failed to config GPIO pin\n");
return -1;
}
while(1){
if(HIGH==sunxi_gpio_input(PD8)){
printf("HIGH\n");
}
usleep(1000);
}
sunxi_gpio_cleanup();
return 0;
}
本例写PD16脚,如果上面接了一个led,且负极接地,则会周期闪烁。#include <stdlib.h>
#include <stdio.h>
#include "gpio_lib.h"
#define PD0 SUNXI_GPD(0)
#define PD1 SUNXI_GPD(1)
#define PD2 SUNXI_GPD(2)
#define PD3 SUNXI_GPD(3)
#define PD4 SUNXI_GPD(4)
#define PD5 SUNXI_GPD(5)
#define PD6 SUNXI_GPD(6)
#define PD7 SUNXI_GPD(7)
#define PD8 SUNXI_GPD(8)
#define PD9 SUNXI_GPD(9)
#define PD10 SUNXI_GPD(10)
#define PD11 SUNXI_GPD(11)
#define PD12 SUNXI_GPD(12)
#define PD13 SUNXI_GPD(13)
#define PD14 SUNXI_GPD(14)
#define PD15 SUNXI_GPD(15)
#define PD16 SUNXI_GPD(16)
#define PD17 SUNXI_GPD(17)
#define PD18 SUNXI_GPD(18)
#define PD19 SUNXI_GPD(19)
#define PD20 SUNXI_GPD(20)
#define PD21 SUNXI_GPD(21)
#define PD22 SUNXI_GPD(22)
#define PD23 SUNXI_GPD(23)
#define PD24 SUNXI_GPD(24)
#define PD25 SUNXI_GPD(25)
#define PD26 SUNXI_GPD(26)
#define PD27 SUNXI_GPD(27)
#define MISO SUNXI_GPE(3)
#define MOSI SUNXI_GPE(2)
#define SCK SUNXI_GPE(1)
#define CS SUNXI_GPE(0)
int main()
{
if(SETUP_OK!=sunxi_gpio_init()){
printf("Failed to initialize GPIO\n");
return -1;
}
if(SETUP_OK!=sunxi_gpio_set_cfgpin(PD16,OUTPUT)){
printf("Failed to config GPIO pin\n");
return -1;
}
int i;
for(i=0;i<5;i++){
if(sunxi_gpio_output(PD16,HIGH)){
printf("Failed to set GPIO pin value\n");
return -1;
}
usleep(500000);
if(sunxi_gpio_output(PD16,LOW)){
printf("Failed to set GPIO pin value\n");
return -1;
}
usleep(500000);
}
sunxi_gpio_cleanup();
return 0;
}
gpio_lib.h找不到 SUNROC1 发表于 2013-6-6 20:32 static/image/common/back.gif
gpio_lib.h找不到
在pySUNXI包里 本帖最后由 yzbx 于 2013-7-31 08:55 编辑
楼主你好,在PC上的ubuntu系统下编译,出现了以下问题:请问是不是少安装了什么?yzbx@:pySUNXI-0.1.12$ arm-linux-gnueabihf-gcc readPD8.c -static -o readPD8
/tmp/cc603gTU.o: In function `sigint_handler':
readPD8.c:(.text+0x14): undefined reference to `sunxi_gpio_cleanup'
/tmp/cc603gTU.o: In function `sigterm_handler':
readPD8.c:(.text+0x58): undefined reference to `sunxi_gpio_cleanup'
/tmp/cc603gTU.o: In function `main':
readPD8.c:(.text+0x132): undefined reference to `sunxi_gpio_init'
readPD8.c:(.text+0x156): undefined reference to `sunxi_gpio_set_cfgpin'
readPD8.c:(.text+0x176): undefined reference to `sunxi_gpio_input'
collect2: ld 返回 1
yzbx@:pySUNXI-0.1.12$ yzbx 发表于 2013-7-30 21:34 static/image/common/back.gif
楼主你好,在PC上的ubuntu系统下编译,出现了以下问题:请问是不是少安装了什么? ...
正好,我也这样,解决方法是把include的h改成c,但是有时候要反过来,不知道为啥 $ gcc gpio_lib.c -c
$ gcc gpio_test.c -c
$ gcc gpio_test.o gpio_lib.o -o gpio_test
我也是做按键输入,但io口一直都是高电平啊。。。 这个是不是要交叉编译在放到板子上测试啊我这交叉编译放过去 执行不了
管叫我小狄 发表于 2014-8-20 10:29 static/image/common/back.gif
这个是不是要交叉编译在放到板子上测试啊我这交叉编译放过去 执行不了
...
在板子系统上安装个gcc,直接在板子上编译运行就可以了。
如果是CT的話,是只要define CT的腳位就可以了嗎還是script.fex 的腳位也要修改
页:
[1]
2