buttons.c驱动源码:
// 参考drivers\input\keyboard\gpio_keys.c
#include "linux/module.h"
#include "linux/version.h"
#include "linux/module.h"
#include "linux/init.h"
#include "linux/fs.h"
#include "linux/interrupt.h"
#include "linux/irq.h"
#include "linux/sched.h"
#include "linux/pm.h"
#include "linux/slab.h"
#include "linux/sysctl.h"
#include "linux/proc_fs.h"
#include "linux/delay.h"
#include "linux/platform_device.h"
#include "linux/input.h"
#include "linux/gpio_keys.h"
#include "linux/workqueue.h"
#include "linux/gpio.h"
struct pin_desc{
int irq;
char *name;
unsigned int pin;
unsigned int key_val;
};
struct pin_desc pins_desc[4] = {
{IRQ_EINT(19), "K4", S5PV210_GPH2(3), KEY_L},
{IRQ_EINT(24), "K5", S5PV210_GPH3(0), KEY_S},
{IRQ_EINT(25), "K6", S5PV210_GPH3(1), KEY_ENTER},
{IRQ_EINT(26), "K7", S5PV210_GPH3(2), KEY_LEFTSHIFT},
};
static struct input_dev *buttons_dev;
static struct pin_desc *irq_pd;
static struct timer_list buttons_timer;
static irqreturn_t buttons_irq(int irq, void *dev_id)
{
// 10ms后启动定时器
irq_pd = (struct pin_desc *)dev_id;
mod_timer(&buttons_timer, jiffies+HZ/100);
return IRQ_RETVAL(IRQ_HANDLED);
}
static void buttons_timer_function(unsigned long data)
{
struct pin_desc * pindesc = irq_pd;
unsigned int pinval;
if (!pindesc)
return;
pinval = gpio_get_value(pindesc->pin);
if (pinval)
{
// 松开 : 最后一个参数: 0-松开, 1-按下
input_event(buttons_dev, EV_KEY, pindesc->key_val, 0);
input_sync(buttons_dev);
}
else
{
// 按下
input_event(buttons_dev, EV_KEY, pindesc->key_val, 1);
input_sync(buttons_dev);
}
}
static int buttons_init(void)
{
int i;
// 1. 分配一个input_dev结构体
buttons_dev = input_allocate_device();;
// 2. 设置
// 2.1 能产生哪类事件
set_bit(EV_KEY, buttons_dev->evbit);
set_bit(EV_REP, buttons_dev->evbit);
// 2.2 能产生这类操作里的哪些事件: L,S,ENTER,LEFTSHIT
set_bit(KEY_L, buttons_dev->keybit);
set_bit(KEY_S, buttons_dev->keybit);
set_bit(KEY_ENTER, buttons_dev->keybit);
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);
// 3. 注册
input_register_device(buttons_dev);
// 4. 硬件相关的操作
init_timer(&buttons_timer);
buttons_timer.function = buttons_timer_function;
add_timer(&buttons_timer);
for (i = 0; i < 4; i++)
{
request_irq(pins_desc[i].irq, buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
pins_desc[i].name, &pins_desc[i]);
}
return 0;
}
static void buttons_exit(void)
{
int i;
for (i = 0; i < 4; i++)
{
free_irq(pins_desc[i].irq, &pins_desc[i]);
}
del_timer(&buttons_timer);
input_unregister_device(buttons_dev);
input_free_device(buttons_dev);
}
module_init(buttons_init);
module_exit(buttons_exit);
MODULE_LICENSE("GPL");
上一篇:Tiny210按键分层分离(总线-驱动-设备模型)
下一篇:Tiny210按键阻塞访问驱动
推荐阅读
史海拾趣
Amphion Semiconductor Ltd 成立于 1995 年,是一家总部位于英国剑桥的半导体设计公司,专注于数字信号处理器(DSP)和嵌入式系统解决方案。以下是关于 Amphion Semiconductor Ltd 公司发展的五个相关故事:
创立与早期阶段:Amphion Semiconductor Ltd 公司由 David Belbin 和 Richard Smith 共同创立于 1995 年,起初专注于开发用于音频和视频处理的数字信号处理器。公司总部设立在英国剑桥,这个地区是全球半导体设计和科技创新的重要中心之一。
技术创新与产品发展:Amphion Semiconductor Ltd 公司在数字信号处理领域进行了持续的技术创新和产品开发。公司的DSP技术在音频和视频处理、通信、图像处理等领域得到了广泛应用。除了开发自有的DSP芯片,公司还提供定制化的嵌入式系统解决方案,满足客户特定的应用需求。
业务扩展与市场拓展:随着技术的成熟和市场需求的增长,Amphion Semiconductor Ltd 公司逐渐扩大了业务规模,并在国际市场上取得了一定的份额。公司与全球各种行业的客户建立了合作关系,包括消费电子、汽车、通信、工业控制等领域,拓展了市场覆盖范围。
收购与合并:Amphion Semiconductor Ltd 公司在发展过程中进行了一些收购和合并,以扩大业务范围和提升竞争力。其中,2013年公司被丹麦半导体公司 Nordic Semiconductor 收购,成为其子公司,为 Nordic Semiconductor 扩展了音频和视频处理领域的技术能力。
变革与发展方向:Amphion Semiconductor Ltd 公司随着技术和市场的发展不断调整发展方向,加大在新兴领域的投入和研发力度。公司积极探索人工智能、物联网、自动驾驶等领域的应用,致力于提供更加智能化和高效的嵌入式系统解决方案,以适应不断变化的市场需求。
这些故事展示了 Amphion Semiconductor Ltd 公司从创立初期到如今在技术创新、产品发展、业务拓展、收购与合并以及发展方向等方面取得的重要进展。
ABB公司是一家全球性的工程技术公司,提供电力和自动化技术解决方案。以下是该公司发展的五个相关故事:
公司成立和早期发展: ABB公司成立于1883年,最初名为“Brown, Boveri & Cie”,总部位于瑞士苏黎世。公司的创始人是查尔斯·布朗和沃尔夫冈·鲍弗里。在早期,ABB专注于电力系统和电机的研发与制造,为当时的工业革命提供了关键的技术支持。
国际化战略和全球扩张: 随着技术的进步和市场的变化,ABB积极推动国际化战略,加速在全球范围内的扩张。公司通过收购和合并,逐步建立了全球化的生产和销售网络。截至2022年,ABB已在100多个国家设有分支机构和办事处。
技术创新和产品多样化: ABB一直致力于技术创新,不断推出新产品和解决方案,以满足不同行业和领域的需求。公司在电力输送、工业自动化、机器人技术等方面处于行业领先地位,为客户提供了全面的电力和自动化解决方案。
可持续发展和环保责任: ABB积极推动可持续发展和环保责任,在产品设计、生产和运营过程中注重减少能源消耗和减排,促进清洁能源的应用和利用。公司致力于推动能源效率和环境保护,为全球可持续发展做出贡献。
未来展望和发展方向: ABB将继续致力于技术创新和市场拓展,加强在电力和自动化领域的领先地位。公司将加大在数字化技术和人工智能领域的投入,推动工业智能化和数字化转型,为客户提供更智能、更高效的解决方案。
FOCI Fiber Optic Communications Inc.公司发展的五个故事
故事一:成立与初创期
FOCI Fiber Optic Communications Inc.(以下简称FOCI)成立于1995年,由台湾工业技术研究院(工研院)的核心团队创立。这家公司自诞生之初就专注于光纤互连技术的发展,致力于设计、制造和销售高性能的光纤组件和集成模块。初创时期,FOCI凭借其对光纤技术的深刻理解和市场需求的敏锐洞察,逐步在市场上站稳脚跟,成为光纤通信领域的一股新兴力量。
故事二:技术创新与突破
FOCI在发展过程中,始终将技术创新视为企业发展的核心驱动力。公司不断投入研发资源,在光纤耦合器、PLC分配器、薄膜粗波分复用/密集波分复用以及多光纤电缆组装模块等领域取得了多项技术突破。这些技术创新不仅提升了产品的性能和质量,还大幅降低了生产成本,使得FOCI的产品在市场上更具竞争力。
故事三:与奇景光电的战略合作
2024年,半导体解决方案无晶圆厂巨头奇景光电(Himax Technologies)宣布向FOCI投入5.22亿新台币(折合约为1610万美元)的资金。这次投资不仅是两家公司财务合作的结果,更是双方在技术融合与应用拓展上迈出的重要一步。根据合作协议,FOCI的共封装光学器件(CPO)与奇景光电的晶圆级光学器件(WLO)将被整合到多芯片模块中,这些模块将广泛应用于高性能计算、云服务器、人工智能等多个领域。
故事四:全球化布局与市场拓展
随着全球光纤通信市场的快速发展,FOCI积极实施全球化战略,不断拓展国际市场。公司通过参加国际展会、建立海外销售网络等方式,将高性能的光纤组件和集成模块带到了世界各地。特别是在光纤到户(FTTH)和云计算领域,FOCI的产品因其高效、低成本的特性而广受欢迎,成功在全球市场占据了一席之地。
故事五:子公司设立与多元化发展
为了进一步拓展业务领域和市场份额,FOCI在国内设立了多家子公司,如中山上诠通信科技有限公司等。这些子公司不仅继承了FOCI在光纤通信领域的深厚底蕴和技术优势,还根据当地市场需求进行了产品和服务的本地化调整。同时,FOCI还积极探索多元化发展路径,涉足光纤高速数据传输技术开发设计、研发和咨询等多个领域,为公司未来的持续发展奠定了坚实基础。
Computer Conversions Corp非常重视人才的培养和团队建设。公司定期组织内部培训和技术交流活动,鼓励员工分享经验和创新想法。同时,公司还建立了完善的激励机制,为员工提供广阔的发展空间。这种以人为本的管理理念,不仅增强了团队的凝聚力和创新力,也为公司的持续发展注入了强大的动力。通过这些举措,Computer Conversions Corp打造出了一支高素质、高效率的技术团队,为公司的长远发展奠定了坚实的基础。
CEVA, Inc.最初于1999年11月22日在美国特拉华州注册成立,起初的名称并非CEVA。随着公司的业务扩展和技术积累,其在2002年11月进行了更名,成为ParthusCeva公司。这一更名反映了公司业务的进一步发展和市场定位的调整。随后,在2003年12月,公司再次更名为CEVA公司,这一名称沿用至今,成为无线连接和智能传感技术领域的知名品牌。
将对数放大器用作功率测量器件时,噪声系数是不是有意义的衡量指标? 这个问题的答案应该由用户来确定。但是,只要对数限幅放大器应用在信号通路(在PM或FM应用)中,噪声系数显然就是重要的指标,因为它可以衡量系统从伴随有噪声的信 ...… 查看全部问答∨ |
|
1.问题:1.二极管是有源器件吗?个人认为是。2.那什么是有源器件,什么是无源器件?3.网上看到有人说需要加电源的就是有源器件,不用加电源的就是无源器件。二极管就不用加电源,那是无源器件喽????本人认为这种说法纯属扯淡。2.传言:此“源” ...… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 2011年国赛讨论,肯定有电源部分,放大部分肯定也有,可能实现方面必以前有很大的难度,还有好多的方面在这里就不说了,大家多讨论,关键一部分是国赛后封闭式训练,用的是赞助商的单片机,这个大家 ...… 查看全部问答∨ |
Cadence Allegro 16.50.000 详细破解步骤(win7和XP亲自验证) Cadence Allegro 16.50.000 详细破解步骤(鉴于网上的一些和crack一起的破解攻略有些人说不行,我整理一个,需要安装程序的我可以通过迅雷网盘分享给大家) 具体的步骤:1、下载SPB16.5下来后,点setup.exe,先安装第一项licensemanager,问licen ...… 查看全部问答∨ |
诚信求教:mini2440怎么才能显示出Residentflash? 买了块mini2440,自己用光盘里给的工程编译了一个ce6镜像,烧进去看不到Residentflash,结果能用的存储空间就5M,完全不够用。我NANDFLASH是1G的,怎么样才能看到剩下的NANDFLASH空间啊? 到官方论坛根本没人理,看这里高手挺多,诚心求教。… 查看全部问答∨ |
|
原始信号是一个类似正弦波的信号,周期是10微秒,信号频率90-110KHz,中心频率为100KHz,采样时取得1.25微秒一个点,然后用DA将采样得到的数据输出,输出也是1.25微秒输出一个点。想用RC滤波电路将DA输出的信号变平滑, ...… 查看全部问答∨ |