请问中断嵌套为什么cpu在中断级别低时,高的中断级别进不

yyb0034   2007-12-16 16:45 楼主
看过浪淘沙曾经的留言:
硬件的中断嵌套功能是指,当CPU响应某个中断请求时,处理该中断的过程,可以被软件中断级别比它高的中断所打断;在这里硬件的支持中断嵌套引入了一个软件中断级别的概念,通常我们说的中断级别称为硬件中断级别。

我在程序中,设定外部中断的优先级别为3(用于正反转计数) , 定时器的优先级别为1(用于显示),但当我在调试时发现,当程序在处理定时器中断时,
按浪淘沙的意思.外部中断可以嵌进去.但调试时发现外部中断确嵌套不了。

请那位DX说一下? 
 



 

回复评论 (6)

请楼主把你设置优先级别的代码贴出来

同时把你进入终端程序是的程序部分也贴出来。

自己可以在调试时在定时器中断中看看当前的中断级别是多少,即状态寄存器的I0和I1位。
点赞  2007-12-16 17:46

也许进中断后中断已经被关闭了?或者它干脆就不支持嵌套

                                  
点赞  2007-12-16 17:47

圈圈说的有一定道理,请问LZ你用的是哪一款芯片?

                                 不是所有ST7的单片机都支持中断嵌套,请参考相应的数据手册。
点赞  2007-12-16 17:52

谢谢香水城,圈圈,程序始下,请帮我看一下.

片子, STR710f
外部中断的程序始下:


//XTI peripheral configuration
////==================================================
void Set_XTI(void)
{  
    GPIO_Config(GPIO1, 0x4000, GPIO_IN_TRI_TTL);    // 

    XTI_Init();                                        // 
    XTI_LineModeConfig(XTI_Line8, XTI_FallingEdge);    // 
    XTI_LineConfig(XTI_Line8, ENABLE);                // 
    XTI_ModeConfig(XTI_Interrupt, ENABLE);

    EIC_IRQChannelPriorityConfig(XTI_IRQChannel,3); //priority to 3 
    EIC_IRQChannelConfig(XTI_IRQChannel,ENABLE);    // 
    EIC_IRQConfig( ENABLE );                        // 
      
}

///timer1 设定始下

//时间为100ms  PWM 
  void init_time1(void)
{
    EIC->SIR[19] |= 0x00000001;   // channel 19 priority 1
    EIC->IER |= 1<<19;            // Enable interrupt on channel 19
    EIC->ICR |= 0x00000001;       // Enable interrupts


    TIM1->OCAR=5000/2 ; 
    TIM1->OCBR=10000-5;
  
    TIM1->CR2  = 0x0800;  // Enable interrupt and prescale=7
    TIM1->CR2 |=19; 
  
    TIM1->CR1  = 0x8000;  // Enable counter 
    
    TIM1->CR1 |=1<<4;    //PWM 
        
    TIM1->CNTR = 0x1000;  // Any value written to this Reg results r
 
}

 ///定时中断程序如下:
 void T1TIMI_IRQHandler(void)
{
   
     TIM1->SR &= ~0x0800;    //Clear the TIM1 interrupt flag
    while(1)   //等候外部中断进入
   {  

     time1_deal_bit=10;    
     
         
   }  
     

   
}
  


///////外部计数中断
void XTI_IRQHandler(void)
{
  

//void XTI_IRQHandler(void)
//{
    u16 XTI_Pend;
    
   
    XTI_Pend = XTI_InterruptLineValue();
    if (XTI_Pend & 0x0100) {
       XTI_PendingBitClear(0x0100);                        // Clear t
                            }
    
     Display(8);   //显示一个数字
    
     
}


我看了CPSR 的I F 标志都为0,请dx指点.




 
点赞  2007-12-16 18:55

一进入IRQ之后,I标志就会由硬件自动置1的吧...

                                  
点赞  2007-12-16 19:10

LZ怎么现在才说是STR710F,我还以为是ST7

                                 等上班后有人会来看看。
点赞  2007-12-16 19:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复