OpenEdv-开源电子网

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

IRQn和NVIC_IRQChannel的区别?

[复制链接]

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
发表于 2016-5-25 17:48:17 | 显示全部楼层 |阅读模式
1金钱
在看串口时看到串口中断这句代码:
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能按键外部中断通道
想看看都有什么值发现定义是在misc.h文件里
网上百度之后说是在stm32f10x.h文件里,但是只有IRQn
请问IRQn和NVIC_IRQChannel的区别?

最佳答案

查看完整内容[请看2#楼]

不同库版本的叫法,V3.5库以后,都用IRQn替代了原来的IRQChannel
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-25 17:48:18 | 显示全部楼层
不同库版本的叫法,V3.5库以后,都用IRQn替代了原来的IRQChannel
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-25 19:34:53 | 显示全部楼层
楼主可以看下相关文件中的brief,会进行说明的,楼主说的IRQn代表中断向量号,那个NVIC_IRQChannel是NVIC的中断通道,是不同的两种东西。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-26 09:16:36 | 显示全部楼层
东北小辉辉 发表于 2016-5-25 19:34
楼主可以看下相关文件中的brief,会进行说明的,楼主说的IRQn代表中断向量号,那个NVIC_IRQChannel是NVIC的 ...

我又看了一下,是不是IRQn只是个枚举声明的各种通道,NVIC_IRQChannel是中断选择额响应的通道?
那比如我选择USART1_IRQn,NVIC_IRQChannel是怎么和USART1_IRQn匹配上的呢?这块的代码没找到啊大神
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-26 10:18:59 | 显示全部楼层
Qlm 发表于 2016-5-26 09:16
我又看了一下,是不是IRQn只是个枚举声明的各种通道,NVIC_IRQChannel是中断选择额响应的通道?
那比如 ...

我说下我的理解,可能是不对的,楼主来参考一下,也希望论坛各位来讨论。

首先,那个IRQn,每个中断的IRQ,可以在stm32f10x.h中找到,比如STM32F10X_HD的USART1_IRQn,就是37,楼主也看到了,IRQn是枚举类型,这个是定死的。至于为什么这个等于37?为啥不是47?为啥不是50?这个是单片机内部规定的,这个可以看一下stm32f10x的参考手册(我的是英文原版,中文版可能有出入),RM0008,197页中断那章,table61,中断向量表,可以看到USART1的中断向量就是37。那楼主可能又有问题了,那为什么我写一个void USART1_IRQHandler(void)   这个函数,硬件发生中断的时候就会进入这个函数里面呢,这个37是怎么识别的呢?

还是看刚才那张中断向量表,可以看到,第一个地址是0x00000000,是一切开始的地方,这个0x00000000是对应启动文件的,稍微截取一段。

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
...
                DCD     USART1_IRQHandler          ; USART1
                DCD     USART2_IRQHandler          ; USART2
                DCD     USART3_IRQHandler          ; USART3
                DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10               

DCD是汇编的伪指令,具体用法楼主可以百度一下,大概就是给后面的数据分配一片内存空间,ARM的地址是连续的,并且这片地址4字节对其,__initial_sp位于汇编文件开头,这里我理解(注意:这里是我理解的,虽然以上以下全部都是我理解的- -)__initial_sp 对应的是0x00000000,往下,比如到USART1_IRQHandler就是0x0000_00D4,然后后面用EXPORT和c文件联系起来,最后赋值成37...(其实我觉得赋不赋37都问题不大,在汇编中将中断向量和地址对应起来,用EXPORT在c语言中就可以操作了,至于赋37可能是为了和stm32参考手册中的那张表对应起来?)

至于NVIC,是cortexM系列的一种特有的中断机制,可以设置抢占优先级和响应优先级,如果你想给某个中断设置优先级,比如还是刚才的USART1,你首先要指明,要设置那个中断的优先级吧?所以,你开始的时候,要用那个结构体里NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;楼主也知道,这个结构体在misc.h里面,至于具体到硬件的地址上是怎么对应的,楼主可以去看看《cortex M3权威指南》,应该会有,我没有细看,但是我估计无非就是一堆地址,强制转换,赋值之类的。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-26 10:26:26 | 显示全部楼层
东北小辉辉 发表于 2016-5-26 10:18
我说下我的理解,可能是不对的,楼主来参考一下,也希望论坛各位来讨论。

首先,那个IRQn,每个中断的 ...

我去查查这些资料看看,非常感谢有大神指导,入门有个师傅很感激有人回答这些问题啊
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-26 10:58:01 | 显示全部楼层
本帖最后由 东北小辉辉 于 2016-5-26 11:02 编辑
Qlm 发表于 2016-5-26 10:26
我去查查这些资料看看,非常感谢有大神指导,入门有个师傅很感激有人回答这些问题啊

我也只是个菜鸟中的菜鸟,以上的回答只是我自己的理解,其实想搞通这个东西是很难的,楼主有时间可以了解一下嵌入式的知识,从0开始写stm32的代码,自己搞懂cm3的架构,然后从启动文件开始写,参考stm32的库,自己设计单片机的库,可以学到许多知识,包括代码的兼容性,健壮性等知识,我这边也是刚刚起步。

其实这也不算从0开始写stm32的代码,因为编译器还帮我们做了非常庞大的工作... 具体可能要去学习编译原理,微机原理,然后就是汇编语言,最后搞到机器语言和门电路上...简直就是无底洞...
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-26 13:18:32 | 显示全部楼层
东北小辉辉 发表于 2016-5-26 10:58
我也只是个菜鸟中的菜鸟,以上的回答只是我自己的理解,其实想搞通这个东西是很难的,楼主有时间可以了解 ...

好的,一起学习,又不懂得请教你
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-26 14:46:25 | 显示全部楼层
东北小辉辉 发表于 2016-5-26 10:58
我也只是个菜鸟中的菜鸟,以上的回答只是我自己的理解,其实想搞通这个东西是很难的,楼主有时间可以了解 ...

USART_GetITStatus这个函数里的USART_IT时期什么作用啊?我怎么找不到在哪定义的,还有在网上差的时候看到原子哥给别人解答的一个USART_ITConfig函数也找不到在哪,请问你知道么?
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-26 14:59:42 | 显示全部楼层
Qlm 发表于 2016-5-26 14:46
USART_GetITStatus这个函数里的USART_IT时期什么作用啊?我怎么找不到在哪定义的,还有在网上差的时候看 ...

这些函数体用go to definition都可以看到,在相应的库函数中会有说明的。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-26 15:03:24 | 显示全部楼层
东北小辉辉 发表于 2016-5-26 14:59
这些函数体用go to definition都可以看到,在相应的库函数中会有说明的。

我go to definition了,但是什么都没跳转,就是下面出了一个新的框,就不明白了。
还有USART_RX_STA&0x8000,USART_RX_STA是原子自己定义的变量,但是为什么与1000000000000000之后就能判断接受完没完成呢?又不是一个实际存在的寄存器啊。
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-26 18:43:31 | 显示全部楼层
本帖最后由 东北小辉辉 于 2016-5-26 18:45 编辑
Qlm 发表于 2016-5-26 15:03
我go to definition了,但是什么都没跳转,就是下面出了一个新的框,就不明白了。
还有USART_RX_STA&0x8 ...

我这边图刷新不出来,猜测是出现了browser,你点browser里面就可以跳转到相应的行了,至于那个USART_RX_STA&0x8000,我之前也来问过这个问题,那个只是一个标志位,仔细读下代码和原子哥的《stm32开发指南》吧,这里刚开始可能确实比较难理解。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-27 08:44:12 | 显示全部楼层
东北小辉辉 发表于 2016-5-26 18:43
我这边图刷新不出来,猜测是出现了browser,你点browser里面就可以跳转到相应的行了,至于那个USART_RX_S ...

对,是browser,那我等下试一试,请问你QQ多少啊,我想加你QQ又不懂得方便请教你
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-5-27 08:51:03 | 显示全部楼层
Qlm 发表于 2016-5-27 08:44
对,是browser,那我等下试一试,请问你QQ多少啊,我想加你QQ又不懂得方便请教你

要不加一下咖啡这个群吧,321616391,现在人还不多。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

25

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-9-5
在线时间
48 小时
 楼主| 发表于 2016-5-27 08:54:45 | 显示全部楼层
东北小辉辉 发表于 2016-5-27 08:51
要不加一下咖啡这个群吧,321616391,现在人还不多。

好的,我现在去加
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2018-8-31
在线时间
2 小时
发表于 2018-10-20 15:02:25 | 显示全部楼层
2楼正解
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 22:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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