GPIO写高执行时间过长
每隔4ms进一次中断,将GPIO置高一次(即执行图1所示函数,图2为图1函数中的数组)。打印结果如图3所示。由图可知,将GPIO写高一次所用的执行时间为7985us。这导致我们的程序执行失败,所以请教下,这个执行时间是正常的吗?
可以从驱动层打印一下从收到命令到设置为高状态的时间,理论上不应该这么长的,从驱动里定位 按照你提供的驱动层测试方法,可否提供“从驱动层打印从收到命令到设置为高状态的时间”的测试程序? xiangyi 发表于 2019-5-5 16:49
按照你提供的驱动层测试方法,可否提供“从驱动层打印从收到命令到设置为高状态的时间”的测试程序?
你可以用time相关的函数进行打印,demo测试不出来 我们的驱动为了做GPIO名字适配,做了一些名字解析的工作,假如你需要指定GPIO,那就在write函数里直接通过某个值强行写GPIO拉高拉高低,减少名字适配的操作,这样可双节省操作的时间。具体能够优化的操作,需要你在驱动里看代码再结合你的需求来做。
比如echo 1 > /proc/*** 你就在write函数里直接对某个GPIO进行操作拉高拉低,不用再通过名字解析 static int gpio_proc_write(struct file * file,const char * buffer,unsigned long count,void * data)
{
int value;
int i;
value = 0;
sscanf(buffer, "%d", &value);
pr_debug("value = %d\n",value);
#if 0
if (value == 1)
{
gpio_direction_output(gpio, 1);
}
else if (value == 2)
{
gpio_direction_output(gpio, 0);
}
else if (value == 3)
{
gpio_direction_output(gpio, 1);
}
else if (value == 4)
{
gpio_direction_output(gpio, 0);
}
else if (value == 5)
{
//gpio_request(gpio, "rp_gpio");
gpio_direction_output(gpio, 1);
//gpio_free(gpio);
//msleep(50);
} 可否给出GPIO模式配置、输入GPIO读、输出GPIO写等相关的函数,以及这些函数的调用demo? 比如GPIO4_D3作为输出GPIO时,用你提供的函数如何写高写低? GPIO4_D3作为输入GPIO时,用你提供的函数如何读取状态?
页:
[1]