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

[复制链接]
2468|8
 楼主| dadong 发表于 2008-7-26 17:33 | 显示全部楼层 |阅读模式
我看到一个程序,是个用按键控制灯亮的程序,按键是连在extint4567引脚上的<br />在main函数里,调用了keyledtest()函数<br /><br />void&nbsp;KeyLedTest&nbsp;(void)<br />{<br />&nbsp;&nbsp;U32&nbsp;dwVal;<br /><br />&nbsp;&nbsp;//设置IO&nbsp;口PORT&nbsp;G<br />&nbsp;&nbsp;rPCONG&nbsp;|=&nbsp;0xff00;<br /><br />&nbsp;&nbsp;//设置中断<br />&nbsp;&nbsp;rINTMOD&nbsp;&=&nbsp;~MASK_BIT(21);<br />&nbsp;&nbsp;rINTCON&nbsp;&=&nbsp;~MASK_BIT(1);<br /><br />&nbsp;&nbsp;//设置EXTINT4,5,6,7中断模式,我们这里使用低电平触发<br />&nbsp;&nbsp;rEXTINT&nbsp;&=&nbsp;0xffff;&nbsp;&nbsp;&nbsp;&nbsp;//先清除EXTINT4,5,6,7的相应设置bit位<br /><br />&nbsp;&nbsp;for&nbsp;(;;)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;dwVal&nbsp;=&nbsp;rINTPND;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((dwVal&nbsp;&&nbsp;MASK_BIT(21))&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//EXTINTPND&nbsp;寄存器,判断是哪个外部中断触发<br />&nbsp;&nbsp;&nbsp;&nbsp;dwVal&nbsp;=&nbsp;rEXTINTPND;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((dwVal&nbsp;&&nbsp;MASK_BIT(EXTINT4))&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rEXTINTPND&nbsp;|=&nbsp;MASK_BIT(EXTINT4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断4&nbsp;产生了,点亮LED1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysUtilsLightLed&nbsp;(LED1,&nbsp;TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((dwVal&nbsp;&&nbsp;&nbsp;MASK_BIT(EXTINT5))&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rEXTINTPND&nbsp;|=&nbsp;MASK_BIT(EXTINT5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断4&nbsp;产生了,点亮LED2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysUtilsLightLed&nbsp;(LED2,&nbsp;TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((dwVal&nbsp;&&nbsp;&nbsp;MASK_BIT(EXTINT6))&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rEXTINTPND&nbsp;|=&nbsp;MASK_BIT(EXTINT6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断4&nbsp;产生了,点亮LED3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysUtilsLightLed&nbsp;(LED3,&nbsp;TRUE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((dwVal&nbsp;&&nbsp;&nbsp;MASK_BIT(EXTINT7))&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rEXTINTPND&nbsp;|=&nbsp;MASK_BIT(EXTINT7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//外部中断4&nbsp;产生了,点亮LED1,2,3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysUtilsLightLed&nbsp;(LED_ALL,&nbsp;FALSE);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//最后清除中断位<br />&nbsp;&nbsp;&nbsp;&nbsp;//rI_ISPC&nbsp;|=&nbsp;MASK_BIT(21);<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC&nbsp;=&nbsp;dwVal;<br />&nbsp;&nbsp;}<br />}<br /><br /><br /><br />可是,我怎么就知道这个keyledtest就是中断函数,而不是普通函数?<br /><br />在51里,可以用interrupt来标明这个函数是中断函数,可是在这里,没看到任何标识啊,这是怎么回事?
yewuyi 发表于 2008-7-26 17:42 | 显示全部楼层

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

电平中断使用了查询方式。。。<br /><br /><br />这只是个普通函数,不是中断函数,估计只是定时调用一下而已。。。
 楼主| dadong 发表于 2008-7-26 17:59 | 显示全部楼层

re

噢,有道理,main()函数里是直接调用keyledtext函数的,那么这个应该就是一个普通函数了,不是中断函数,多谢。
walnutcy 发表于 2008-7-26 23:47 | 显示全部楼层

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

看题目我都懒得回答,,现在的人咋回事?<br /><br />以为别人答问题要回报??<br /><br />
古道热肠 发表于 2008-7-27 10:29 | 显示全部楼层

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

不要范经验主义的错误,不能因为拥有51的开发经验,把其它的开发环境想象成一样的,您的这问题在书中肯定有答案.换个开发环境,就是要注意它与原来不同的地方.<br />&nbsp;&nbsp;&nbsp;哈哈,PC机的中断服务程序,您想用哪个函数都可以,是是中断向量来变址跳转的.
 楼主| dadong 发表于 2008-7-27 17:32 | 显示全部楼层

re

俺也是无奈之举啊,这年头,不写个找骂的题目,谁看我的帖子啊
后学 发表于 2008-7-28 08:11 | 显示全部楼层

re

OS中一般是注册中断,把中断号和中断处理函数绑定,并设定一些参数,<br /><br />Linux&nbsp;内核提供了两个注册中断处理函数的接口:setup_irq和request_irq;<br />vxWorks中一般用intConnect;<br /><br />细节问题自己去查,网上也有示例代码。。。
Again_gyf 发表于 2008-7-28 08:26 | 显示全部楼层

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

ARM里面的中断是要绑定的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

173

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部