您的位置 首页 汽车

根据Linux体系完成DragonBoard 410c GPIO的操控

基于Linux系统实现DragonBoard 410c GPIO的控制-通过芯片的GPIO口输出电平去控制外部设备,如继电器、LED或者触发某些模块进行工作是嵌入式控制系统常用的功能,也是实现许多复杂

经过芯片的GPIO口输出电平去操控外部设备,如继电器、LED或许触发某些模块进行作业是嵌入式操控系统常用的功用,也是完结许多杂乱操控系统的根底,本文将教我们依据DragonBoard 410c GPIO开发板在linux的环境下完结对DragonBoard 410c GPIO的操控,而且经过操控按键和点亮LED等进行实例测验以了解整个GPIO操作进程。

一、 DragonBoard 410c GPIO口散布状况及测验硬件连线

如图1所示,在 DragonBoard 410c 开发板上,其GPIO口经过接口进行了预留,用户在开发测验进程中能够便利的经过排针或许排线接入到 DragonBoard 410c 的GPIO口,完结与外设的衔接,对外设进行操控,一起也能够经过下载 DragonBoard 410c GPIO PDF和运用阐明文档检查其GPIO具体信息,在410c材料包中的SchemaTIcas_DragonBoard.pdf文件中对410c板子的GPIO口规划有具体的阐明,如下图1给出了开发板的GPIO硬件接口J8的具体规划,经过该图能够知道整个410c开发板的GPIO外部接口衔接状况。

图1 DragonBoard 410c外部GPIO口引出接口J8的衔接原理图

依据上述原理图,能够在板子上用杜邦线衔接,本文在测验进程中选取的是GPIO_36和GPIO_12两个GPIO口作为操控,其间GPIO12操控LED灯,GPIO_36用于接纳按键信号,检测开关是否被按下,开关每次按下LED灯状况改动一次,整个操控电路硬件衔接如图2所示。

图2 DragonBoard 410c按键操控LED灯硬件衔接示意图

二、程序规划

1)在linux环境下用vim编辑器树立工程程序文件key_led_test.c,该文件是测验工程的主文件,起指令如下:

mkdir key_led_test

vim key_led_test.c

经过GPIO口操控LED和检测按键信号的基本原理如下:

首要需求对运用的GPIO口进行导入,完结导入后的GPIO谈锋能够进读写,起导入GPIO口的函数机代码如下:

int Export_GPIO(int gpio) {

int fd;

char buf[MAX_BUF];

sprintf(buf, “%d”, gpio);

fd = open(“/sys/class/gpio/export”, O_WRONLY);

if(fd 0)

return -1;

write(fd, buf, strlen(buf));

close(fd); return 0; }

}

然后对GPIO口进行读写数据,其间读写的完结函数及代码如下:

int Write_GPIO(int gpio, int value) {

int fd; char buf[MAX_BUF]; //Set the direcTIon of the GPIO to output

sprintf(buf, “/sys/class/gpio/gpio%d/direcTIon”, gpio);

fd = open(buf, O_WRONLY); if(fd0)

return -1;

write(fd, “out”, 3);// Set out direcTIon

close(fd);

sprintf(buf, “/sys/class/gpio/gpio%d/value”, gpio);

fd = open(buf, O_WRONLY);

if(fd0)

return -1; // Write the GPIO value

sprintf(buf, “%d”, value);

write(fd, buf, strlen(buf));

close(fd); return 0;

}

int Read_GPIO(int gpio, int *value) {

int fd; char val;

char buf[MAX_BUF];

sprintf(buf, “/sys/class/gpio/gpio%d/value”, gpio);

fd = open(buf, O_RDONLY);

if(fd0)

return -1;

// Read the GPIO value

read(fd, val, 1);

*value = atoi(val);

close(fd); return 0;

}

最终,完结GPIO的读写操作后,需求导出GPIO口,起完结函数及代码如下:

int UnExport_GPIO(int gpio) {

int fd; char buf[MAX_BUF];

sprintf(buf, “%d”, gpio);

fd = open(“/sys/class/gpio/unexport”, O_WRONLY);

if(fd 0)

return -1;

write(fd, buf, strlen(buf));

close(fd); return 0;

}

以上便是操作GPIO口的中心函数及完结进程,接着使用这些中心函数的调用和规划简略的逻辑就能够完结对衔接410c板子上的按键进行检测搭档操控LED等的状况,其间按键检测的完结函数如下:

int get_key_status(int Key){

int tmp=1;

int time=0;

Write_GPIO(Key, 1) ;

do{

delay_ms(10);

if(Read_GPIO(Key, tmp)==0){

time++;

}

else return -1;

if(time>=100){

break; //按下时刻超越1s,表明完结一次按动作,退出检测。

}

}while(!tmp)

if(time>=50){ //大于0.5s以为按键按下,不是搅扰或许误按

return KEY_DOWN;

}

else return KEY_UP;

}

完结按键检测后,就能够依据按键来完结对LED的操控,其间LED的操控是经过输出高电平来点亮LED,输出低电平来平息LED,其完结函数如下:

int set_led_status(int Led,int status){

if(Write_GPIO(led, status)==0){

return 0;

}

else return -1;

}

依据对GPIO的读写函数完结上述KEY的状况读取和LED的状况操控函数后,就能够使用这两个函数便利的构建按键操控LED的程序,其间.c中的部分中心代码如下:

#include

#include

#include

#include

#include

#define MAX_BUF 10

#define GPIO_A 36

#define GPIO_B 12

#define KEY_DOWN 1;

#define KEY_UP 0;

#define LED_LIGHT;

#define LED_EXTING;

int Export_GPIO(int gpio);

int UnExport_GPIO(int gpio);

int Write_GPIO(int gpio, int value);

int Read_GPIO(int gpio, int *value);

int get_key_status(int Key);

int set_led_status(int Led,int status);

int main(void) {

int KeyStatus=KEY_UP;

int LedStatus=LED_EXTING;

ret = Export_GPIO(GPIO_A);

if(ret != 0)

printf(“Error exporting GPIO_%d”, GPIO_A);

ret = Export_GPIO(GPIO_B);

if(ret != 0)

printf(“Error exporting GPIO_%d”, GPIO_B);

printf(“you can press key to change LED status\n”);

while(1) {

KeyStatus=get_key_status(GPIO_A);

if(keyStatus!=-1) LedStatus=KeyStatus;

else{

printf(“get_key_status erro!\n”);

return -1;

if(-1== set_led_status(GPIO_B, LedStatus)) {

printf(“set_led_status erro!\n”);

return -1;

}

}

ret = UnExport_GPIO(GPIO_A);

if(ret != 0)

printf(“Error UnExporting GPIO_%d”, GPIO_A);

ret = UnExport_GPIO(GPIO_B);

if(ret != 0)

printf(“Error UnExporting GPIO_%d”, GPIO_B); return 0;

}

以上便是整个使用410c开发板在linux操作系统环境下完结对GPIO的操作,经过GPIO口读取按键信息完结对LED的操控。

三、程序编译和运转

在linux环境下,能够经过arm-linux-gcc穿插编译东西来编译渠道的程序,生成可履行的程序文件,然后下载到开发板上运转,其间编译指令参阅如下:

arm-linux-gcc -o key_led_test key_led_test.c

完结编译后生成key_led_test文件,履行下面指令改动其权限,使得其成为可履行文件:

chmod 777 key_led_test

最终履行key_led_test即可在板子上经过按按键操控LED灯。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/183604.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部