<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > s3c2410_gpio_cfgpin函數(shù)解析

          s3c2410_gpio_cfgpin函數(shù)解析

          作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          函數(shù)原型:s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function)

          位置:/linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c

          本文引用地址:http://www.ex-cimer.com/article/201611/318857.htm

          函數(shù)內(nèi)容:

          void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
          {
          void __iomem *base =S3C24XX_GPIO_BASE(pin);
          unsigned long mask;
          unsigned long con;
          unsigned long flags;

          if (pin mask = 1 <}

          else {
          mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;
          }

          switch (function) {
          caseS3C2410_GPIO_LEAVE:
          mask = 0;
          function = 0;
          break;

          caseS3C2410_GPIO_INPUT:
          caseS3C2410_GPIO_OUTPUT:
          caseS3C2410_GPIO_SFN2:
          caseS3C2410_GPIO_SFN3:
          if (pin function -= 1;
          function &= 1;
          function <<= S3C2410_GPIO_OFFSET(pin);
          } else {
          function &= 3;
          function <<= S3C2410_GPIO_OFFSET(pin)*2;
          }
          }

          /* modify the specified register wwith IRQs off */

          local_irq_save(flags);

          con = __raw_readl(base + 0x00);
          con &= ~mask;
          con |= function;

          __raw_writel(con, base + 0x00);

          local_irq_restore(flags);
          }

          EXPORT_SYMBOL(s3c2410_gpio_cfgpin);

          /***************************************************************************

          首先確定一下各宏定義所在的位置和意義:

          S3C24XX_GPIO_BASE(pin) -->

          S3C2410_GPIO_OFFSET(pin)-->

          S3C2410_GPIO_INPUT-->

          S3C2410_GPIO_OUTPUT-->

          S3C2410_GPIO_SFN2-->

          S3C2410_GPIO_SFN3-->

          以上宏都是在/linux2.6.32.2/arch/arm/mach-s3c2410/include/regs_gpio.h定義.

          S3C2410_GPIO_BANKB-->

          此宏的定義是在/linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/gpio-nrs.h中定義.

          接下來,順序解析程序:

          #define S3c2410_GPIO_BASE(pin) ((((pin) & ~31) >>1) +S3C24XX_VA_GPIO)

          S3C24XX_VA_GPIO在/linux-2.6.32.2/arch/arm/plat-s3c24xx/include/plat/map.h中是這樣定義的:

          S3C24XX_PA_GPIO在/linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/map.h中這樣定義:

          而S3C2410_PA_GPIO在/linux-2.6.32.2/arch/arm/plat-s3c24xx/include/plat/map.h中這樣定義:

          S3C24XX_PA_UART在中這樣定義:

          而S3C2410_PA_UART在/linux-2.6.32.2/arch/arm/plat-s3c24xx/include/plat/map.h中這樣定義:

          S3C24XX_VA_UART在linux-2.6.32.2/arch/arm/plat-s3c24xx/include/plat/map.h中這樣定義:

          而S3C_VA_UART在linux-2.6.32.2/arch/arm/plat-s3c/include/plat/map.h中這樣定義:

          由以上宏定義可以推出:

          S3C24XX_VA_GPIO=((S3C24XX_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART)

          =((0x56000000 - 0x50000000) + (0xF4000000 + 0x01000000))

          = (0x06000000 + 0xF5000000)

          = (0xFB000000)

          這里假設(shè)設(shè)置GPB5引腳為輸出:

          s3c2410_gpio_cfgpin(S3C2410_GPB(5),S3C2410_GPB_OUTPUT);

          首先S3C2410_GPB(_nr)在/linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/gpio-nrs.h中這樣定義:




          關(guān)鍵詞: s3c2410函數(shù)解

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();