新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > dm6441的gpio驅(qū)動(dòng)

        dm6441的gpio驅(qū)動(dòng)

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

        平臺(tái):Tidm6441linu2.6.18

        本文引用地址:http://www.104case.com/article/201611/321880.htm

        GPIO是嵌入式系統(tǒng)最簡單、最常用的資源了,比如點(diǎn)亮LED,控制蜂鳴器,輸出高低電平,檢測按鍵,等等。
        由于硬件資源的原因,DM6441并不是GPIO管腳就是純粹的GPIO腳,GPIO管腳和其他一些標(biāo)準(zhǔn)接口復(fù)用相同的引腳,
        比如SPI和GPIO復(fù)用,I2C和GPIO復(fù)用等,到底是使用GPIO還是其他接口,在初始化的時(shí)候,都需要對PINMUX0和PINMUX1
        兩個(gè)寄存器進(jìn)行設(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ù)解釋
        第一個(gè)是描述(和數(shù)據(jù)手冊p72上要對應(yīng)),第二個(gè)是pinmux0還是1,第三個(gè)是寄存器偏移。最后一個(gè)和調(diào)試有關(guān)的,
        倒數(shù)第二個(gè)就是你需要給pinmux寄存器相應(yīng)位設(shè)置的值,倒數(shù)第三個(gè)就是pinmux相應(yīng)位全為1的值(掩碼值),
        倒數(shù)第四個(gè)就是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,這個(gè)是寄存器級的驅(qū)動(dòng)。對這個(gè)文件的相關(guān)操作
        見http://blog.csdn.net/langxing0508/archive/2008/12/25/3604043.aspx達(dá)芬奇DM644X平臺(tái)(ARM9, Linux-2.6.10)BSP之gpio.c淺析
        說得不錯(cuò),這里表示感謝。

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

        #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)閉
        主站蜘蛛池模板: 婺源县| 五指山市| 湘西| 镶黄旗| 台中市| 灵山县| 景宁| 江阴市| 鹤峰县| 洪雅县| 资阳市| 儋州市| 滦南县| 襄樊市| 柘荣县| 溧水县| 珲春市| 无棣县| 都昌县| 平原县| 鹤岗市| 龙南县| 黄骅市| 榕江县| 长宁区| 合作市| 临高县| 房山区| 济源市| 迭部县| 灌南县| 信宜市| 渭南市| 安泽县| 翁源县| 黔江区| 儋州市| 揭东县| 阿坝县| 卫辉市| 曲阜市|