he119 发表于 2008-8-21 09:57

ARM7进中断

我的板是S3C44B0,<br />我写了一个定时器中断程序,可是不管怎么样都进不了中断,后来我写了一个和书本上要模一样的程序也不能进中断,这是什么原因?<br /><br /><br />我自己写的程序如下,希望大家多多指教!<br /><br />#include&quot;INC/44B.H&quot;<br />#include&quot;INC/OPTION.H&quot;<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br /><br /><br /><br /><br />unsigned&nbsp;char&nbsp;LED=0;<br />uchar&nbsp;i=0;<br />uchar&nbsp;a=0;<br />uchar&nbsp;c=0;<br /><br /><br /><br /><br />void&nbsp;&nbsp;__irq&nbsp;Time_Do(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;asdf;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_TIMER0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(LED)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;rPDATC=rPDATC&(1&lt&lt1);c=1;LED++;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;rPDATC=rPDATC&(1&lt&lt2);c=1;;LED++;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;rPDATC=rPDATC&(1&lt&lt3);c=1;;LED=0;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:LED=0;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br /><br /><br /><br />void&nbsp;Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//rPDATC=0X0000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置LED为熄灭状态<br />&nbsp;&nbsp;&nbsp;&nbsp;//rPCONC=0X5555;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LED的设置<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;pISR_TIMER0=(int)Time_Do;<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK=~(BIT_GLOBAL|BIT_TIMER0);&nbsp;&nbsp;&nbsp;&nbsp;//开中断屏蔽<br />&nbsp;&nbsp;&nbsp;&nbsp;//rINTCON=0X5;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG0=0x0ff;&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;rTCFG1=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;//1/32<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCNTB0=0XFFFF;&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;rTCON=0X02;&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;rTCON=0X01;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*rTCFG0=0xa4;//MLCK/{32*(164+1)}=1.25*1000,预分频值为164<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG1=0X04;//除法器值为32<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCNTB0=0X04e2;//总定时为0.1S<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCON=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCON=0X09;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;a=3;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />Main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />有些变量是后来调试加上去的!

dld2 发表于 2008-8-21 10:25

re

没有跑飞吗?<br /><br />CPSR里面有IRQ和FIQ的开关,看看在boot程序里是否打开了。

he119 发表于 2008-8-21 10:36

中断

默认不是IRQ吗?

dadong 发表于 2008-8-23 12:36

re

&nbsp;rI_ISPC=BIT_TIMER0;实在Time_D0函数里,还是应该在init函数里,我猜的

he119 发表于 2008-8-23 15:57

在Time_D0函数里

这个是进了中断后才除掉的

armecos 发表于 2008-8-24 07:33

中断出问题的几率太大了,

稍不留神就出错,根本原因就是对中断理解不全面,细节处理不到位,按照以下万能模板的步骤操作,能保证你不犯低级错误,一次就成功,而且极度抽象,适合各种体系架构的中断系统。<br />详见《ecos中断》<br /><br /><b>更多内容,详见:</b><br /><b>《培训系列“丛书”》</b><br /><b>www.armecos.com</b><br />-----------------------------------<br /><b>More&nbsp;details,&nbsp;see:</b><br /><b>《&quot;Series&nbsp;Books&quot;&nbsp;of&nbsp;Training》</b><br /><b>www.armecos.com</b>

he119 发表于 2008-8-25 18:27

只有《ecos增值包》这本书吧

怎么没有看见呢,只有---《ecos增值包》这本书吧!

armecos 发表于 2008-8-25 22:14

最新最完整版本,请访问www.armecos.com

页: [1]
查看完整版本: ARM7进中断