OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5945|回复: 8

外部中断!!!

[复制链接]

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-9-21
在线时间
0 小时
发表于 2012-10-31 00:30:32 | 显示全部楼层 |阅读模式
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}  
EXTI->R=1<<0;  //清除LINE0上的中断标志位  
}

//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10);    //消抖  
if(KEY0==0)      //按键0
{
LED0=!LED0;
}else if(KEY1==0)//按键1
{
LED1=!LED1;
}
EXTI->R=1<<13;     //清除LINE13上的中断标志位  
EXTI->R=1<<15;     //清除LINE15上的中断标志位  
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2;     //使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD   

GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
GPIOA->CRL|=0X00000008;   
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
GPIOA->CRH|=0X80800000;   
GPIOA->ODR|=1<<13;   //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15;   //PA15上拉

Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发

MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);    //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2   


上面的代码看了很久都看的模模糊糊,主要有以下几个问题:
1.Ex_NVIC_Config(GPIO_A,15,FTIR)   中断线映射到IO上,那挂在此IO口上的中断的编号就是IO的编号(0~15)?(比如说PB.4中的4)  那后面  MY_NVIC_Init(2,2,EXTI0_IRQChannel,2)  第三个参数是中断编号(0~59),这和上面的又是怎么回事?
2.中断服务程序和中断是怎么匹配的?怎么就说 EXTI15_10_IRQHandler(void)是外部中断10-15的中断服务程序(51中就是用确定的序号来表示不同中断的服务程序,stm32应该是要自己设置的,那是在哪里设置?)?是怎样对应的?
3.EXTI15_10_IRQHandler(void)是外部中断10-15的中断服务程序,那得到一个中断,你怎么知道是13还是14的?如果他们分别要进行的程序是不同的,那该怎么办?

跪求大神指点迷津!










正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-31 00:47:26 | 显示全部楼层
回复【楼主位】末语:
---------------------------------
1,是的.中断编号和IO编号的关系是,IO编号是中断编号的一个子集.而不是全部.
2,在.s文件里面.定义了这些中断服务函数.也就是你说的中断程序,每个中断都有对应的中断服务程序(注意,可能有多个中断共用一个服务程序).
3,通过SR寄存器.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-16 21:22:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
第3条,怎么通过SR寄存器识别不同的中断啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-16 22:42:43 | 显示全部楼层
看SR寄存器的描述。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-17 08:42:34 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
看哪个SR寄存器的描述啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 11:29:47 | 显示全部楼层
你用什么东西,看什么东西的SR啊。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-17 12:08:27 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
完全没听懂啊原子哥,能举个例子不?比如利用EXTI5产生外部中断,对应的中断处理函数是EXTI9_5_IRQHandler,那么我怎么才能知道是产生的EXTI5产生的中断而不是EXTI6、EXTI7、EXTI8、EXTI9产生的中断呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 14:07:02 | 显示全部楼层
 


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-17 16:44:34 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
太谢谢原子哥了!!!!!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-11 02:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表