真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何不依賴于linux內(nèi)核程序進行LED控制

本篇文章給大家分享的是有關(guān)如何不依賴于linux內(nèi)核程序進行LED控制,小編覺得挺實用的,因此分享給大家學(xué)習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、清河ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的清河網(wǎng)站制作公司

1、驅(qū)動程序 my_led_module.c

#include 
#include 
#include 
#include 
#include 
 
#define DEVICE_NAME "mini2440_leds" //設(shè)備名稱
#define LED_MAJOR  260
#define LED_ON      1       //LED亮狀態(tài)
#define LED_OFF     0       //LED滅狀態(tài)

volatile unsigned long virt, phys;//用于存放虛擬地址和物理地址
volatile unsigned long *GPBCON, *GPBDAT, *GPBUP;//用與存放三個寄存器的地址
 
static int leds_open(struct inode *inode, struct file *file){
    return 0;
}
 
static int leds_ioctl(struct inode *inode, struct file *file
    ,unsigned int cmd, unsigned long arg){
 
    //檢測是第幾個LED,因開發(fā)板上只有4個,索引從0開始    
    if(arg < 0 || arg > 3){
        return -EINVAL;
    }
 
    //判斷LED要執(zhí)行哪種狀態(tài)
    switch(cmd){
        case LED_ON:{
        	if(arg == 0){
        		*GPBDAT &= 0x1C0;
        	}
        	else if(arg == 1){
        		*GPBDAT &= 0x1A0;
        	}
        	else if(arg == 2){
        		*GPBDAT &= 0x160;
        	}
        	else if(arg == 3){
        		*GPBDAT &= 0x0E0;
        	}
            break;
        }
        case LED_OFF:{
        	if(arg == 0){
        		*GPBDAT |= 0x020;
        	}
        	else if(arg == 1){
        		*GPBDAT |= 0x040;
        	}
        	else if(arg == 2){
        		*GPBDAT |= 0x080;
        	}
        	else if(arg == 3){
        		*GPBDAT |= 0x100;
        	}
            break;
        }
        default:{
            return -EINVAL;
        }
    }
 
    return 0;
}
 
static struct file_operations leds_fops = {
    .owner 	= THIS_MODULE,
    .open	= leds_open,
    .ioctl	= leds_ioctl,
};

void led_device_init(void){
	// 0x56000010 + 0x10 包攬全所有的IO引腳寄存器地址
	phys = 0x56000010; // 0x56000010=GPBCON
	//在虛擬地址空間中申請一塊長度為0x10的連續(xù)空間
	//這樣,物理地址phys到phys+0x10對應(yīng)虛擬地址virt到virt+0x10
	virt =(unsigned long)ioremap(phys, 0x10);
	GPBCON = (unsigned long *)(virt + 0x00);//指定需要操作的三個寄存器的地址
	GPBDAT = (unsigned long *)(virt + 0x04);
	GPBUP  = (unsigned long *)(virt + 0x08);

	// GPBCON
	*GPBCON = 0x154FD;
	// GPBDAT
	*GPBDAT = 0x1E0;
	// GPBUP
	*GPBUP = 0x7FF;
}
 
static int __init led_init(void){
    int ret;
    led_device_init();

    // 設(shè)備的注冊
    ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &leds_fops);
 
    if(ret < 0){
        printk(DEVICE_NAME " register falid!\n");
    }
    else {
        printk(DEVICE_NAME " initialized!\n");
    }
 
    return ret;
}
 
static void __exit led_exit(void){
    //注銷設(shè)備
    unregister_chrdev(LED_MAJOR, DEVICE_NAME);
}
 
module_init(led_init);
module_exit(led_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Benjamin");
MODULE_DESCRIPTION("Mini2440 led driver");

以上就是如何不依賴于linux內(nèi)核程序進行LED控制,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站標題:如何不依賴于linux內(nèi)核程序進行LED控制
當前地址:http://weahome.cn/article/jsdhsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部