看过浪淘沙曾经的留言:
硬件的中断嵌套功能是指,当CPU响应某个中断请求时,处理该中断的过程,可以被软件中断级别比它高的中断所打断;在这里硬件的支持中断嵌套引入了一个软件中断级别的概念,通常我们说的中断级别称为硬件中断级别。
我在程序中,设定外部中断的优先级别为3(用于正反转计数) , 定时器的优先级别为1(用于显示),但当我在调试时发现,当程序在处理定时器中断时,
按浪淘沙的意思.外部中断可以嵌进去.但调试时发现外部中断确嵌套不了。
请那位DX说一下?
请楼主把你设置优先级别的代码贴出来
同时把你进入终端程序是的程序部分也贴出来。
自己可以在调试时在定时器中断中看看当前的中断级别是多少,即状态寄存器的I0和I1位。
也许进中断后中断已经被关闭了?或者它干脆就不支持嵌套
圈圈说的有一定道理,请问LZ你用的是哪一款芯片?
不是所有ST7的单片机都支持中断嵌套,请参考相应的数据手册。
谢谢香水城,圈圈,程序始下,请帮我看一下.
片子, 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指点.
一进入IRQ之后,I标志就会由硬件自动置1的吧...
LZ怎么现在才说是STR710F,我还以为是ST7
等上班后有人会来看看。