究根问底:为何STM32在3.x的库中把NVIC_DeInit删除?

[复制链接]
9239|16
 楼主| sedatefire 发表于 2012-7-20 16:53 | 显示全部楼层 |阅读模式
为何呢,st方面库的维护工程师是如何考虑的呢?
难道这个函数没人用吗,还是给维护带来困扰啊
虽然自己也可以实现,但总觉得心里一个疙瘩,难受
库一升级,就多了这些编译错误,ST方面有必要反省一下

缘起:
我做了一个引导程序进行应用程序更新
从应用程序跳过去后,需要关闭并且复位所有的中断
__disable_irq()并不适合

求解:.....
 楼主| sedatefire 发表于 2012-7-20 16:54 | 显示全部楼层
请教一下大家

原来在2.X库中有 NVIC_DeInit() 函数,我在3.X库中没有找到

我看2.X库中的源程序是这样实现的:
void NVIC_DeInit(void)
{
  u32 index = 0;
  
  NVIC->Disable[0] = 0xFFFFFFFF;
  NVIC->Disable[1] = 0x000007FF;
  NVIC->Clear[0] = 0xFFFFFFFF;
  NVIC->Clear[1] = 0x000007FF;
  
  for(index = 0; index < 0x0B; index++)
  {
     NVIC->Priority[index] = 0x00000000;
  }
}

3.X库的core_cm3.h中,NVIC_Type结构体和2.X库中的不太一样,我对比着看,这样可以实现吗?
<font color="#2B91AF">void NVIC_DeInit(void)
{
  u32 index = 0;
  
  NVIC->ICER[0] = 0xFFFFFFFF;
  NVIC->ICER[1] = 0x000007FF;
  NVIC->ICPR[0] = 0xFFFFFFFF;
  NVIC->ICPR[1] = 0x000007FF;
  
  for(index = 0; index < 0x0B; index++)
  {
     NVIC->IP[index] = 0x00000000<font color="#000000">;
  }
}
 楼主| sedatefire 发表于 2012-7-20 16:54 | 显示全部楼层
李富贵 发表于 2012-7-20 20:52 | 显示全部楼层
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
niba 发表于 2012-7-20 21:10 | 显示全部楼层
楼上说的有道理,ARM公司已经做了,ST就省这点事情了
 楼主| sedatefire 发表于 2012-7-20 22:02 | 显示全部楼层
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

cmsis只看到开关总中断而已,一旦开了总中断,原先的那些中断还是照样开着的
研发之声 发表于 2012-7-20 22:07 | 显示全部楼层
这的确是个问题
 楼主| sedatefire 发表于 2012-7-21 19:28 | 显示全部楼层
xsgy123 发表于 2012-7-21 22:29 | 显示全部楼层
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

分析的有些道理
秋天落叶 发表于 2012-7-21 22:36 | 显示全部楼层
我也不太理解为什么要把NVIC_DeInit删除
dfsa 发表于 2012-7-21 22:49 | 显示全部楼层
好多事情是不需要纠根问底的,需要抓住重点
 楼主| sedatefire 发表于 2012-7-23 15:16 | 显示全部楼层
好吧,如何用cmsis的库,来完整实现NVIC_DeInit的功能,谁能回答,即刻结贴给分
 楼主| sedatefire 发表于 2012-7-24 17:51 | 显示全部楼层
好吧,如何用cmsis的库来完整实现NVIC_DeInit的功能,谁能回答,即刻结贴给分
sedatefire 发表于 2012-7-23 15:16

自己顶
研发之声 发表于 2012-7-26 14:53 | 显示全部楼层
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。
李富贵 发表于 2012-7-20 20:52

+1
 楼主| sedatefire 发表于 2012-7-27 10:35 | 显示全部楼层
好吧,既然删了,那自有他的道理,自己适应吧
cool_coder 发表于 2013-9-6 21:44 | 显示全部楼层
李富贵 发表于 2012-7-20 20:52
因为nvic和systick是arm做的,不是st做的,所以这两部分在3.x的库里面放到cmsis里面了。 ...

也不完全是这样, MISC里面还是有几个NVIC_XXX()函数
hawksabre 发表于 2013-9-7 09:57 | 显示全部楼层
学习帖子   确实不错   好好看看   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部