请教如何禁止,启动arm irq fiqQ

12164人阅读
FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。
一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,为了合理,要求系统更快响应,自身处理所耗时间也很短的中断设置为FIQ,否则就设置了IRQ。
如果该中断设置为了IRQ,那么当该中断产生的时候,中断处理器通过IRQ请求线告诉ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。
简单的对比的话就是FIQ比IRQ快,为什么快呢?
<span style="color:#:ARM的FIQ模式提供了更多的banked寄存器,r8到r14还有SPSR,而IRQ模式就没有那么多,R8,R9,R10,R11,R12对应的banked的寄存器就没有,这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些&#20540;到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快。
<span style="color:#:FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。
3:FIQ的中断向量地址在0x0000001C,而IRQ的在0x。(也有的在FFFF001C以及FFFF0018),写过完整汇编系统的都比较明白这点的差别,18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。
4:IRQ和FIQ的响应延迟有区别
IRQ的响应并不及时,从Verilog仿真来看,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。&
&中断延迟:从外部中断请求信号发出到执行对应的中断服务程序ISR的第一条指令所需要的时间。通过软件程序设计来缩短中断延迟的方法有:中断优先级和中断嵌套。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:287359次
积分:3529
积分:3529
排名:第8381名
原创:50篇
转载:126篇
评论:29条
(5)(3)(9)(8)(2)(1)(3)(2)(1)(3)(1)(13)(20)(1)(1)(2)(4)(7)(4)(3)(12)(11)(3)(9)(1)(2)(5)(7)(2)(2)(3)(2)(8)(17)(1)(1)21ic官方微信-->
后使用快捷导航没有帐号?
查看: 1592|回复: 13
如何开了一个FIQ的情况下再开其它的IRQ
&&已结帖(0)
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
在只开FIQ或IRQ时,都正常,但同时开时,只有FIQ,却没有IRQ,请高手指教,如何才能让其都产生中断.我的程序如下://T0为匹配0的中断,FIQ&&&&&&&&&T0PR&=&0;&&&&T0MCR&=0x03;&&&&T0MR0&=Fpclk/20000;&&&&&&&&&FIQEnable();&&&//快中断使能&&&&VICIntSelect&=&VICIntSelect|(1&lt&lt4);&&//FIQ&&&&VICIntEnable&=&VICIntEnable|(1&lt&lt4);&&&&T0TCR&=0x01;&&&&//开计数器&&&&&&&&&&&&&//T1为匹配0的中断,IRQ&&&&&&&&&T1TC&=&0;&&&&&&&&//清T1&&&&T1PR&=&0;&&&&&&&&//预分频&&&&T1CTCR&=&0;&&&&&&&&//T1为定时器&&&&T1MCR&=&0x03;&&&&//T1MR0匹配后复位,并产生中断&&&&T1MR0&=&Fpclk/1000;//初始频率为1000Hz&&&&T1TCR&=&0x03;&&&&//复位&&&&IRQEnable();&&&&&&&&&&&&//中断使能&&&&&&&&VICIntSelect&=&0x00;&&&&//分配为IRQ&&&&VICVectCntl0&=&0x20|0x05;&&&&//分配优生级&&&&VICVectAddr0=(uint32)T1MC0;//设置中断地址&&&&VICIntEnable&=&VICIntEnable|(1&lt&lt5);&&&&//开T1匹配0中断&&&&T1TCR&=0x01;&&&&//开计数器//T1&MR0匹配中断函数&&&&&&&&&void&__irq&T1MC0(void)&&&&&{&&&&&&&&&&&&T1IR&=&1&lt&lt0&;//清中断&&&&T1MR0&=&Fpclk/500;//设定速度&&&&&&&&&&&&VICVectAddr=0x00;//向量中断处理结束&&&&&&&&}//FIQ的中断函数&&&&&&&&void&FIQ_Exception(void){&&&&//while(1);&&&&&&&&&&&&&&&&&&&//&change&it&to&your&code&&这一句替换为自己的代码&&&&&&&&LEDON();&&&&T0IR&=0x01;&&&&&&&&//清中断标志&&&&LEDOFF();&&&&&&&&&&&&}
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
w_ang&:&&&&IRQEnable()最终是跳到启动文件里的IRQEnable执行;&&&&FIQDisable()最终是跳到启动文件里的FIQDisable执行。&&&&如您所见,这两个操作是彼此互斥的。&&&&您可以自己参照着启动文件和IRQEnable()的写法,写一个软中断,令CPSR使能IRQ和FIQ中断。&&&&&&&&&&IRQEnable&&&&&&&&;开IRQ中断&&&&&&&&MRS&&&R0,&SPSR&&&&&&&&BIC&&&R0,&R0,&#NoInt&&&&&&&&MSR&&&SPSR_c,&R0&&&&&&&&MOVS&&&&PC,&LR&&&&&&&&FIQDisable&&&&&&&&;关FIQ中断&&&&&&&&MRS&&&&&R0,&SPSR&&&&&&&&ORR&&&&&R0,&R0,&#NoFIQ&&&&&&&&MSR&&&&&SPSR_c,&R0&&&&&&&&MOVS&&&&PC,&LR
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
多谢!我试试
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
忙了一晚上,也没搞定,还望周工指教
1.可不可以同时开一个FIQ,多个IRQ?2.FIQ可不可以中断正在执行的IRQ?3.如何实现?是不是在LPC213X的模板下只能采用软中断(IRQ)中修改CPSR?在STARTUP.S中&&&&&&&;设置系统模式堆栈&&&&&&&&MSR&&&&&CPSR_c,&#0x0f&&&;开F&I&&&&&&&&LDR&&&&&SP,&=StackUsr&&&&&&&&MOV&&&&&PC,&R0只修改此处,而不再调用IRQ_Enable()和FIQ_Enable()为什么程序只产生前述程序中的T0中断而没有T1的中断,且主程序不能再运行.
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
1:可以;如果这都无法实现,那么FIQ相对于IRQ的高优先级还有意义吗?2:可以。首先,如果要求可以同时允许FIQ和IRQ,那么必要条件是CPSR里允许了FIQ和IRQ中断。调试一下您的程序,确保这个必要条件,问题的核心是让CPSR同时令FIQ和IRQ使能,看看是程序哪个地方破坏了这个条件。做了试验才知道,先往这个方向试一下吧。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
用两种方式都可以,1.修改STARTUP.S中的&&&&&&&;设置系统模式堆栈&&&&&&&&MSR&&&&&CPSR_c,&#0xdf&&&;关F&I为&&&&&&MSR&&&&&CPSR_c,&#0x1f&&&;开F&I2.象1楼的程序,不改.只是编译方式由DebugInFlash改为RelInFlash,就可以了,是不是模板中有BUG?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实际也可以控制VICIntEnable
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
技术总监, 积分 22808, 距离下一级还需 27192 积分
w_ANG:&&&&问题解决九号!或许有BUG。欢迎您调试出来告诉我们,我们好改进!谢谢。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
我想问一下,FIQ和IRQ的区别,楼主能给解释一下吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
lijing1982 :FIQ快中断,主要特点就是一个字:(响应)快.
FIQ快中断,主要特点就是一个字:(响应)快.次要特点:可以中断正在执行的IRQ.IRQ就是没有这两特点的中断了,你能明的吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
谢谢你的回答,这个我理解了!!但是ZLG出的一本书上讲,FIQ最好设置成一个,要不会影响时间的,是吗?我觉的一般的中断设置成IRQ就可以了,是不是不用设置成FIQ;在什么情况下需要设置,举个例子好吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 230, 距离下一级还需 70 积分
中级技术员, 积分 230, 距离下一级还需 70 积分
TO:lijing1982
是这样的,在我的应用中有一个信号实时性的要求特别高,我觉着最好的办法就是让一个FIQ来响应它.所以我这样用了.
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
好的,谢谢!!有机会向你请教!!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
我想问一下,分布装载描述文件是bootloader吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
热门推荐 /2TMS570LS1227 关于IRQ FIQ中断问题的咨询 - Hercules(TM) ARM(R)安全微控制器 - 德州仪器在线技术支持社区
TMS570LS1227 关于IRQ FIQ中断问题的咨询
发表于1月前
<input type="hidden" id="hGroupID" value="40"
&p>& & & & 我在使用&a href=&.cn/product/cn/TMS570LS1227& target=&extwin&>TMS570LS1227&/a>的时候,关于IRQ跟FIQ有个疑问想咨询。&/p>
&p>& & & & 1. &当前我将RTI Compare0设置为FIQ(1ms定时),CAN1 HIGH 设置为IRQ, 在程序里通过Can1 对收到的报文进行处理再响应。&/p>
&p>当我单次慢速(手点)收发报文的时候,程序是正常的,但是当我进行大量数据收发测试(1ms 上位机连续发100次)的时候,程序会进入&prefetchEntry 异常。&/p>
&p>& & & & &2. 当我将将RTI Compare0设置为FIQ,CAN1 HIGH 设置为FIQ,进行上述工程试验,一切收发正常;&/p>
&p>& & & & 3. &当我将将RTI Compare0设置为IRQ,CAN1 HIGH 设置为IRQ,进行上述工程试验,一切收发正常;&/p>
&p>& & & & 然后我翻看了user guide,看到了15.2.2这段话,在我标注的红框处及手册上了解到:&/p>
&p>& & & & & & & &1). 当有IRQ中断触发时,会失能其他的IRQ中断,&/p>
&p>& & & & & & & &2). 当有FIQ中断触发时,会失能所有的IRQ和其他的FIQ中断,&/p>
&p>& & & & & & & 3).FIQ的中断优先级比IRQ的高,并且会打断IRQ的中断,优先执行FIQ中断。&/p>
&p>& & & & & & & 4).同样的FIQ或IRQ中断,不会打断相同的FIQ或IRQ中断(因为当有中断时,其他同类的中断会失能);&/p>
&p>看完VIM这章节的资料 后,我对上述进入异常问题的理解如下:&/p>
&p>& & & & &1. 当我全部配置成IRQ或FIQ时,因为1.2.4点,同类的中断并不会响应,需要等当前中断程序执行完毕;&/p>
&p>& & & & &2. 当配置的IRQ中断里有FIQ的话, 当有FIQ中断出现后,FIQ中断会打断IRQ中断的执行,并失能被打断的IRQ,&/p>
&p>直到FIQ中断执行完成后,才会转到被中断的IRQ中断中继续执行。&/p>
&p>上述是我对我遇到的问题及手册的理解。&/p>
&p>然后我想问的问题是:当(RTI)FIQ打断(CAN1)IRQ中断时,如果在(RTI)FIQ中断还没执行完的时候,被打断的(CAN1)IRQ又触发了一次中断,此时,IRQ中断及其中断处理函数是怎么处理的? &这个是会造成我CAN1收发会进入异常的原因么?&&/p>
&p>下面是手册文档,及我发生异常时的CP15的寄存器的值。&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/70/1307.qa.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/70/1307.qa.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/70/6232.qa2.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/70/6232.qa2.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/70/3513.qa3.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/70/3513.qa3.png& border=&0& alt=& &>&/a>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/70/1307.qa.png&>&/a>&/p>
&p>&div style=&clear:&>&/div>" />
TMS570LS1227 关于IRQ FIQ中断问题的咨询
此问题尚无答案
All Replies
& & & & 我在使用的时候,关于IRQ跟FIQ有个疑问想咨询。
& & & & 1. &当前我将RTI Compare0设置为FIQ(1ms定时),CAN1 HIGH 设置为IRQ, 在程序里通过Can1 对收到的报文进行处理再响应。
当我单次慢速(手点)收发报文的时候,程序是正常的,但是当我进行大量数据收发测试(1ms 上位机连续发100次)的时候,程序会进入&prefetchEntry 异常。
& & & & &2. 当我将将RTI Compare0设置为FIQ,CAN1 HIGH 设置为FIQ,进行上述工程试验,一切收发正常;
& & & & 3. &当我将将RTI Compare0设置为IRQ,CAN1 HIGH 设置为IRQ,进行上述工程试验,一切收发正常;
& & & & 然后我翻看了user guide,看到了15.2.2这段话,在我标注的红框处及手册上了解到:
& & & & & & & &1). 当有IRQ中断触发时,会失能其他的IRQ中断,
& & & & & & & &2). 当有FIQ中断触发时,会失能所有的IRQ和其他的FIQ中断,
& & & & & & & 3).FIQ的中断优先级比IRQ的高,并且会打断IRQ的中断,优先执行FIQ中断。
& & & & & & & 4).同样的FIQ或IRQ中断,不会打断相同的FIQ或IRQ中断(因为当有中断时,其他同类的中断会失能);
看完VIM这章节的资料 后,我对上述进入异常问题的理解如下:
& & & & &1. 当我全部配置成IRQ或FIQ时,因为1.2.4点,同类的中断并不会响应,需要等当前中断程序执行完毕;
& & & & &2. 当配置的IRQ中断里有FIQ的话, 当有FIQ中断出现后,FIQ中断会打断IRQ中断的执行,并失能被打断的IRQ,
直到FIQ中断执行完成后,才会转到被中断的IRQ中断中继续执行。
上述是我对我遇到的问题及手册的理解。
然后我想问的问题是:当(RTI)FIQ打断(CAN1)IRQ中断时,如果在(RTI)FIQ中断还没执行完的时候,被打断的(CAN1)IRQ又触发了一次中断,此时,IRQ中断及其中断处理函数是怎么处理的? &这个是会造成我CAN1收发会进入异常的原因么?&
下面是手册文档,及我发生异常时的CP15的寄存器的值。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.您浏览的页面不存在
我的图书馆
信息提示:
您要浏览的文章不存在,5秒后将自动跳转到“360doc个人图书馆”的首页,您可以继续浏览其它好文章,也可以&
&当前页面。}

我要回帖

更多关于 如何禁止开机启动项 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信