欢迎来到天天文库
浏览记录
ID:27870527
大小:173.50 KB
页数:7页
时间:2018-12-06
《基于Linux系统实现DragonBoard 410c GPIO的控制.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于Linux系统实现DragonBoard410cGPIO的控制 如图1所示,在DragonBoard410c开发板上,其GPIO口通过接口进行了预留,用户在开发测试过程中可以方便的通过排针或者排线接入到DragonBoard410c的GPIO口,实现与外设的连接,对外设进行控制,同时也可以通过下载DragonBoard410cGPIOPDF和使用说明文档查看其GPIO详细信息,在410c资料包中的SchemaTIcas_DragonBoard.pdf文件中对410c板子的GPIO口设计有详细的说明,如下图1给出了开发板的GPIO硬件接口J8的详细设计,通过该图可以知道整个410c
2、开发板的GPIO外部接口连接情况。 图1DragonBoard410c外部GPIO口引出接口J8的连接原理图 根据上述原理图,可以在板子上用杜邦线连接,本文在测试过程中选取的是GPIO_36和GPIO_12两个GPIO口作为控制,其中GPIO12控制LED灯,GPIO_36用于接收按键信号,检测开关是否被按下,开关每次按下LED灯状态改变一次,整个控制电路硬件连接如图2所示。 图2DragonBoard410c按键控制LED灯硬件连接示意图二、程序设计 1)在linux环境下用vim编辑器建立工程程序文件key_led_test.c,该文件是测试工程的主文件,起命令如下
3、: mkdirkey_led_test vimkey_led_test.c 通过GPIO口控制LED和检测按键信号的基本原理如下: 首先需要对使用的GPIO口进行导入,完成导入后的GPIO口才可以进读写,起导入GPIO口的函数机代码如下: intExport_GPIO(intgpio){ intfd; charbuf[MAX_BUF]; sprintf(buf,“%d”,gpio); fd=open(“/sys/class/gpio/export”,O_WRONLY); if(fd=100){ break;//按下时间超过1s,表示完成一次按动作,退出检测。 }
4、 }while(!tmp) if(time>=50){//大于0.5s认为按键按下,不是干扰或者误按 returnKEY_DOWN; } elsereturnKEY_UP; } 完成按键检测后,就可以根据按键来实现对LED的控制,其中LED的控制是通过输出高电平来点亮LED,输出低电平来熄灭LED,其实现函数如下: intset_led_status(intLed,intstatus){ if(Write_GPIO(led,status)==0){ return0; } elsereturn-1; } 基于对GPIO的读写函数完成上述KEY的状态读取和LED
5、的状态控制函数后,就可以利用这两个函数方便的构建按键控制LED的程序,其中.c中的部分核心代码如下: #include #include #include #include #include #defineMAX_BUF10 #defineGPIO_A36 #defineGPIO_B12 #defineKEY_DOWN1; #defineKEY_UP0; #defineLED_LIGHT; #defineLED_EXTING; intExport_GPIO(intgpio); intUnExport_GPIO(intgpio); intWrite_GPIO
6、(intgpio,intvalue); intRead_GPIO(intgpio,int*value); intget_key_status(intKey); intset_led_status(intLed,intstatus); intmain(void){ intKeyStatus=KEY_UP; intLedStatus=LED_EXTING; ret=Export_GPIO(GPIO_A); if(ret!=0) printf(“ErrorexportingGPIO_%d”,GPIO_A); ret=Export_GPIO(GPIO_B); if(ret
7、!=0) printf(“ErrorexportingGPIO_%d”,GPIO_B); printf(“youcanpresskeytochangeLEDstatus”); while(1){ KeyStatus=get_key_status(GPIO_A); if(keyStatus!=-1)LedStatus=KeyStatus; else{ printf(“get_key_statuserro!”); retur
此文档下载收益归作者所有