alien75
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2011-07-26
  • 粉丝1
  • 关注0
  • 积分68分
  • 威望163点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2152回复:1

扩展wince5物理中断

楼主#
更多 发布于:2009-11-09 16:48
我的开发环境是s3c2450+wince5,需要用到EINT20做键盘中断,但是因为wince5默认只支持64个物理中断,而且BSP用到的IRQ_LAST是EINT16。因为EINT4到EINT16都有用处,想通过将EINT20移到64以内并添加静态映射的方法就行不通了,只能用动态分配的方法,为此需要对BSP及WINCE做一些调整。具体做法如下:
1、修改bsp中的s3c2450_intr.h:添加IRQ_EINT17到IRQ_EINT23的定义,将IRQ_LAST由IRQ_EINT16改为IRQ_EINT23
2、动态分配中断的代码在platform\common\src\common\intr\base\map.c中
关于OAL_INTR_IRQ_MAXIMUM的定义是在platform\common\src\inc中,将它由64修改为72,否则无法动态分配系统中断给超过64的物理中断。
关于此宏定义在bsp的inc目录中的oal_intr.h也有定义,但是并没有使用。开始的时候我改的是BSP下的不起作用,要注意不要改错地方。
3、将EINT20对应的GPG12设置为外部中断。
修改bsp的kernel\oal目录中的intr.c:在BSPIntrInit中添加将GPG12(EINT20)设置为外部中断并使能中断的代码
注意在设置好GPGCON、GPGDAT、GPGUP后要调用OALIntrEnableIrqs。刚开始我是把GPG引脚的设置放到设备驱动初始化中,也可以运行。不过放到BSPIntrint感觉更放心。
4、在设备驱动中按动态分配的方法分配IRQ_EINT20、关联事件、创建IST。

经过此改动,能够实现大于64的物理中断动态分配,键盘程序运行正常。不过没有做其它测试了。


high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
沙发#
发布于:2009-11-10 02:54
同意 。最大值被bsp的宏给限制了。是需要修改那个宏值。
游客

返回顶部