OpenEdv-开源电子网

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

关于初始化函数MY_NVIC_Init

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-10-29
在线时间
0 小时
发表于 2012-11-1 07:32:56 | 显示全部楼层 |阅读模式
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)  
u32 temp;
u8 IPRADDR=NVIC_Channel/4;  //每组只能存4个,得到组地址 
u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
IPROFFSET=IPROFFSET*8+4;    //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);  
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf;//取低四位

if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//使能中断位(要清除的话,相反操作就OK)
else NVIC->ISER[1]|=1<<(NVIC_Channel-32);    
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级           
}

下面是调用它的函数
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{  
RCC->APB1ENR|=1<<11; //使能wwdg时钟
WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.   
WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer
WWDG->CFR|=1<<9;        //使能提前唤醒中断
WWDG->CFR&=0XFF80;     
WWDG->CFR|=wr;    //设定窗口值     
WWDG->CR|=WWDG_CNT|(1<<7); //开启看门狗,设置7位计数器     
MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2   
}

MY_NVIC_Init第四个参数NVIC_Group是AIRC寄存器中的PRIGROUP位[10:8]么?如果是,那么实参给的是2,分配情况是4:0,即16个抢先式优先级,无子优先级,那MY_NVIC_Init的前两个参数怎么解释,新手菜鸟表示看晕了,求各位高手指点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165559
金钱
165559
注册时间
2010-12-1
在线时间
2118 小时
发表于 2012-11-1 10:42:39 | 显示全部楼层
看《STM32不完全手册》关于这部分的介绍。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2012-11-1 11:52:36 | 显示全部楼层
回复【楼主位】aaronlee0817:
---------------------------------
中断分抢先优先级和响应优先级,通过组合可以构成中断优先级,,,分组的目的是确定响应优先级和抢占优先级的级数。前两个参数是抢先优先级和响应优先级,最后一个参数是组号。组号2,应该不是你说的4:0,而是2:2。我也是新手菜鸟 ,只能理解这么多了,说的可能不对。
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-10-29
在线时间
0 小时
 楼主| 发表于 2012-11-1 16:58:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
手册中就注释为“组2”,但是这个组是什么呢?
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-10-29
在线时间
0 小时
 楼主| 发表于 2012-11-1 16:59:39 | 显示全部楼层
回复【3楼】sun_shine:
---------------------------------
刚又核实了一下~2:2的编号是5~
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-10-29
在线时间
0 小时
 楼主| 发表于 2012-11-1 17:10:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
看完
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)  

u32 temp,temp1;   
temp1=(~NVIC_Group)&0x07;//取后三位
temp1<<=8;
temp=SCB->AIRCR;  //读取先前的设置
temp&=0X0000F8FF; //清空先前分组
temp|=0X05FA0000; //写入钥匙
temp|=temp1;    
SCB->AIRCR=temp;  //设置分组            
}

这个后明白了~
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-7-5
在线时间
6 小时
发表于 2014-3-18 11:28:50 | 显示全部楼层
回复【3楼】sun_shine:
---------------------------------
前两个参数是抢先优先级和响应优先级,这个级别是怎么来的?能否给详细介绍一下???
回复 支持 反对

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
发表于 2016-7-16 10:51:03 | 显示全部楼层
Error: L6218E: Undefined symbol MY_NVIC_Init (referred from usart.o).可以帮我看下这个问题么
回复 支持 反对

使用道具 举报

9

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-9-1
在线时间
78 小时
发表于 2017-3-21 16:23:07 | 显示全部楼层
file:///C:/Users/T-MAX/Desktop/1490084540(1).jpg
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-25 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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