OpenEdv-开源电子网

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

库函数中断分组问题

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-8-4 20:20:58 | 显示全部楼层 |阅读模式
5金钱
 NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

问题一::原子哥库函数的中断分组直接在主函数里分了,请问就这一句怎么让4个中断分好了组这个函数里是这个
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)        也没有选定哪些中断分进组2中啊??

问题二::如果要把4个中断不分在一个组里怎么写程序??比如分成4个组

最佳答案

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

问题一:NVIC_PriorityGroupConfig这个库函数的功能就是注释里写的设置中断分组,NVIC_PriorityGroup_2即2位抢占优先级,2位响应优先级 你说的没有看到选定哪些中断进行分组是因为,战舰EXTI外部中断实验的例程里的中断分组被写在了EXTIX_Init();//外部中断初始化当中,你可以点进去看 问题二:建议你仔细查看手册中对NVIC的介绍
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2014-8-4 20:20:59 | 显示全部楼层
问题一:NVIC_PriorityGroupConfig这个库函数的功能就是注释里写的设置中断分组,NVIC_PriorityGroup_2即2位抢占优先级,2位响应优先级
你说的没有看到选定哪些中断进行分组是因为,战舰EXTI外部中断实验的例程里的中断分组被写在了EXTIX_Init();//外部中断初始化当中,你可以点进去看
问题二:建议你仔细查看手册中对NVIC的介绍
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-4 20:20:59 | 显示全部楼层
NVIC_PriorityGroupConfig()函数分组一般是在系统启动之后调用。。。。设置好几位抢占几位响应。
然后对于各个中断 分别设置相应的抢占优先级和响应优先级。当你的分组设置好了那么你的抢占和响应优先级的值也就限制在一定范围。。。
就好像先设置一个国家有几级行政级别:省市自治区之类的。。。
然后再设置每个地区。。是属于省市自治区的哪个级别。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-5 08:33:40 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
原子那个在主函数里写 NVIC_Configuration(); 就把4个中断分到一组了,那我想每个中断分一组怎么弄就是分成四个组怎么写
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-5 10:06:40 | 显示全部楼层
回复【2楼】Scy:
---------------------------------
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
这个分组函数,只是有一个参数,也就是分到第几组,那我要是想把中断实验的4个中断分成4租该怎么弄??
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-5 19:28:53 | 显示全部楼层
回复【2楼】Scy:
---------------------------------
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) 
这个分组函数,只是有一个参数,也就是分到第几组,那我要是想把中断实验的4个中断分成4租该怎么弄??
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-6 10:36:22 | 显示全部楼层
回复【6楼】傻子:
---------------------------------
这不是分几个组。。。这是约定 有几位相应优先级,几位抢占优先级。。。
这里设置为组2的话。就是2位相应。两位抢占。。。
那么响应和抢占优先级的值都只能为 0.1.2.3  
这个我们手册中断优先级分组讲解非常详细。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-6 15:33:51 | 显示全部楼层
回复【7楼】Admin:
---------------------------------
这个我知道啊,我的意思是,原子的中断实验不是弄了4个外部中断吗,我想把
第一个外部中断设置组0(0位优先,4位响应)
第二个外部中断设置组1(1位优先,3位响应)
第三个外部中断设置组2(2位优先,2位响应)
第四个外部中断设置组3(3位优先,1位响应)

我是这个意思,想问问你怎么弄
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-6 15:34:16 | 显示全部楼层
回复【2楼】Scy:
---------------------------------
这个我知道啊,我的意思是,原子的中断实验不是弄了4个外部中断吗,我想把 
第一个外部中断设置组0(0位优先,4位响应) 
第二个外部中断设置组1(1位优先,3位响应) 
第三个外部中断设置组2(2位优先,2位响应) 
第四个外部中断设置组3(3位优先,1位响应) 

我是这个意思,想问问你怎么弄
回复

使用道具 举报

0

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-6-7
在线时间
7 小时
发表于 2014-8-6 15:59:15 | 显示全部楼层
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-6 17:39:59 | 显示全部楼层
回复【9楼】傻子:
--------------------------------
那你设置就可以啊 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); 这个函数不是有入口参数吗?
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-6 19:20:20 | 显示全部楼层
回复【11楼】Admin:
---------------------------------
这个函数只有一个参数啊,就是分到第3组,那程序怎么知道我把4个中断中的哪个分到了这个组,这个才是问题
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2014-8-6 22:12:01 | 显示全部楼层
回复【12楼】傻子:
---------------------------------
。。。你好像误解了中断分组的意思
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2014-8-6 22:39:48 | 显示全部楼层
回复【12楼】傻子:
---------------------------------
你的意思是要把不同的中断分到不同的组里去,你以为这里的分组是把中断进行分组,其实这里的NVIC_PriorityGroup是把中断的优先级进行分组,懂这个意思吗?
STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

也就是说

第0组:所有4位用于指定响应优先级

第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级

第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级

第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级

第4组:所有4位用于指定抢占式优先级

如果按照你的意思,将中断分配到不同的组中,那两个中断同时到来,如何判断优先级呢?你要做的就是选择一个优先级的分组方式,然后把四个中断按照你想要的优先级对他们进行分配,是抢占优先级还是响应优先级

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-8-7 07:12:37 | 显示全部楼层
回复【14楼】Scy:
---------------------------------
奥,原来只能选择一个分组
,明白了。谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 06:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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