当前位置: 代码迷 >> 驱动开发 >> 关于linux LED驱动的有关问题
  详细解决方案

关于linux LED驱动的有关问题

热度:95   发布时间:2016-04-28 10:53:46.0
关于linux LED驱动的问题
我想直接在驱动中实现LED闪烁的功能,在延时这个问题纠结了很久,不想用ioctl的方法,最好是打开led就可以直接实现闪烁的功能,试过udelay,
也试过采用循环进行延时,但是就是不成功
static volatile unsigned int num = 10000000;

void wait(unsigned int n)
{
  unsigned int i;  

  for(i = 0; i < n; i++)
  ;
}

wait(num);

求解答。。。

------解决方案--------------------
你好:
看了你的wait函数:unsigned int 取值范围 0---65535。
你取值太大了。宁愿用两个for循环,内嵌一个。

还有就是blink的功能其实很多芯片都有定义的。只要设置延时还有gpio dir就可以。

谢谢
------解决方案--------------------
HI:

设置LED的寄存器没有中断的概念。当然你要中断有联系也是可以的。关键看你怎么做。

针对以上的你的代码我先分析一下,看看对你是不是有用。
1,你是在boot中还是kernel中。
2,单独的执行一个ledoff的操作是不是灯就会熄灭。同样on的话就是点亮。
3,延时函数是不是太短了,闪烁的频率太高,所以没有观察到。

针对1,其实做一个module.ko就可以。自己写一个,然后编译。insmod。关键是使用什么接口去控制。ioctl还是sysfs?我以前做的ioctl,copyfromuser把命令带到内核模块。然后再对相应的GPIO设置。

针对2,设置GPIO的时候一点要注意dir这个寄存器。我记得非常清楚。当时也是搞了半天,万用表就是没有测试到3.3V的电平。方向一定要设置为out的。