主题中讨论的其他器件:SEGGER
您好!
我正在寻找一种解决方案或方法来获取当前运行的 ISR 的索引-就我已经检查过的情况 而言、使用 ISRINDEX 或 FIQINDEX 寄存器是不可能实现的、因为当处理活动 ISR 时、它们可能会被取代。
是否有任何解决方案?
最棒的
Grzegorz
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在寻找一种解决方案或方法来获取当前运行的 ISR 的索引-就我已经检查过的情况 而言、使用 ISRINDEX 或 FIQINDEX 寄存器是不可能实现的、因为当处理活动 ISR 时、它们可能会被取代。
是否有任何解决方案?
最棒的
Grzegorz
在读取模块的中断偏移寄存器或写入标志寄存器(例如 gioREG->OFF1、 canREG1->INT 和 rtiREG1->INTFLAG)后、ISRINDEX 被清除。
您可以在读取模块的中断偏移寄存器之前读取 ISRINDEX 寄存器。
void gioHighLevelInterrupt (void)
{
uint32 index = vimREG->IRQINDEX;
uint32 offset = gioREG->OFF1;
这仍然不是我要找的。
正如您提到的、ISRINDEX 报告最高挂起中断的索引、我想知道在当前 ISR 例程中我所处的 ISR。
示例:
void lowPrioIsr (void){
//HighPrioIsr 正在挂起
int isrIndex = WhereIAm();//报告 LowPrioIsr
}
void HighPrioIsr (void){
int isrIndex = WhereIAm();//reports HighPrioIsr 索引
}
您好!
另一种方法是手动获取 VIM 矢量表的索引:
typedef enum _INT_Index
{
ESM_High =0、
RSVED1、
RTI_COMP0、 //2
RTI_COMP1、 //3
,。
Gio_High、 //9
(笑声)
} intIndex_t;
#pragma CODE_STATE (gioHighLevelInterrupt、32)
#pragma INTERRUPT (gioHighLevelInterrupt、IRQ)
/* sourceId:gio_sourceId_011 */
/* DesignId:GIO_DesignId_011 */
/*要求:HL_SR35、HL_SR36 */
void gioHighLevelInterrupt (void)
{
uint32 offset = gioREG->OFF1;
/*用户代码开始(14)*/
intindex_t interrupt_index = GIO_HIGH;
/*用户代码结束*/