[ZLG-ARM] 关于ZLG2200中断问题

[复制链接]
 楼主| houn 发表于 2008-4-20 22:41 | 显示全部楼层 |阅读模式
我使用的ZLG2200开发板(SMART&nbsp;2200),在做周立功SmartArm7ARM嵌入式系统实验教程(二)中2.14_外部中断实验1,按照书中代码做完源程序,调试发现不能响应中断,我第一次,我不知道为什么,请大家帮帮我,帮我看看是什么原因<br />代码是书中:<br />#include&nbsp;&quot;config.h&quot;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEPCON&nbsp;&nbsp;&nbsp;&nbsp;1&lt&lt7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;P0.7引脚控制B1,低电平蜂鸣,1&lt&lt7&nbsp;等价于&nbsp;0x80<br /><br />/****************************************************************************<br />*&nbsp;名&nbsp;&nbsp;&nbsp;&nbsp;称:IRQ_Eint3()<br />*&nbsp;功&nbsp;&nbsp;&nbsp;&nbsp;能:外部中断EINT3服务函数,取反B1控制口。<br />*&nbsp;入口参数:无<br />*&nbsp;出口参数:无<br />****************************************************************************/<br />void&nbsp;&nbsp;&nbsp;__irq&nbsp;IRQ_Eint3(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;i;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;IO0SET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;读取当前B1控制值<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(i&BEEPCON)==0&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;控制B1输出取反<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;BEEPCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;BEEPCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;(EXTINT&1&lt&lt3)!=0&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;=&nbsp;1&lt&lt3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除EINT3中断标志,1&lt&lt3&nbsp;等价于&nbsp;0x08<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;向量中断结束<br />}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />/****************************************************************************<br />*&nbsp;名&nbsp;&nbsp;&nbsp;&nbsp;称:main()<br />*&nbsp;功&nbsp;&nbsp;&nbsp;&nbsp;能:初始化外部中断3(EINT3)为非向量中断,并设置为电平触发模式,然后等待外部中断。<br />*&nbsp;说&nbsp;&nbsp;&nbsp;&nbsp;明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。<br />****************************************************************************/<br />int&nbsp;&nbsp;main(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;=&nbsp;3&lt&lt8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置管脚连接,P0.20设置为EINT3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;3&lt&lt8&nbsp;等价于&nbsp;0x00000180<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;=&nbsp;BEEPCON;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置B1控制口为输出,其它I/O为输入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;BEEPCON;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置EINT3中断为电平触发模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;打开EINT3中断(使用非向量IRQ)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置所有中断分配为IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;VICDefVectAddr&nbsp;=&nbsp;(int32)IRQ_Eint3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置中断服务程序地址<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;=&nbsp;1&lt&lt3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除EINT3中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&lt&lt17;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能EINT3中断,EINT3在Bit17上<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;等待中断<br />&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br />}<br />
armecos 发表于 2008-4-21 00:35 | 显示全部楼层

是不是跳线问题,

关于smartarm2200中断有很详细文档说明,里面有BEEP发声范例源码。<br /><b>ecos中断</b>
 楼主| houn 发表于 2008-4-21 07:19 | 显示全部楼层

其他附加说明

我反复看了程序,是和书中一样,设置也按照书中提示设置.只是我的FLASH&nbsp;start&nbsp;addr&nbsp;0x81000000,RAM&nbsp;start&nbsp;addr&nbsp;0x40000000,是不是我在H-FLASHER设置有问题呢,我用版本:H-FLASH0.60版本,
cs2132 发表于 2008-4-21 12:37 | 显示全部楼层

也许是这样

也许是当前模式中的中断没有使能,,<br /><br />你运行的时候看看CPSR中的I位,,是否被禁能了.<br /><br />
zhaoyingf 发表于 2008-4-21 14:03 | 显示全部楼层

给你个初始化例子看看

void&nbsp;EXINT2Init(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光耦中断<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;(&nbsp;PINSEL0&nbsp;&&nbsp;0x3FFFFFFF&nbsp;)&nbsp;|&nbsp;0x80000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连接P0.15为外部中断2<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE&nbsp;=&nbsp;0x0F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//边沿触发<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTPOLAR&nbsp;=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上升沿触发<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl9&nbsp;=&nbsp;0x20&nbsp;|&nbsp;0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//优先级9<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr9&nbsp;=&nbsp;(uint32)IRQ_EXINT2;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;0x10000;<br />}
song529110 发表于 2008-4-21 20:42 | 显示全部楼层

我也碰到了这样的问题

我也碰到了这样的问题<br />救命啊
 楼主| houn 发表于 2008-4-21 21:39 | 显示全部楼层

CPSR I位检查

我调试看了CPSR中的I位,允许中断啊,I位为0,还是不行,看来好要检查检查<br />FLASH设置如下;FLASH&nbsp;START&nbsp;ADDR&nbsp;0X81000000,RAM&nbsp;START&nbsp;ADDR&nbsp;0X40000000
zlgarm 发表于 2008-4-22 12:47 | 显示全部楼层

Re

houn&nbsp;&nbsp;您好:<br />我运行了您说的那个程序,结果是没有问题。在:“光盘内容ARM嵌入式系统实验教程(二)ADS集成开发环境及JTAG仿真器应用H-JTAG&nbsp;软件&nbsp;”这个目录下有两个.hfc文件,根据您是要在什么环境下调试,通过H-Flasher中的Load选项来选择不同文件,这样可以不用设置H-Flasher<br /><br />On&nbsp;duty&nbsp;:&nbsp;liuzhaofu
 楼主| houn 发表于 2008-4-22 16:13 | 显示全部楼层

谢谢提醒

谢谢你的提醒,我用H-JTAG6.0版本,是从网上下的,我今晚回去在好好调试一下,彻底找出问题在那里,然后把查找的结果放到BBS上.
zlgarm 发表于 2008-4-23 10:07 | 显示全部楼层

Re

houn&nbsp;&nbsp;您好:<br />在这要感谢您对网站的支持。<br />“彻底找出问题在那里,然后把查找的结果放到BBS上”<br />On&nbsp;duty&nbsp;:liuzhaofu
 楼主| houn 发表于 2008-4-23 20:21 | 显示全部楼层

周工,我调试结果如下

在这个中断实验中,我现在对中断进行调试,在调试&nbsp;EXTINT&nbsp;=&nbsp;1&lt&lt3;//&nbsp;清除EINT3中断标志这步中,我发现EXTINT设置1&lt&lt3值后,EXTINT还是为0,我是比较疑惑,设置低电平触发,EXTINT&nbsp;=&nbsp;1&lt&lt3后,EXTINT到底值是多少是对的,请周工说明
 楼主| houn 发表于 2008-4-24 21:00 | 显示全部楼层

中断问题的解决

谢谢大家和周工对我的关心,这个板子运行的中断程序没有错误,设置没有问题,一切都没有问题,问题在于我是搞软件出来,就是有点喜欢调试,同样也喜欢在中断程序调式,后来发现中断是不能调试.所以调试中断程序不会有任何反映,后来全速运行没有问题.中断能够响应.我就有个疑问,包含中断程序程序能不能调试,如果能调试,如何调试,请周工帮我解答
YeQishi 发表于 2008-4-24 23:43 | 显示全部楼层

re

在中断里设断点再全速就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

21

帖子

0

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

11

主题

21

帖子

0

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