概述
海思提供一在应用层测试GPIO的函数,只需要将其使用,即可完成GPIO的输入输出等功能测试,本文是测试一下海思GPIO的输入功能。
1、测试源码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num)
{
FILE *fp;
char file_name[50];
unsigned char buf[10];
unsigned int gpio_num;
gpio_num = gpio_chip_num * 8 + gpio_offset_num;
sprintf(file_name, "/sys/class/gpio/export");
fp = fopen(file_name, "w");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "%d", gpio_num);
fclose(fp);
sprintf(file_name, "/sys/class/gpio/gpio%d/direction", gpio_num);
fp = fopen(file_name, "rb+");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "in");
fclose(fp);
sprintf(file_name, "/sys/class/gpio/gpio%d/value", gpio_num);
fp = fopen(file_name, "rb+");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
memset(buf, 0, 10);
fread(buf, sizeof(char), sizeof(buf) - 1, fp);
printf("%s: gpio%d_%d = %dn", __func__,
gpio_chip_num, gpio_offset_num, buf[0]-48);
fclose(fp);
sprintf(file_name, "/sys/class/gpio/unexport");
fp = fopen(file_name, "w");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "%d", gpio_num);
fclose(fp);
return (int)(buf[0]-48);
}
int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,
unsigned int gpio_out_val)
{
FILE *fp;
char file_name[50];
unsigned char buf[10];
unsigned int gpio_num;
gpio_num = gpio_chip_num * 8 + gpio_offset_num;
sprintf(file_name, "/sys/class/gpio/export");
fp = fopen(file_name, "w");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "%d", gpio_num);
fclose(fp);
sprintf(file_name, "/sys/class/gpio/gpio%d/direction", gpio_num);
fp = fopen(file_name, "rb+");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "out");
fclose(fp);
sprintf(file_name, "/sys/class/gpio/gpio%d/value", gpio_num);
fp = fopen(file_name, "rb+");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
if (gpio_out_val)
strcpy(buf,"1");
else
strcpy(buf,"0");
fwrite(buf, sizeof(char), sizeof(buf) - 1, fp);
printf("%s: gpio%d_%d = %sn", __func__,
gpio_chip_num, gpio_offset_num, buf);
fclose(fp);
sprintf(file_name, "/sys/class/gpio/unexport");
fp = fopen(file_name, "w");
if (fp == NULL) {
printf("Cannot open %s.n", file_name);
return -1;
}
fprintf(fp, "%d", gpio_num);
fclose(fp);
return 0;
}
int main(int argc, const char *argv[])
{
if (argc != 4)
{
printf("Usage %s : gpio_chip_num : gpio_offset_num : gpio_out_val!n",argv[0]);
printf("gpio_out_val = 1 is high level,gpio_out_val = 0 is low level!n");
return -1;
}
int gpio_chip_num = atoi(argv[1]);
int gpio_offset_num = atoi(argv[2]);
int gpio_out_val = atoi(argv[3]);
int i = 0;
for(i=0;i<20;i++)
{
if(0 == i%2)
{
printf("i = %dn",i+1);
gpio_test_out(gpio_chip_num,gpio_offset_num,gpio_out_val);
usleep(200000);
}
else
{
printf("i = %dn",i+1);
gpio_test_out(gpio_chip_num,gpio_offset_num,!gpio_out_val);
usleep(200000);
}
}
printf("test_gpio over!n");
return 0;
}
2、我使用的仍是传参方式,下面的测试我使用的是是GPIO3_1,所以传参为 3 1 1。将上面的源码编译成ELF文件,拷贝至开发板下。
3、运行该程序。
4、我将其连接至一个IO测试板子中,发现小灯在循环闪烁20次后结束,与预想的一样。
至此即完成GPIO的输入测试,可以在此基础上修改代码,完成自己想要的功能。
最后
以上就是鲜艳热狗为你收集整理的海思GPIO中输出的一种测试方法的全部内容,希望文章能够帮你解决海思GPIO中输出的一种测试方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复