WINCE下SOS驱动开发
********************************LoongEmbedded************************
作者:LoongEmbedded(kandi)
时间:2011.03.30
类别:WINCE驱动开发
********************************LoongEmbedded************************
备注:系统是WINCE4.2移植过来的BSP包+S3C2440A
1. SOS
S.O.S.是国际莫尔斯电码救难信号,并非任何单字的缩写。鉴于当时海难事件频繁发生,往往由于不能及时发出求救信号和最快组织施救,结果造成很大的人员伤亡和财产损失,国际无线电报公约组织于1908年正式将它确定为国际通用海难求救信号。这三个字母组合没有任何实际意义,只是因为它的电码“ ...---...”(三个圆点,三个破折号,然后再加三个圆点)在电报中是发报方最容易发出,接报方最容易辨识的电码。
我们产品的SOS的需求是用户(比如说司机)在需要求救的时候,按下SOS键(按下3s),然后驱动告诉应用程序,而应用程序这时候就可以拨号求救(那对应的号码可以预先设定),这就是我们产品SOS的需求和设计思想。
2. SOS的硬件检测
SOS按键的设计部分:
图1
CPU的GPG10作为SOS检测引脚
图2
3. SOS软件的实现
3.1 SOS中断检测的实现
因为GPG10是作为SOS按键检测引脚的,所以可以利用GPG10的中断功能来检查到是否按下SOS按键,因为SOS键没有按下时,引脚SOS_DET是低电平,按下SOS键后事高电平,大概2.95V左右,所以可以把GPG10配置为EINT18中断功能引脚,并且设置为上升沿触发,也即按下SOS按键时触发,相应的实现代码:
⑴ SMDK2440/SRC/INC/oalintr.h静态定义EINT18对应的逻辑中断号
图3
⑵ 把GPG10配置为上升沿触发的中断引脚
图4
⑶ SMDK2440/SRC/KERNEL/HAL/ARM/armint.c下的OEMInterruptHandler()添加对EINT18中断处理的支持
图5
⑷ SMDK2440/SRC/KERNEL/HAL/ARM/armint.c下的OEMInterruptEnable ()添加对EINT18中断处理的支持
图6
⑸ SMDK2440/SRC/KERNEL/HAL/ARM/armint.c下的OEMInterruptDisable ()添加对EINT18中断处理的支持
图7
⑹ SMDK2440/SRC/KERNEL/HAL/ARM/armint.c下的OEMInterruptDone ()添加对EINT18中断处理的支持
图8
3.2 SOS中断IST线程
图9
在此学习一下IsAPIReady函数的功能
图10
3.3
4. SOS驱动调试遇到的问题
4.1 没有按下SOS按键的时候SOS_DET引脚的电平是1.3V左右
根据图1和图2的设计思路,在没有按下SOS键的时候,SOS_DET引脚的电平应该是接近0v的,但实际用万用表测出来时1.3v左右,这样CPU就认为此时为高电平,而按下按键的时候SOS_DET引脚的电平时2.95V左右,那么就会出现不管是否按下SOS按键,CPU都认为是高电平,也就是认为SOS键一直处于按下的状态,这样就不能使用EINT18的上升沿中断触发功能。
刚开始我一直以为是硬件设计的问题,可是硬件同事一时也不知道问题在哪里,我就试着在SOS_EnableInterrupt函数中把GPG10的上拉功能关闭掉,然后再来测试SOS键没有按下时的电压,此时是0.01V,这才是我想要的电平,可是为什么把GPG10的上拉功能关闭掉后可以拉低SOS_DET引脚的电压为0V呢?而之前是使能GPG10的上拉功能的,也就是使能GPG10上拉功能的时候,CPU内部中GPG10的上拉电阻(一般是75K左右)和图1的R173形成回路,这样根据分压原理就可以知道SOS_DET引脚的电源为1.3V左右,所以我们需要把GPG10的上拉功能关闭掉,这是我的理解,不知是否有误,而且我的理解还不够深入,在此忘大家赐教,谢谢了。
4.2 接入sd卡启动之后SOS按键中断没有被触发
但如果没有接入SD卡启动,那么就可以正常相应SOS按键中断,带SD卡启动之后再按下SOS按键OEMInterruptHandler函数都没有进入图5的代码处理段,为什么呢?见图2可知用于检测SD卡是否插入的引脚nCD_SD连接到EINT16/GPG8的,见下图
图11
后来仔细看看了SD卡驱动部分,虽然把GPG8初始化为中断功能EINT16,但实际是用查询的模式,下图是CSDIOControllerBase::Initialize()函数相关部分
图12
这样在带SD卡驱动的时候,就会检查到nCD_SD引脚对应的EINT16中断进来,自然而然就
执行了图5的检查SD卡插入的处理部分,可以看到其中执行了下面语句
s2440INT->rSRCPND = BIT_EINT8_23;
这表示中断源EINT16的已经插入中断请求,等待中断处理,可是系统起来后SD卡驱动并没有实际用到EINT16的中断处理,也没有清除中断相关寄存器的对应位,也就是没有一直处于外部扩展中断EINT8到EINT23的中断请求这时候就进不来,认识到这一点之后,在CSDIOControllerBase::Initialize()函数的后面添加下面的代码就解决了这个问题:
图13
图13中调用InterruptDone函数,从而内核调用了OEMInterruptDone函数的相关部分,见
图8,这样就解决了这个问题。
WINCE下SOS驱动开发相关推荐
- 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)
SD Card Driver on ADS Summary 了解SD card. 1 WinCE 5.0下SD Stack. 6 Bus Driver 7 Host Controller Driver ...
- S3C2440的camera接口特性及WinCE 下的驱动
S3C2440的camera接口特性及WinCE 下的驱动 发布:2011-06-02 | 作者: | 来源: luhaifei | 查看:1022次 | 用户关注: 摘要:实现了一种全集成可变带宽中 ...
- linux下IIC驱动开发分析
1. IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...
- visual studio下设置驱动开发环境
原文地址:visual studio 下设置驱动开发环境 作者:空空的左手 摘自:http://hi.baidu.com/%D0%DD%CF%D0e%D7%E5/blog/item/ad97a10e5 ...
- ZYNQ系列(五) ZYNQ下的驱动开发
ZYNQ系列(五) ZYNQ下的驱动开发 第一章 Petalinux创建工程 第二章 Petalinux-config配置说明 第三章 QSPI自启动工程 第四章 将文件打包进文件系统 第五章 将文件 ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...
- WinCE的USB驱动开发
USB协议 http://www.usb.org/ Windows CE.NET 的USB系统软件分为两层: USB Client设备驱动程序和底层的Windows CE实现的函数层.USB设备驱动程 ...
- Wince下usb驱动详细总结(史无前例的详细)
0,前言: 1, 本篇文章只讲wince下的usb host驱动,并深入解析HID驱动.本博客的目的并不是只是为了讲怎么写驱动, 更重要的是: 1,了解wince驱动的架构. 2,学习微软的写作方法, ...
- linux 下usb驱动开发,LINUX_ARM下的USB驱动开发.pdf
LINUX_ARM下的USB驱动开发 CN 431258 / TP 计算机工程与科学 2006年第 28卷第 3期 ISSN 1007130X COM PU TER EN GIN EER IN G & ...
最新文章
- cve-2019-10758 mongo-express rce 漏洞分析
- RHEL6.0使用centos的YUM更新源
- 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
- TurtleCoin节点搭建
- 使用Velocity(VTL)调用自定义C# .net 中的方法
- ad16不能去除铺铜_海水小讲堂006 铜离子的正确使用姿势
- 谷歌:修复0day漏洞的平均耗时比3年前减少28天
- 【图像融合】基于matlab小波变换全聚焦图像融合【含Matlab源码 1372期】
- 二叉树的层次遍历算法
- 视频封装格式篇(TS)
- word2013+endnotex8参考文献导入
- 手机端自动播放网页背景音乐代码
- 三相短路电流计算机算法的原理什么,第三章电力系统三相短路电流及实用计算.ppt...
- 《计算机科学导论》学习笔记
- Linux安装iptables防火墙
- FFmpeg常用错误码整理
- 《麦田里的守望者》中最喜欢的两句话
- Anaconda安装keras教程
- 【Python】如何判断丑数
- 关于公网IP和私有IP的区别