ST意法半导体
直播中

张厉界

7年用户 232经验值
私信 关注
[问答]

请问我应该对irqIsrEnable()进行任何更改吗?

大家好,我正在使用SPC56EL60L3。
我正在做一些功能测试,有时我的应用程序会被卡住。
今天早上我发现它再次卡住,我看了一下使用调试器,我发现它超出了_ivor_exit(请看下图)
查看启动代码(ivor.s),我发现了以下代码,它看起来像是与ivor_exit相关的唯一代码。
#if(CORE_SUPPORTS_DECREMENTER == 1)
/ *

* _IVOR10处理程序(Book-E递减器)。
* /
.align 4
.globl _IVOR10
.type _IVOR10,@ function
_IVOR10:
/ *创建外部堆栈帧(extctx结构)。* /
e_stwu sp,-80(sp)/ * extctx结构的大小。* / e_stmvsrrw 8(sp)/ *保存PC,MSR。 * /

e_stmvsprw 16(sp)/ *保存CR,LR,CTR,XER。 * /
e_stmvgprw 32(sp)/ *保存GPR0,GPR3 ...... GPR12。 * // *复位TSR寄存器中的DIE位。* /

e_lis%r3,0x0800 / * DIS位掩码。 * /
mtspr 336,%r3 / * TSR寄存器。 * /#ifndef _SPC570Sxx_

/ *恢复IRQ前的MSR寄存器值。* /
mfSRR1%r0 / *没有抢占,保持EE禁用。* /

se_bclri%r0,16 / * EE =第16位。* /
mtMSR%r0
#endife_b _ivor_exit

#endif / * CORE_SUPPORTS_DECREMENTER * /阅读我发现的文档IVOR_10与递减中断有关。
据我所知,递减器可用于实现软件定时。
好吧,如果我不需要减量器(我不希望它的中断干扰我的应用程序怎么办?)。
还有一件事:
我在程序员手册上找到了以下句子:
''MSR [EE]也可以启用外部输入和递减中断。''(RM004,第272页)
看起来每当我在MSR寄存器中设置EE标志的中断时(我使用irqIsrEnable()为此),它也会启用递减中断。
如果我不希望启用递减的interruotys怎么办?
我应该对irqIsrEnable()进行任何更改吗?
谢谢。
问候
亚历山德罗

以上来自于谷歌翻译


以下为原文




Hello everyone, I'm working with SPC56EL60L3.
I'm doing some functional testing, and sometimes my application gest stuck.
This morning I found it stuck once again, I took a look using the debugger and I found it was exceuting _ivor_exit (please see the picture below)
Looking at the startup code (ivor.s), I found the following code, which looks like the only piece of code related to ivor_exit.
#if (CORE_SUPPORTS_DECREMENTER == 1)
/*

* _IVOR10 handler (Book-E decrementer).
*/
.align 4
.globl _IVOR10
.type _IVOR10, @function
_IVOR10:
/* Creation of the external stack frame (extctx structure).*/
e_stwu sp, -80(sp) /* Size of the extctx structure.*/e_stmvsrrw 8(sp) /* Saves PC, MSR. */

e_stmvsprw 16(sp) /* Saves CR, LR, CTR, XER. */
e_stmvgprw 32(sp) /* Saves GPR0, GPR3...GPR12. *//* Reset DIE bit in TSR register.*/

e_lis %r3, 0x0800 /* DIS bit mask. */
mtspr 336, %r3 /* TSR register. */#ifndef _SPC570Sxx_

/* Restoring pre-IRQ MSR register value.*/
mfSRR1 %r0/* No preemption, keeping EE disabled.*/

se_bclri %r0, 16 /* EE = bit 16. */
mtMSR %r0
#endife_b _ivor_exit

#endif /* CORE_SUPPORTS_DECREMENTER */Reading the documentation I found IVOR_10 is related to decrementer interrupt.
As far as I understand, decrementer can be used for implementing software timing.
OK, what if I don't need decrementer (and I don't want its interrupt to interfere with my application?).
One more thing:
I found the following sentence on the programmers manual:
''MSR[EE] also enables external input and decrementer interrupts.'' (RM004, page 272)
It looks like whenever I enable interrupts setting the EE flag in MSR register (I use irqIsrEnable(), for this), it also enables decrementer interrupts.
What If I don't want decrementer interruotys to be enabled?
Should I make any changes to irqIsrEnable()?
Thank you.
Regards
Alessandro

更多回帖

发帖
×
20
完善资料,
赚取积分