zoukankan      html  css  js  c++  java
  • linux下操作gpio寄存器的方法

    一、 在驱动中:

      1. 用的时候映射端口:ioremap;

      #define GPIO_OFT(x) ((x) - 0x56000000)
      #define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050)))
      gpio_va = ioremap(0x56000000, 0x100000); // 物理地址0x56000000, 映射区分配的大小0x100000字节
      这样映射过后,就可以直接操作寄存器了: 
      配置3引脚为输出: GPFCON &= ~(0x3<<(4*2));

      2. 在linux/include/asm-arm/arch-s3c2410/map.h映射, 在linux/include/asm-arm/arch-s3c2410/regs-gpio.h得到各种寄存器的地址,直接对这些地址进行操作即可。
      参考【linux】 linux gpio操作http://www.cnblogs.com/embedded-tzp/p/4450515.html
         gpio映射 http://blog.chinaunix.net/uid-25100840-id-271146.html
          
        misccr = __raw_readl(S3C24XX_MISCCR);
          misccr &= ~clear;
          misccr ^= change;
          __raw_writel(misccr, S3C24XX_MISCCR);
        
        #define __raw_writel(v,a)    (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a) = (v))
      
       下面是内核代码提供的操作gpio寄存器的一些接口:

    void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);

    unsigned int s3c2410_gpio_getcfg(unsigned int pin);

    void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
    void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
    unsigned int s3c2410_gpio_getpin(unsigned int pin);
    unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change);
    int s3c2410_gpio_getirq(unsigned int pin);

    linux/include/asm-arm/io.h

    #define __raw_writeb(v,a)    (__chk_io_ptr(a), *(volatile unsigned char __force  *)(a) = (v))
    #define __raw_writew(v,a)    (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v))
    #define __raw_writel(v,a)    (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a) = (v))

    #define __raw_readb(a)        (__chk_io_ptr(a), *(volatile unsigned char __force  *)(a))
    #define __raw_readw(a)        (__chk_io_ptr(a), *(volatile unsigned short __force *)(a))
    #define __raw_readl(a)        (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a))

    二、 在linux应用程序中:  mmap

    mmap的实例参考:Linux用户态控制GPIO--基于友善mini2440 http://www.cnblogs.com/cute/archive/2011/05/10/2042399.html

    mmap的具体解释参考:Linux 下操作gpio http://www.cnblogs.com/lidabo/p/5319219.html

    功能描述: 
    mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。
    基 于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到 更新,首次对映射区的第一个页索引时会更新该字段的值。用PROT_WRITE 和 MAP_SHARED标志建立起来的文件映射,其st_ctime 和 st_mtime
    在对映射区写入之后,但在msync()通过MS_SYNC 和 MS_ASYNC两个标志调用之前会被更新。

    用法:  
    #include <sys/mman.h>
    void *mmap(void *start, size_t length, int prot, int flags,
      int fd, off_t offset);

    int munmap(void *start, size_t length);

     

    ============================

    gpio linux 实现模型 http://www.cnblogs.com/armlinux/archive/2010/12/30/2396865.html

  • 相关阅读:
    2款JS脚本判断手机浏览器跳转WAP手机网站
    js实现域名判断后跳转到指定网址
    js实现网页多少秒后自动跳转到指定网址
    利用JS判断当前来路域名并跳转到指定页面
    网站建设中用JS判断时间并显示不同内容
    python 基础_列表的其他操作 4
    Codeforces Round #519 by Botan Investments
    HDU5794
    牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph
    2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲
  • 原文地址:https://www.cnblogs.com/mylinux/p/5639264.html
Copyright © 2011-2022 走看看