打印

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

[复制链接]
2599|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhq_0510|  楼主 | 2007-12-16 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看过浪淘沙曾经的留言:
硬件的中断嵌套功能是指,当CPU响应某个中断请求时,处理该中断的过程,可以被软件中断级别比它高的中断所打断;在这里硬件的支持中断嵌套引入了一个软件中断级别的概念,通常我们说的中断级别称为硬件中断级别。

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

请那位DX说一下? 
 



 
沙发
香水城| | 2007-12-16 17:46 | 只看该作者

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

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

自己可以在调试时在定时器中断中看看当前的中断级别是多少,即状态寄存器的I0和I1位。

使用特权

评论回复
板凳
computer00| | 2007-12-16 17:47 | 只看该作者

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

使用特权

评论回复
地板
香水城| | 2007-12-16 17:52 | 只看该作者

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

不是所有ST7的单片机都支持中断嵌套,请参考相应的数据手册。

使用特权

评论回复
5
zhq_0510|  楼主 | 2007-12-16 18:55 | 只看该作者

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

片子, 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指点.




 

使用特权

评论回复
6
computer00| | 2007-12-16 19:10 | 只看该作者

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

使用特权

评论回复
7
香水城| | 2007-12-16 19:35 | 只看该作者

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

等上班后有人会来看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

120

帖子

2

粉丝