免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5242 | 回复: 2
打印 上一主题 下一主题

[驱动] 问个GPIO的拉高拉低的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-08 15:00 |只看该作者 |倒序浏览
本帖最后由 jn200002 于 2010-11-09 11:03 编辑

我的测试文件的open写错了~?~~?

大家好,很久没写驱动的代码了,今天有需求拉高一个GPIO口,现在不知道为什么没有被拉高

哪位有时间瞅瞅这个入门级的代码呗~ 先谢过了!
文件系统里到是有了设备名称了,我也能打开,就是ioctl写的时候没起作用

  1. #define DEVICE_NAME "pix-audio-power"

  2. // 关于GPIO设置的地方可以忽略,那个设置是没错的,我觉得我应该是模块结构上出现了什么问题。。。
  3. static int sbc2440_audio_power_ioctl(struct inode *inode,struct file *file,unsigned int cmd)
  4. {
  5.         printk("IO CTRL......\n");
  6.         unsigned long gpg5,gpgup,gpgdat;
  7.         gpg5   = __raw_readl(S3C2410_GPGCON);
  8.         gpgdat = __raw_readl(S3C2410_GPGDAT);
  9.         gpgup  = __raw_readl(S3C2410_GPGUP);
  10.         switch(cmd)
  11.         {
  12.                 case 0:
  13.                 拉高
  14.                 case 1:
  15.                  拉低
  16.         }
  17. }

  18. static struct file_operations my_dev_fops = {
  19.         .owner = THIS_MODULE,
  20.         .ioctl = sbc2440_audio_power_ioctl,
  21. };
  22. static struct miscdevice misc = {
  23.         .minor = 255,
  24.         .name = DEVICE_NAME,
  25.         .fops = &my_dev_fops,
  26. };

  27. static void pix_audio_gpio_init(void)
  28. {
  29.         unsigned long gpg5,gpgdat,gpgup;
  30.         初始化一下output 拉低。
  31. }

  32. static int __init dev_init(void)
  33. {
  34.         int ret;
  35.         pix_audio_gpio_init();
  36.         ret = misc_register(&misc);
  37.         printk(DEVICE_NAME"\tinitialized\n");
  38.         return ret;
  39. }

  40. static void __exit dev_exit(void)
  41. {
  42.         misc_deregister(&misc);
  43. }

  44. module_init(dev_init);
  45. module_exit(dev_exit);
  46. MODULE_LICENSE("GPL");
  47. MODULE_AUTHOR("PIXSTAR Inc.");
  48. =============test.c=================
  49. #include <stdio.h>
  50. #include <fcntl.h>
  51. #include <sys/types.h>
  52. #include <sys/stat.h>


  53. #define AUDIO_PWR_ON  1
  54. #define AUDIO_PWR_OFF 0
  55. //BEFORE: wrong
  56. #define AUDIO_PWR_NAME "/sys/devices/virtual/misc/pix-audio-power"
  57. //-------------------------------------------------------
  58. //mknod /dev /name c min maj                结贴!
  59. //-------------------------------------------------------
  60. #define AUDIO_PWR_NAME "/dev/name"


  61. int main(int agrc,char** argv)
  62. {
  63.         int fd;
  64.         fd=open(AUDIO_PWR_NAME,"r+w");
  65.         
  66.         if(fd<0)
  67.         {
  68.                 printf("open error!\n");        
  69.                 return -1;      
  70.         }
  71.         
  72.         if(!(strcmp(argv[1],"on"))){
  73.                 ioctl(fd,AUDIO_PWR_ON);
  74.                 printf("AUDIO_PWR_ON.\n");
  75.         }
  76.         else if(!(strcmp(argv[1],"off"))){
  77.                 ioctl(fd,AUDIO_PWR_OFF);
  78.                 printf("AUDIO_PWR_OFF.\n");
  79.         }
  80.         return 0;
  81. }
复制代码

论坛徽章:
1
射手座
日期:2013-11-07 09:19:48
2 [报告]
发表于 2010-11-08 17:03 |只看该作者
test.c里面的open函数应该打开的是/dev下面的设备文件,LZ open的对象搞错了。

论坛徽章:
0
3 [报告]
发表于 2010-11-08 17:29 |只看该作者
回复 2# guocslock


    多谢!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP