中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

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

1、驅動程序 my_led_module.c

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <asm/io.h>
#include <linux/fs.h>
 
#define DEVICE_NAME "mini2440_leds" //設備名稱
#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對應虛擬地址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();

    // 設備的注冊
    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){
    //注銷設備
    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ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標題:如何不依賴于linux內(nèi)核程序進行LED控制
標題鏈接:http://www.rwnh.cn/article38/jsdhsp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、面包屑導航、全網(wǎng)營銷推廣、做網(wǎng)站、電子商務網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
威海市| 女性| 泉州市| 祁东县| 陆川县| 天全县| 丰宁| 莱西市| 仁布县| 乌恰县| 喀什市| 高清| 当涂县| 镇原县| 伊宁市| 永和县| 昭平县| 松潘县| 扎赉特旗| 青川县| 阿勒泰市| 峨眉山市| 凤台县| 宿州市| 新泰市| 安宁市| 余庆县| 金坛市| 日土县| 千阳县| 乐业县| 中卫市| 赣榆县| 岢岚县| 工布江达县| 大安市| 沧源| 莱阳市| 汾阳市| 同心县| 登封市|