我想直接在驱动中实现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的。