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

          新聞中心

          dm6441的gpio驅(qū)動

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
          這是我進入嵌入式行業(yè)進公司做的第一個驅(qū)動,

          平臺:Tidm6441linu2.6.18

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

          GPIO是嵌入式系統(tǒng)最簡單、最常用的資源了,比如點亮LED,控制蜂鳴器,輸出高低電平,檢測按鍵,等等。
          由于硬件資源的原因,DM6441并不是GPIO管腳就是純粹的GPIO腳,GPIO管腳和其他一些標(biāo)準(zhǔn)接口復(fù)用相同的引腳,
          比如SPI和GPIO復(fù)用,I2C和GPIO復(fù)用等,到底是使用GPIO還是其他接口,在初始化的時候,都需要對PINMUX0和PINMUX1
          兩個寄存器進行設(shè)置(見DM6441的芯片p72),而軟件設(shè)置則在Montavista linux-2.6.18_pro500/arch/arm/mach-davinci
          目錄下mux_cfg.c和對應(yīng)的include/asm/arch-davinci/mux.h里。由數(shù)據(jù)手冊知道gpio5,6,7默認(rèn)是gpio功能。

          對mux_cfg.c的分析

          對MUX_CFG()的參數(shù)解釋
          第一個是描述(和數(shù)據(jù)手冊p72上要對應(yīng)),第二個是pinmux0還是1,第三個是寄存器偏移。最后一個和調(diào)試有關(guān)的,
          倒數(shù)第二個就是你需要給pinmux寄存器相應(yīng)位設(shè)置的值,倒數(shù)第三個就是pinmux相應(yīng)位全為1的值(掩碼值),
          倒數(shù)第四個就是pinmux相應(yīng)位偏移值。如果你要改變引腳的模式,把對應(yīng)引腳設(shè)置成0,再把其他功能設(shè)為1。
          (這是我的理解,參考下面的I2C和GPIO43_44設(shè)置)。
          #include
          #include

          #include

          #include
          #include

          #ifdef CONFIG_DAVINCI_MUX

          struct pin_config __initdata_or_module davinci_dm644x_pins[] = {

          MUX_CFG("HDIREN",0,16,1,1,1)
          MUX_CFG("ATAEN",0,17,1,1,1)

          MUX_CFG("MSTK",1,9,1,0,0)

          MUX_CFG("I2C",1,7,1,1,0)

          MUX_CFG("MCBSP",1,10,1,1,0)

          MUX_CFG("PWM0",1,4,1,1,0)

          MUX_CFG("PWM1",1,5,1,1,0)

          MUX_CFG("PWM2",1,6,1,1,0)

          MUX_CFG("VLINQEN",0,15,1,1,0)
          MUX_CFG("VLINQWD",0,12,3,3,0)//pinmux上面是2位在表示所以0x11=33位就是111=7

          MUX_CFG("EMACEN",0,31,1,1,1)

          MUX_CFG("GPIO3V",0,31,1,0,1)

          MUX_CFG("GPIO0",0,24,1,0,1)
          MUX_CFG("GPIO3",0,25,1,0,0)
          MUX_CFG("GPIO43_44",1,7,1,0,0)
          MUX_CFG("GPIO46_47",0,22,1,0,1)

          MUX_CFG("RGB666",0,22,1,1,1)

          MUX_CFG("LOEEN",0,24,1,1,1)
          MUX_CFG("LFLDEN",0,25,1,1,0)
          };

          內(nèi)核里提供的接口在linux-2.6.18_pro500/arch/arm/mach-davinci目錄下的gpio.c,這個是寄存器級的驅(qū)動。對這個文件的相關(guān)操作
          見http://blog.csdn.net/langxing0508/archive/2008/12/25/3604043.aspx達芬奇DM644X平臺(ARM9, Linux-2.6.10)BSP之gpio.c淺析
          說得不錯,這里表示感謝。

          下面是我的gpio驅(qū)動程序

          #include
          #include
          #include
          #include
          #include
          #include
          #include
          #include
          #include
          #include

          #include

          #include
          #include
          #include
          #include
          //#include
          #define DEVICE_NAME "dm644x_gpios"
          #define GPIO_MAJOR 199


          #define ZX_GPIO55
          #define ZX_GPIO66
          #define ZX_GPIO77

          static int davinci_dm644x_gpio_open(struct inode *inode, struct file *file)
          {
          printk("open gpio,here is driver/n");
          const char *tag = NULL;
          int gpio5_value;
          int gpio6_value;
          int gpio7_value;

          //gpio_request(ZX_GPIO6, tag);
          //gpio_set_value(ZX_GPIO6, 0);
          //__gpio_set(ZX_GPIO6, 0);
          //printk("%s/n", tag);
          gpio_direction_output(ZX_GPIO5, 0);
          gpio_direction_output(ZX_GPIO6, 0);
          gpio_direction_output(ZX_GPIO7, 0);
          gpio5_value = gpio_get_value(ZX_GPIO5);
          gpio6_value = gpio_get_value(ZX_GPIO6);
          gpio7_value = gpio_get_value(ZX_GPIO7);

          printk("gpio5_value = %d, gpio6_value =%d , gpio7_value = %d/n", gpio5_value, gpio6_value, gpio7_value);
          return 0;
          }

          static int gpio_release(struct inode *inode,struct file *filp)
          {
          return 0;
          }


          上一頁 1 2 下一頁

          關(guān)鍵詞: dm6441gpio驅(qū)

          評論


          技術(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); })();