2798|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教WINCE50 & 2416 的中断处理 [复制链接]

看了2416的BSP(wince50)下对中断的处理,我蒙了!!!

首先这个BSP中有两个intr.c   
   1、SMDK2416\Src\Kernel\Oal\intr.c
   2、SMDK2416\Src\Common\Intr\intr.c
看这两个intr.c发现能用的应该是在commo\intr\intr.c中,因为这个里面做了一些出里!

我现在需要的是做com16550的驱动,其中用到外部中断,接到了Eint3

wince4下如果加一个外部中断 ,除了在驱动中添加一个IST外
还需要在kernel中的INTR.C中的OEMinterruptEnable 、OEMinterruptDisabel 、OEMinterruptDone中对应添加相应的
寄存器配置

我想wince50也需要这种配置,

可是我看了一下BSP中对powerbutton的中断处理,想仿照这个对中断进行设置,
其中这个驱动的中断用到了EINT0

但是我在intr.c中并没有看到对eint0的处理

在intr.c中只有对:
   OALIntrEnableIrqs函数:
             else if (irq <= IRQ_EINT7)
            {
            // Use external mask register
            CLRREG32(&g_pIntrRegs->INTMSK1, 1 << IRQ_EINT4_7);
            CLRREG32(&g_pPortRegs->EINTMASK, 1 << (irq - IRQ_EINT4 + 4));
             }
   OALIntrDisableIrqs函数:
              无外部中断处理

   OALIntrDoneIrqs函数:
              无外部中断处理

   OEMInterruptHandler函数:
              if (irq == IRQ_EINT4_7 || irq == IRQ_EINT8_23) // 4 or 5
                   {

               // Find external interrupt number
                mask = INREG32(&g_pPortRegs->EINTPEND);
                mask &= ~ INREG32(&g_pPortRegs->EINTMASK);
                mask = (mask ^ (mask - 1)) >> 5;
                irq2 = IRQ_EINT4;
                while (mask != 0)
                {
                    mask >>= 1;
                    irq2++;
                }

                // Mask and clear interrupt
                mask = 1 << (irq2 - IRQ_EINT4 + 4);
                SETREG32(&g_pPortRegs->EINTMASK, mask);
                OUTREG32(&g_pPortRegs->EINTPEND, mask);

                // Clear primary interrupt
                mask = 1 << irq;
                OUTREG32(&g_pIntrRegs->SRCPND1, mask);
                OUTREG32(&g_pIntrRegs->INTPND1, mask);

                // From now we care about this irq
                irq = irq2;
            }

    也就是说在powerbutton驱动中用到了EINT0但是在intr.c中对ISR的处理并没有EINT0,
   (而这个POWERBUTTON驱动是BSP自带的,应该是可以用的)
    那么对外部中断0-----3的ISR处理是在哪里呢????

谢谢各位
此帖出自WindowsCE论坛

最新回复

BSP ISR已经处理好,楼主只管驱动的IST即可。  详情 回复 发表于 2009-9-27 12:42
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶~
此帖出自WindowsCE论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
if (irq <= IRQ_ADC) { // Use interrupt mask register if ((INREG32(&g_pIntrRegs->INTPND1) & (1<INTPND1, 1<INTMSK1, 1 << irq); }
EINT0~EINT3对应的irq都小于IRQ_ADC,所以在这个地方处理。
此帖出自WindowsCE论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

4
 
我们的2416BSP中使用外部中断都是根据例子直接用的,没有查看那三个函数的内容,用起来没问题。
此帖出自WindowsCE论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 veabol 的回复:
我们的2416BSP中使用外部中断都是根据例子直接用的,没有查看那三个函数的内容,用起来没问题。
[/quote]

[quote]引用 2 楼 hao507 的回复:
if (irq <= IRQ_ADC) { // Use interrupt mask register if ((INREG32(&g_pIntrRegs->INTPND1) & (1 < INTPND1, 1 < INTMSK1, 1 < < irq); }
EINT0~EINT3对应的irq都小于IRQ_ADC,所以在这个地方处理。


BSP ISR已经处理好,楼主只管驱动的IST即可。
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表