2S3C440外部中断驱动程序编写.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2S3C440外部中断驱动程序的编写 (2010-01-01 20:25:41) 标签: 我的研究生课题是研究CAN总线的,我们现有的CAN总线驱动是基于S3C2410的,而我要在S3C2440上实现CAN总线的扩展。硬件很好实现,我在S3C2440上实现了CAN总线的扩展后,八S3C2410的CAN总线驱动加到S3C2440上却不能用,这个让我很是痛苦。 于是我有开始了对WINCE外部中断的研究,天天看资料,找资料。这样一直过了快一个月了,还是没有解决存在的问题。就是这个申请动态中断函数KERNELIOCONTROL(),申请逻辑终端号是总是失败不知道为什么? 在在这期间,我曾经给周立功公司的WINCE工程师打过电话,想他们求救,可是人家根本不想理你,于是我又开始自己琢磨。 我从底层中断开始看,先弄清楚底层的中断再说,底层的很好了解,网上也很多介绍的,我用一天的时间就搞定。 接下来就是研究外部中断的基于WINCE的驱动程序,看了很多资料,也知道了WINCE中断是怎么执行的,可是还不知道为什么这个函数KERNELIOCONTROL(),不能正常的工作。无意中再网上看到了说S3C2440的驱动中又外部中断的驱动程序。我用的是友善之臂的BSP宝,他里面所有的中断程序都没有用KERNELIOCONTROL(),这个函数。是用的静态中断,所以我就利用他的方法编写了外部中断的驱动程序,结果成功了。 下面我就结舌实力来说一下; 我认为再WINCE外部中断中最重要的一个角色就是逻辑中断号。 在我的我驱动程序中的用的外部中断5就是EINT5,它用的是EINT4_7这条中断线 首先我们还是明白中断驱动程序的工作原理吧 看这个函数INTRUPTINITIALIZE(SYSINTR_ETHER,KEYEVENT,NULL,0) 这个函数的作用就是把SYSINTR_ETHER(逻辑中断号)和KEYEVENT(创建的事件)事件关联起来。 然后是这个函数WAITFORSINGLEOBJECT(KEYEVET,INFNITE) 这个函数一直在等待中断的到来,如果中断来了,并且INTRUPTINITIALIZE(SYSINTR_ETHER,,KEYEVENT,NULL,0)成功就使得KEYEVENT生效,从而可以执行下面的程序.在友善之臂的BSP包中并没有把EINT4,5,6开发出来,它只有EINT7用于DM9000,而且逻辑中断号SYSINTR_ETHER也被DM9000的驱动程序占用,一个驱动程序只能用一个逻辑中断号,不能两个驱动程序共同用一个逻辑中断号。 所以我的把EINT4,5,6开发出来,其实很简单。由于我的板子上没有网卡,所以我把网卡的驱动程序给注销了,所以我用的网卡用的逻辑中断号,也可以自己添加自己定义的逻辑中断号: 我用的逻辑中断号是SYSINTR_ETHER 在\WINCE500\PLATFORM\smdk2440\INC中的OALINTR.H中这样定义 #define SYSINTR_ETHER?????(SYSINTR_FIRMWARE+10)????????? //SYSINTR_FIRMWARE是16 在\WINCE500\PLATFORM\smdk2440\KERNEL\HAL\ARM中的ARMINT.C中又这样的定义 同样在S2440中还又这样的定义#define??? INTSRC_EINT4_7?? 4 int OEMInterruptHandler(unsigned int ra) { //有这样的代码 else if (IntPendVal == INTSRC_EINT4_7) // EINT7 - DM9000 - mini2440 ?{ ??DWORD dwSubMask = s2440IOP-rEINTPEND (~s2440IOP-rEINTMASK); ??if ( dwSubMask (1 7))?// 0x80 EINT7 : DM9000 ??{ ???s2440IOP-rEINTMASK |= 0x80; ???s2440IOP-rEINTPEND = 0x80; ???s2440INT-rSRCPND = BIT_EINT4_7;??????? ???if (s2440INT-rINTPND BIT_EINT4_7) s2440INT-rINTPND = BIT_EINT4_7; ???// RETAILMSG(1, (TEXT(INT:SYSINTR_ETHER INT s2440IOP-rEINTMASK = 0x%8x, s2440IOP-rEINTMASK\r\n))); ???// RETAILMSG(1, (TEXT(INT:SYSINTR_ETHER INT s2440

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档