娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月12日(星期六)

正在發生

2018年10月12日 | Tiny210驅動之按鍵中斷實驗

發布者:春水碧于天 來源: eefocus關鍵字:Tiny210驅動  按鍵中斷 手機看文章 掃描二維碼
隨時隨地手機看文章

third_drv.c驅動源碼:

#include "linux/device.h"

#include "linux/interrupt.h"

#include "linux/module.h"

#include "linux/kernel.h"

#include "linux/fs.h"

#include "linux/init.h"

#include "linux/delay.h"

#include "linux/irq.h"

#include "asm/uaccess.h"

#include "asm/irq.h"

#include "asm/io.h"

#include "mach/gpio.h"

static struct class *thirddrv_class;

volatile unsigned long *gph2con;

volatile unsigned long *gph2dat;

volatile unsigned long *gph3con;

volatile unsigned long *gph3dat;

static DECLARE_WAIT_QUEUE_HEAD(button_waitq);

// 中斷事件標志, 中斷服務程序將它置1,third_drv_read將它清0 

static volatile int ev_press = 0;

struct pin_desc{

    unsigned int pin;

    unsigned int key_val;

};

// 鍵值: 按下時, 0x01, 0x02, 0x03, 0x04, 0x05 

// 鍵值: 松開時, 0x81, 0x82, 0x83, 0x84, 0x85 

static unsigned char key_val;

struct pin_desc pins_desc[5] = {

    {S5PV210_GPH2(3), 0x01},

    {S5PV210_GPH3(0), 0x02},

    {S5PV210_GPH3(1), 0x03},

    {S5PV210_GPH3(2), 0x04},

    {S5PV210_GPH3(3), 0x05},

};

// 確定按鍵值 

static irqreturn_t buttons_irq(int irq, void *dev_id)

{

    struct pin_desc * pindesc = (struct pin_desc *)dev_id;

    unsigned int pinval;

    

    pinval = gpio_get_value(pindesc->pin);

    if (pinval)

    {

        // 松開 

        key_val = 0x80 | pindesc->key_val;

    }

    else

    {

        // 按下 

        key_val = pindesc->key_val;

    }

    ev_press = 1;                           // 表示中斷發生了 

    wake_up_interruptible(&button_waitq);   // 喚醒休眠的進程 

    

    return IRQ_RETVAL(IRQ_HANDLED);

}

static int third_drv_open(struct inode *inode, struct file *file)

{

    // 注冊中斷 

    request_irq(IRQ_EINT(19),  buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, 

                        "K4", &pins_desc[0]);

    request_irq(IRQ_EINT(24),  buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, 

                        "K5", &pins_desc[1]);

    request_irq(IRQ_EINT(25), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, 

                         "K6", &pins_desc[2]);

    request_irq(IRQ_EINT(26), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, 

                         "K7", &pins_desc[3]);    

    request_irq(IRQ_EINT(27), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,

                         "K8", &pins_desc[4]);    

    return 0;

}

ssize_t third_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)

{

    if (size != 1)

        return -EINVAL;

    // 如果沒有按鍵動作, 休眠 

    wait_event_interruptible(button_waitq, ev_press);

    // 如果有按鍵動作, 返回鍵值 

    copy_to_user(buf, &key_val, 1);

    ev_press = 0;

    

    return 1;

}

int third_drv_close(struct inode *inode, struct file *file)

{

    free_irq(IRQ_EINT(19), &pins_desc[0]);

    free_irq(IRQ_EINT(24), &pins_desc[1]);

    free_irq(IRQ_EINT(25), &pins_desc[2]);

    free_irq(IRQ_EINT(26), &pins_desc[3]);

    free_irq(IRQ_EINT(27), &pins_desc[4]);

    return 0;

}

static struct file_operations sencod_drv_fops = {

    .owner  =  THIS_MODULE,    // 這是一個宏,推向編譯模塊時自動創建的__this_module變量 

    .open    =  third_drv_open,     

    .read     =  third_drv_read,       

    .release =  third_drv_close,       

};

int major;

static int third_drv_init(void)

{

    major = register_chrdev(0, "third_drv", &sencod_drv_fops);

    thirddrv_class = class_create(THIS_MODULE, "third_drv");

    device_create(thirddrv_class, NULL, MKDEV(major, 0), NULL, "buttons"); // /dev/buttons 

    gph2con = (volatile unsigned long *)ioremap(0xe0200c40, 16);

    gph2dat = gph2con + 1;

    gph3con = (volatile unsigned long *)ioremap(0xE0200C60, 16);

    gph3dat = gph3con + 1;

    return 0;

}

static void third_drv_exit(void)

{

    unregister_chrdev(major, "third_drv");

    device_destroy(thirddrv_class, MKDEV(major, 0));

    class_destroy(thirddrv_class);

    iounmap(gph2con);

    iounmap(gph3con);

    return 0;

}

module_init(third_drv_init);

module_exit(third_drv_exit);

MODULE_LICENSE("GPL");

===================================================================

thirddrvtest.c測試程序:

#include "sys/types.h"

#include "sys/stat.h"

#include "fcntl.h"

#include "stdio.h"

// thirddrvtest 

int main(int argc, char **argv)

{

    int fd;

    unsigned char key_val;

    

    fd = open("/dev/buttons", O_RDWR);

    if (fd < 0)

    {

        printf("can't open!\n");

    }

    while (1)

    {

        read(fd, &key_val, 1);

        printf("key_val = 0x%x\n", key_val);

    }

    

    return 0;

}


關鍵字:Tiny210驅動  按鍵中斷 引用地址:Tiny210驅動之按鍵中斷實驗

上一篇:Tiny210驅動之按鍵poll機制
下一篇:Tiny210驅動之KEY測試

推薦閱讀

在全球工業機器人處于高速增長的背景下,業內知名的機器人企業、協作機器人(Cobot)鼻祖之一Rethink Robotics卻宣布倒閉,震驚業內。 這家成立于2008年初的公司,在協作機器人領域一貫被視為行業先驅和領頭羊。事實上,Rethink Robotics不僅在早期就提出了協作機器人的概念,還先后推出了代表性的工業機器人Baxter和Sawyer,對行業發展起到了深遠影響。...
筆者讀了本版有關PIC 8位單片機的產品性能和相應的封裝引腳介紹后,認為對初學者而言還需了解各引腳符號的意義,才能進一步學習和使用它。筆者為此作相關的說明,以便和初學者共同提高。  一、關于I/O口符號 PIC單片機系列封裝引腳最少的是8引腳(如PIC12C5XX和PIC12C6XX),多的可達84引腳(如PIC17C76X),其中I/O(輸入/輸出)口線按PIC單片機產品...
  隨著工業生產自動化水平的提高,各種傳感器的應用也越來越多。旋轉編碼器作為速度和位移反饋的傳感器,主要應用于數控機床、高精度的閉環調速系統、伺服電動機、異步電動機、步進電動機、電梯曳引機、電梯門機乃至機械軸等需要對運動速度和位移信息反饋的自動化控制場合,以保證機械的高精度穩定運轉,進而提高生產效率和保障安全運營。  本文針對旋...
音箱分頻器需要哪些電子元件電感、電容、電阻。 還要注意這些器件的功率,電感要注意線徑, 電容要注意承受電壓,電阻則要注意上面標示的功率,一般為水泥電阻使用居多。給你線路原理圖及實體圖參考,你即可一目了然矣:A、電感A、電感在揚聲器系統的分頻器中,一般使用兩種形式的電感:空芯電感和鐵芯電感。鐵芯電感是使用變壓器中的薄鐵片或其他形式的...

史海拾趣

問答坊 | AI 解惑

主語上道產品品牌設計廣納賢才

品牌設計師 崗位要求: * 視覺傳達設計類專業本科以上學歷; * 有平面設計從業經驗,并有較多的作品; * 熟練使用Photoshop、Illustrator、CorelDraw等軟件,熟悉排版、印刷等后期制作; * 能快速、全面、準確的領悟產品信息,對產品設計有獨 ...…

查看全部問答∨

MCF51CN128 定時器輸出捕獲示例

下面貼個freescale的coldfire v1系列中mcf51cn128 MCU的一個示例,利用定時器實現輸出捕獲的功能。 MCF51CN128是freescale去年推出的V1 CORE的coldfire處理器,具有一個以太網控制器,是實現以太網應用的不錯選擇 具有50MHZ的主頻 ------------- ...…

查看全部問答∨

關于nRF2401的收發。

我想問一下,NRF2401的芯片發送數據時,怎么檢測它到底發沒發信號,我看了許多關于這部分調試的文章,只是對這個問題一帶而過,我現在都不知道整個程序到底是哪出了問題。是發射呢,還是i接收呢? 還有一個小問題就是,我用的是MSP430單片機,沒有 ...…

查看全部問答∨

模擬電路--做畢設時心電圖設計資料

模擬電路--做畢設時心電圖設計資料…

查看全部問答∨

一個關于Vxworks的實時系統項目

  我以前做工控的,現在有個項目,需要實時系統,本來說基于pc104+IO擴展卡,由于IO數目比較多,PC104可能達不到要求,我現在想基于PC機+PCI或者是PXI,我目前的問題是 1.Vxworks支持哪些CPU,是不是只要是X86架構的都能夠運行。 2.哪 ...…

查看全部問答∨

做了兩個月多的WINCE,感覺沒啥意思啊

其實就是跟VC++一樣的,現在感覺不如在PC上做VC++開發有意思,在PC上做可以接觸到數據庫什么的,接觸面更加廣泛,而用EVC就是就是簡單的編碼。做做字符串的處理,邏輯業務的處理,真是沒什么大的意思啊。大家感覺呢。 等待被拍磚頭。。。。…

查看全部問答∨

簡單但是麻煩驅動問題,希望各位大蝦指點!!!

最近研究驅動開發,環境如下: VS2005.NET+DDKXP+DriverStudio3.2   寫了hello程序,設置如下: 1 project type頁中選擇"Kernel Mode Service"點 2 IRP Handlers頁中把所有自動勾上的請求都去掉,因為我要手工寫DriverWorks代碼 ...…

查看全部問答∨

基于單片機的信號發生器

本人正在做畢業設計是關于單片機信號發生器的!但是在做仿真時遇到了一些問題,希望大家幫我看看是怎么回事,是程序有問題嗎?謝謝各位………

查看全部問答∨

請版主看看有沒有更好的方法實現兩對同時更新的PWM波形

我想做兩對同時更新的PWM波形,一對是原數據,一對是調整后的數據,它們更新要同步,即四通道的PWM脈沖同時更新,內容不一樣但數組的索引是相同的,TIM1只有三通道,不能滿足要求,所以用TIM1和TIM8的CCR1和CCR2寄存器,程序如下,請問版主有 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 屯留县| 延吉市| 来安县| 桂平市| 青浦区| 六盘水市| 信丰县| 交城县| 建始县| 南宫市| 长白| 社旗县| 镇江市| 右玉县| 新丰县| 沙雅县| 茌平县| 察隅县| 宁津县| 武功县| 溧水县| 商城县| 方城县| 合川市| 怀柔区| 淮北市| 营山县| 环江| 五河县| 遵义县| 运城市| 赣榆县| 太康县| 南城县| 湛江市| 夏邑县| 仙居县| 梅州市| 怀化市| 宁明县| 贵定县|