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.

C6678中断寄存器IFR置位,清除与异常问题



各位专家:

中断的配置与触发我理解可分为以下三大部分(以keystone I C6678的可屏蔽中断为例):
部分1:完成 芯片内部外部事件 与 内核中断 的映射;
部分2:中断的各级使能(GIE,NMIE,IER)的配置;
部分3:中断处理函数ISR需填入中断向量表;

对于寄存器IFR的置位,清除与丢失的处理有以下几个问题请教:
1 在非软件人工置位的情况下(ISR寄存器),IFR寄存器如果产生置位,我理解肯定首先需要完成上述部分1的工作,问题在于上述部分2的工作对IFR的硬件置位有什么影响,即不开启中断使能的情况下,IFR是否会被硬件自动置位?
2 IFR寄存器的清除有两种情况:“If it is not the highest priority pending interrupt, IFm remains set until either you clear it by writing a 1 to bit m of ICR, or the processing of INTm occurs.” 即对应中断触发后硬件自动清除,或者软件人工清除。这里的描述是否涵盖了所有情况? 参考描述来源《C66x CPU and Instruction Set Reference Guide》
3 中断丢失的处理,即中断信号到达时,对应IFR仍然处于置位状态(即上一个中断事件还未被处理),这是中断丢失,对应描述“Each INTm input has a corresponding output that indicates if a low-to-high transition occurred on the input while the pending flag for that input had not yet been cleared. These outputs may be used by the interrupt controller to create an exception back to the CPU to notify the user of the missed interrupt. See the device-specific data manual to verify the device supports this feature.” 参考描述来源《C66x CPU and Instruction Set Reference Guide》。是否还有其他检测中断丢失的手段?
4 keystone I C6678对中断嵌套默认是关闭的,在软件设计过程中,如需要使用中断嵌套是否有对应的例程参考?

  • 1. 做好映射后,只要硬件上有中断发生,IFR相应的标志位就会置1,不会受部分2里的使能位影响。

    2. 这句话的意思如果这个中断发生时不是当前最高优先级的中断(如有其他高优先级的中断同时发生),那么这个中断是被pending的,IFR标志位是不会被清除的,需要手动清除。如果这个中断发生时是当前最高优先级的中断,那么这个中断会被响应,IFR自动清除。

    3. 分别对产生中断的事件和进中断处理函数的次数计数,看两者差。

    4. 可以参考CPU手册里的6.6.2 Nested Interrupts章节。

  • 2. 这句话的意思如果这个中断发生时不是当前最高优先级的中断(如有其他高优先级的中断同时发生),那么这个中断是被pending的,IFR标志位是不会被清除的,需要手动清除。如果这个中断发生时是当前最高优先级的中断,那么这个中断会被响应,IFR自动清除。

    假设系统中只有两类中断,如果低优先级中断事件达到,对应IFR被置位,但是由于优先级原因没有立即响应。请问,在当前高优先级中断处理完成后,会立刻响应在IFR内已经置位的低优先级中断吗?
  • 只要GIE, IER, IFR都还是使能的话,会响应低优先级中断。