中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux之我行——LED驅(qū)動在2440上的實例開發(fā)

        嵌入式Linux之我行——LED驅(qū)動在2440上的實例開發(fā)

        作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
        一、開發(fā)環(huán)境
        • 機:VMWare--Fedora 9
        • 開發(fā)板:Mini2440--64MB Nand
        • 編譯器:arm-linux-gcc-4.3.2

        二、實現(xiàn)步驟

        本文引用地址:http://www.antipu.com.cn/article/201611/319004.htm

        1. 硬件原理圖分析。由原理圖得知LED電路是共陽極的,并分別由2440的GPB5、GPB6、GPB7、GPB8口控制的

        2. 去掉內(nèi)核已有的LED驅(qū)動設置,因為IO口與mini2440開發(fā)板的不一致,根本就不能控制板上的LED。

        #gedit arch/arm/plat-s3c24xx/common-smdk.c //注釋掉以下內(nèi)容


        staticstructplatform_device __initdata*smdk_devs[]={
        &s3c_device_nand,

        };


        void__init smdk_machine_init(void)
        {



        if(machine_is_smdk2443())
        smdk_nand_info.twrph0=50;

        s3c_device_nand.dev.platform_data=&smdk_nand_info;

        platform_add_devices(smdk_devs,ARRAY_SIZE(smdk_devs));

        s3c_pm_init();
        }


        3. 編寫適合mini2440開發(fā)板的LED驅(qū)動,代碼如下,文件名稱:my2440_leds.c



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

        #defineDEVICE_NAME"my2440_leds"//設備名稱
        #defineLED_MAJOR231//主設備號
        #defineLED_ON1//LED亮狀態(tài)
        #defineLED_OFF0//LED滅狀態(tài)

        staticunsignedlongled_table[]=//控制LED的IO口
        {
        S3C2410_GPB5,
        S3C2410_GPB6,
        S3C2410_GPB7,
        S3C2410_GPB8,
        };

        staticunsignedintled_cfg_table[]=//LED IO口的模式
        {
        S3C2410_GPB5_OUTP,
        S3C2410_GPB6_OUTP,
        S3C2410_GPB7_OUTP,
        S3C2410_GPB8_OUTP,
        };

        staticintleds_open(structinode*inode,structfile*file)
        {
        return0;
        }

        staticintleds_ioctl(structinode*inode,structfile*file,
        unsignedintcmd,unsignedlongarg)
        {
        //檢測是第幾個LED,因開發(fā)板上只有4個,索引從0開始
        if(arg<0||arg>3)
        {
        return-EINVAL;
        }

        //判斷LED要執(zhí)行哪種狀態(tài)
        switch(cmd)
        {
        caseLED_ON:
        {
        s3c2410_gpio_setpin(led_table[arg],~(LED_ON));
        break;
        }
        caseLED_OFF:
        {
        s3c2410_gpio_setpin(led_table[arg],~(LED_OFF));
        break;
        }
        default:
        {
        return-EINVAL;
        }
        }

        return0;
        }

        staticstructfile_operations leds_fops=
        {
        .owner=THIS_MODULE,
        .open=leds_open,
        .ioctl=leds_ioctl,
        };

        staticint__init led_init(void)
        {
        intret,i;

        for(i=0;i<4;i++)
        {
        //初始化各IO口為輸出模式
        s3c2410_gpio_cfgpin(led_table[i],led_cfg_table[i]);

        //由原理圖可知LED電路是共陽極的(即各IO口輸出低電平0才會點亮)
        //這里初始化為1,不讓LED點亮
        s3c2410_gpio_setpin(led_table[i],~(LED_OFF));
        }

        //注冊LED設備為字符設備
        ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&leds_fops);

        if(ret<0)
        {
        printk(DEVICE_NAME" register falid!n");
        returnret;
        }
        }

        staticvoid__exit led_exit(void)
        {
        //注銷設備
        unregister_chrdev(LED_MAJOR,DEVICE_NAME);
        }

        module_init(led_init);
        module_exit(led_exit);

        MODULE_LICENSE("GPL");
        MODULE_AUTHOR("Huang Gang");
        MODULE_DESCRIPTION("My2440 led driver");


        4. 把LED驅(qū)動代碼部署到內(nèi)核中去

        #cp -f my2440_leds.c /linux-2.6.30.4/drivers/char //把驅(qū)動源碼復制到內(nèi)核驅(qū)動的字符設備下


        #gedit /linux-2.6.30.4/drivers/char/Kconfig //添加LED設備配置

        config MY2440_LEDS
        tristate "My2440 Leds Device"
        depends on ARCH_S3C2440
        default y
        ---help---
        My2440 User Leds

        #gedit /linux-2.6.30.4/drivers/char/Makefile //添加LED設備配置

        obj-$(CONFIG_MY2440_LEDS)+= my2440_leds.o

        5. 配置內(nèi)核,選擇LED設備選項

        #make menuconfig

        Device Drivers --->
        Character devices --->
        <*>My2440 Leds Device (NEW)


        6. 編譯內(nèi)核并下載到開發(fā)板上,查看已加載的設備:#cat /proc/devices,可以看到my2440_leds的主設備號為231

        7. 編寫應用程序測試LED驅(qū)動,文件名:leds_test.c



        #include
        #include
        #include
        #include

        intmain(intargc,char**argv)
        {
        intturn,index,fd;

        //檢測輸入的參數(shù)合法性
        if(argc!=3||sscanf(argv[2],"%d",&index)!=1||index<1||index>4)
        {
        printf("Usage: leds_test on|off 1|2|3|4n");
        exit(1);
        }

        if(strcmp(argv[1],"on")==0)
        {
        turn=1;
        }
        elseif(strcmp(argv[1],"off")==0)
        {
        turn=0;
        }
        else
        {
        printf("Usage: leds_test on|off 1|2|3|4n");
        exit(1);
        }

        //打開LED設備
        fd=open("/dev/my2440_leds",0);

        if(fd<0)
        {
        printf("Open Led Device Faild!n");
        exit(1);
        }

        //IO控制
        ioctl(fd,turn,index-1);

        //關(guān)閉LED設備
        close(fd);

        return0;
        }


        8. 在開發(fā)主機上交叉編譯測試應用程序,并復制到文件系統(tǒng)的/usr/sbin目錄下,然后重新編譯文件系統(tǒng)下載到開發(fā)板上

        #arm-linux-gcc -o leds_test leds_test.c


        9. 在開發(fā)板上的文件系統(tǒng)中創(chuàng)建一個LED設備的節(jié)點,然后運行測試程序,效果圖如下,觀測開發(fā)板上的LED燈,可以看到每一步的操作對應的LED會點亮或者熄滅



        關(guān)鍵詞: LinuxLED驅(qū)動244

        評論


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

        關(guān)閉