gpio控制程序求助
本帖最后由 embeddedlwp 于 2011-05-16 14:55 编辑
- int gpio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){
- switch(cmd){
- case -1:
- s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP); //关闭LCD背光
- s3c2410_gpio_setpin(S3C2410_GPG4, 0);
- break;
- case 1:
- s3c2410_gpio_setpin(S3C2410_GPG4, 1); //开启LCD背光
- break;
- case 2: //开启流水
- flag = 2;
- while(1){
- int i;
- for(i = 0; i < 4; i++)
- s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
- for(i = 0; i < 4; i++){
- s3c2410_gpio_setpin(led_table[i],0);
- msleep(1000);
- s3c2410_gpio_setpin(led_table[i],1);
- if(flag == -2)
- goto end;
- }
- t++;
- if(t == 4){
- flag = -2;
- t = 0;
- }
- }
- break;
- case -2: //关闭流水
- flag = -2;
- break;
- case 3: //开启蜂鸣器
- s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP);
- s3c2410_gpio_setpin(S3C2410_GPB0, 1);
- break;
- case -3: //关闭蜂鸣器
- s3c2410_gpio_setpin(S3C2410_GPB0, 0);
- break;
- default:
- break;
- }
- end:
- return 0;
- }
复制代码
这个是ioctl程序,下边的是测试程序:
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- int main(){
- int fd, cmd;
- cmd = 0;
- fd = open("/dev/lwp-gpio",O_RDWR);
- if(fd < 0){
- printf("cannot open /dev/lwp-gpio\n");
- exit(1);
- }
- while(1){
- scanf("%d", &cmd);
- printf("cmd is %d\n",cmd);
- ioctl(fd, cmd);
- }
- close(fd);
- return 0;
- }
复制代码
通过在终端进行输入可以选择哪个设备运行。但是如果输入2也就是流水灯,我在终端可以输入其他数,但是好像没有传到驱动的ioctl,比如输入-2关闭流水,但是流水依然照旧。怎么办呢,LCD背光,蜂鸣器都好使。也就是说流水的时候,我输入什么都不好使。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
有没有哪位大侠帮帮忙啊
case -2:
你代码里面没有做实际关闭工作呀 只是设备了个变量值
你的flag是不是static型?
mini2440的开发板内核已经加载过了LED驱动,你在加载你写这个驱动的时候是不是要先把开发板本身加载的驱动卸载后,才能成功呀~~我估计是这个原因
回复 1# embeddedlwp
测试程序中,调用scanf会录入字符和回车符在缓冲区,你第一次取出的字符,第二次取出的就是回车符,你看看问题是不是在这里
关闭函数在哪?