野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 910|回复: 4

[F1-指南者] 关于中断请教下各位大神

[复制链接]
发表于 2019-1-9 08:35:07 | 显示全部楼层 |阅读模式
在同一个工程里面
在  BSP_RS232.c  文件中使用了中断,程序如下:
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;


  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级组2


  NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;   //中断源

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 子优先级

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    // 使能中断

  NVIC_Init(&NVIC_InitStructure);   //初始化
}



在 BSP_Adc.c  中也使用中断,程序如下:
static void ADC_NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  //中断优先级组1


  NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;    //中断源
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   //抢占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;   //子优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   // 使能中断
  NVIC_Init(&NVIC_InitStructure);    //初始化
}


问题:
在同一个工程里面(所在.c文件不同)是否可以配置两个中断优先级组,如果可以,是否不管抢占优先级和子优先级设置成
什么都是 NVIC_PriorityGroup_1  >>NVIC_PriorityGroup_2   这样子的关系,我是新手,麻烦大神告诉我。(高手勿喷)


回复

使用道具 举报

发表于 2019-1-9 08:41:30 | 显示全部楼层
不能, 只能设置一种分组,不同的外设都是在同一种分组策略下配置的
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-1-9 08:53:39 | 显示全部楼层
flyleaf 发表于 2019-1-9 08:41
不能, 只能设置一种分组,不同的外设都是在同一种分组策略下配置的

那如果在同一个工程,所在.c文件不同,
在 BSP_Adc.c  中也使用中断,程序如下:
static void ADC_NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  //中断优先级组1


  NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;    //中断源
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   //抢占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;   //子优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   // 使能中断
  NVIC_Init(&NVIC_InitStructure);    //初始化
}


在  BSP_RS232.c  文件中使用了中断,程序如下:
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;


  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  //中断优先级组1


  NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;   //中断源

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 子优先级

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    // 使能中断

  NVIC_Init(&NVIC_InitStructure);   //初始化
}


这样子可以么?
回复 支持 反对

使用道具 举报

发表于 2019-1-9 10:29:58 | 显示全部楼层
多个地方重新配置了nvic的分组策略,那就以后面运行的为准
回复 支持 反对

使用道具 举报

发表于 2019-2-16 15:52:19 | 显示全部楼层
flyleaf 发表于 2019-1-9 10:29
多个地方重新配置了nvic的分组策略,那就以后面运行的为准

可以理解为后面配置的分组策略会覆盖前面的分组策略吗?比如配置了第一种分组后,执行了好几个中断,这些中断是按第一种分组策略来的,然后又配置了第二种分组,执行了好几个中断,这些中断是按第二种分组策略来的?
回复 支持 反对

使用道具 举报

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

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2019-4-19 04:53 , Processed in 0.050865 second(s), 31 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

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