********************************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

CPUGPG10作为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左右)和图1R173形成回路,这样根据分压原理就可以知道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的中断处理,也没有清除中断相关寄存器的对应位,也就是没有一直处于外部扩展中断EINT8EINT23的中断请求这时候就进不来,认识到这一点之后,在CSDIOControllerBase::Initialize()函数的后面添加下面的代码就解决了这个问题:

13

13中调用InterruptDone函数,从而内核调用了OEMInterruptDone函数的相关部分,见

8,这样就解决了这个问题。

WINCE下SOS驱动开发相关推荐

  1. 【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 ...

  2. S3C2440的camera接口特性及WinCE 下的驱动

    S3C2440的camera接口特性及WinCE 下的驱动 发布:2011-06-02 | 作者: | 来源: luhaifei | 查看:1022次 | 用户关注: 摘要:实现了一种全集成可变带宽中 ...

  3. linux下IIC驱动开发分析

    1.  IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...

  4. visual studio下设置驱动开发环境

    原文地址:visual studio 下设置驱动开发环境 作者:空空的左手 摘自:http://hi.baidu.com/%D0%DD%CF%D0e%D7%E5/blog/item/ad97a10e5 ...

  5. ZYNQ系列(五) ZYNQ下的驱动开发

    ZYNQ系列(五) ZYNQ下的驱动开发 第一章 Petalinux创建工程 第二章 Petalinux-config配置说明 第三章 QSPI自启动工程 第四章 将文件打包进文件系统 第五章 将文件 ...

  6. Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...

  7. WinCE的USB驱动开发

    USB协议 http://www.usb.org/ Windows CE.NET 的USB系统软件分为两层: USB Client设备驱动程序和底层的Windows CE实现的函数层.USB设备驱动程 ...

  8. Wince下usb驱动详细总结(史无前例的详细)

    0,前言: 1, 本篇文章只讲wince下的usb host驱动,并深入解析HID驱动.本博客的目的并不是只是为了讲怎么写驱动, 更重要的是: 1,了解wince驱动的架构. 2,学习微软的写作方法, ...

  9. 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 & ...

最新文章

  1. cve-2019-10758 mongo-express rce 漏洞分析
  2. RHEL6.0使用centos的YUM更新源
  3. 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
  4. TurtleCoin节点搭建
  5. 使用Velocity(VTL)调用自定义C# .net 中的方法
  6. ad16不能去除铺铜_海水小讲堂006 铜离子的正确使用姿势
  7. 谷歌:修复0day漏洞的平均耗时比3年前减少28天
  8. 【图像融合】基于matlab小波变换全聚焦图像融合【含Matlab源码 1372期】
  9. 二叉树的层次遍历算法
  10. 视频封装格式篇(TS)
  11. word2013+endnotex8参考文献导入
  12. 手机端自动播放网页背景音乐代码
  13. 三相短路电流计算机算法的原理什么,第三章电力系统三相短路电流及实用计算.ppt...
  14. 《计算机科学导论》学习笔记
  15. Linux安装iptables防火墙
  16. FFmpeg常用错误码整理
  17. 《麦田里的守望者》中最喜欢的两句话
  18. Anaconda安装keras教程
  19. 【Python】如何判断丑数
  20. 关于公网IP和私有IP的区别

热门文章

  1. redis的持久化方式有哪些?
  2. 023_Jedis的发布和订阅
  3. 001_JSON-lib下载和文档
  4. mysql variables_通过什么命令能够改变mysql的variables的变量里的值?
  5. 软件工程方法论对我们开发软件有多大用处?谈谈你的看法。
  6. python自带的数据库_Python小白的数据库入门
  7. java中的IO详解(下)
  8. JavaWeb:MVC设计模式
  9. python2安装_Linux 上安装 appium 的辛酸
  10. oracle往据,指定日期查询数Oracle据库