打印

谁帮我解答这个问题我就选谁当版主

[复制链接]
1725|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dadong|  楼主 | 2008-7-26 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我看到一个程序,是个用按键控制灯亮的程序,按键是连在extint4567引脚上的
在main函数里,调用了keyledtest()函数

void KeyLedTest (void)
{
  U32 dwVal;

  //设置IO 口PORT G
  rPCONG |= 0xff00;

  //设置中断
  rINTMOD &= ~MASK_BIT(21);
  rINTCON &= ~MASK_BIT(1);

  //设置EXTINT4,5,6,7中断模式,我们这里使用低电平触发
  rEXTINT &= 0xffff;    //先清除EXTINT4,5,6,7的相应设置bit位

  for (;;)
  {
    dwVal = rINTPND;    
    if ((dwVal & MASK_BIT(21)) == 0)
    {
      continue;
    }

     //EXTINTPND 寄存器,判断是哪个外部中断触发
    dwVal = rEXTINTPND;

    if ((dwVal & MASK_BIT(EXTINT4)) != 0)
    {
      rEXTINTPND |= MASK_BIT(EXTINT4);
      //外部中断4 产生了,点亮LED1
      sysUtilsLightLed (LED1, TRUE);
    }

    if ((dwVal &  MASK_BIT(EXTINT5)) != 0)
    {
      rEXTINTPND |= MASK_BIT(EXTINT5);
      //外部中断4 产生了,点亮LED2
      sysUtilsLightLed (LED2, TRUE);
    }

    if ((dwVal &  MASK_BIT(EXTINT6)) != 0)
    {
      rEXTINTPND |= MASK_BIT(EXTINT6);
      //外部中断4 产生了,点亮LED3
      sysUtilsLightLed (LED3, TRUE);
    }

    if ((dwVal &  MASK_BIT(EXTINT7)) != 0)
    {
      rEXTINTPND |= MASK_BIT(EXTINT7);
      //外部中断4 产生了,点亮LED1,2,3
      sysUtilsLightLed (LED_ALL, FALSE);
    }
    //最后清除中断位
    //rI_ISPC |= MASK_BIT(21);
    rI_ISPC = dwVal;
  }
}



可是,我怎么就知道这个keyledtest就是中断函数,而不是普通函数?

在51里,可以用interrupt来标明这个函数是中断函数,可是在这里,没看到任何标识啊,这是怎么回事?

相关帖子

沙发
yewuyi| | 2008-7-26 17:42 | 只看该作者

应该就是一种利用IO电平中断做按键检测而已把。。。

电平中断使用了查询方式。。。


这只是个普通函数,不是中断函数,估计只是定时调用一下而已。。。

使用特权

评论回复
板凳
dadong|  楼主 | 2008-7-26 17:59 | 只看该作者

re

噢,有道理,main()函数里是直接调用keyledtext函数的,那么这个应该就是一个普通函数了,不是中断函数,多谢。

使用特权

评论回复
地板
walnutcy| | 2008-7-26 23:47 | 只看该作者

44b0x开发板例程都有的,随便down一个就好了

看题目我都懒得回答,,现在的人咋回事?

以为别人答问题要回报??

使用特权

评论回复
5
古道热肠| | 2008-7-27 10:29 | 只看该作者

楼主问问题态度不端正,这样不好

不要范经验主义的错误,不能因为拥有51的开发经验,把其它的开发环境想象成一样的,您的这问题在书中肯定有答案.换个开发环境,就是要注意它与原来不同的地方.
   哈哈,PC机的中断服务程序,您想用哪个函数都可以,是是中断向量来变址跳转的.

使用特权

评论回复
6
dadong|  楼主 | 2008-7-27 17:32 | 只看该作者

re

俺也是无奈之举啊,这年头,不写个找骂的题目,谁看我的帖子啊

使用特权

评论回复
7
后学| | 2008-7-28 08:11 | 只看该作者

re

OS中一般是注册中断,把中断号和中断处理函数绑定,并设定一些参数,

Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq;
vxWorks中一般用intConnect;

细节问题自己去查,网上也有示例代码。。。

使用特权

评论回复
8
Again_gyf| | 2008-7-28 08:26 | 只看该作者

不要用固有的思想来考虑新事物!

ARM里面的中断是要绑定的!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

173

帖子

0

粉丝