本帖最后由 yuyouliang 于 2016-12-6 11:12 编辑
我用的芯片型号是STM8S207R8,固件库是V2.2.0。编译环境为IAR 2.20.1.现在在进行外部中断实验。有两个按键,分别连接到了PA3和PB1,靠外部中断下降沿的方式触发。
但奇怪的现象来了,我没有对这两个外部中断设置软件优先级,应该默认都是3级。按照数据手册的说法,软件级别相同的外部中断,不应该相互打断,也就是不发生中断嵌套。
但实测是:PA3的中断能打断PB1的中断,但PB1的中断却不能打断PA3的中断,即发生了中断嵌套。
请问各位大神有碰到类似的现象,可否指点迷津?拜谢了。
整套的工程文件见附件。
下述是关键部分代码。
这是key.c文件的代码:
[mw_shl_code=cpp,true]#include "key.h"
void EXTI_KEY_Init(void) //PB1
{
EXTI_SetExtIntSensitivity(EXTI_KEY_PORT,EXTI_SENSITIVITY_FALL_ONLY);
GPIO_Init(KEY_PORT, KEY_PIN, GPIO_MODE_IN_PU_IT);
}
void button_init(void) //PA3
{
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA,EXTI_SENSITIVITY_FALL_ONLY);
GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_IN_PU_IT);
}[/mw_shl_code]
这是main.c文件的代码:
[mw_shl_code=c,true]#include "stm8s.h"
#include "led.h"
#include "key.h"
#include "stm8s_it.h"
void delay(int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<2000;j++);
}
}
int main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
LED_Close();
EXTI_KEY_Init();
button_init();
rim();
while(1)
{
}
}[/mw_shl_code]
这是stm8s_it.c文件的部分代码:
[mw_shl_code=applescript,true]INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
int i;
for(i=0;i<5;i++){
LED_Open();
delay(200);
LED_Close();
delay(400);
}
}
/**
* @brief External Interrupt PORTB Interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
int i;
for(i=0;i<10;i++){
LED_Open();
delay(50);
LED_Close();
delay(100);
}
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>