打印

求教 NVIC_Init;

[复制链接]
5608|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzhj|  楼主 | 2012-8-30 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void NVIC_Configuration(void)
{
/* 定义NVIC初始化结构体 NVIC_InitStructure */
NVIC_InitTypeDef NVIC_InitStructure;
/* #ifdef...#else...#endif结构的作用是根据预编译条件决定中断向量表起始地址*/   
#ifdef  VECT_TAB_RAM  
   /* 中断向量表起始地址从 0x20000000 开始 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0);
#else  /* VECT_TAB_FLASH */
   /* 中断向量表起始地址从 0x80000000 开始 */
   NVIC_SetVectorTable(NVIC_VectTab_FLASH , 0x0);   
#endif

   /* 选择NVIC优先级分组2 */
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
   /* 使能EXIT 0通道 ,2级先占优先级 ,0级次占优先级 */
   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


   NVIC_Init(&NVIC_InitStructure);//  卡死在这里了,无法继续执行下去


}

搜索了以前的贴子,也没发现解决的方法;用的KEIL 4的环境;
沙发
yzhj|  楼主 | 2012-8-31 16:57 | 只看该作者

问题点找到了,但是不知道原因

本帖最后由 yzhj 于 2012-8-31 17:18 编辑

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
  u32 tmppriority = 0x00, tmpreg = 0x00, tmpmask = 0x00;
  u32 tmppre = 0, tmpsub = 0x0F;
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
  assert_param(IS_NVIC_IRQ_CHANNEL(NVIC_InitStruct->NVIC_IRQChannel));
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));  
  assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
  if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  {        
    /* Compute the Corresponding IRQ Priority --------------------------------*/   
    tmppriority = (0x700 - (SCB->AIRCR & (u32)0x700))>> 0x08;
    tmppre = (0x4 - tmppriority);
    tmpsub = tmpsub >> tmppriority;
               
    tmppriority = (u32)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
   
    tmppriority = tmppriority << 0x04;
    tmppriority = ((u32)tmppriority) << ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08);
   
    tmpreg = NVIC->IPR[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)];
    tmpmask = (u32)0xFF << ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08);
    tmpreg &= ~tmpmask;
    tmppriority &= tmpmask;  
    tmpreg |= tmppriority;               
    NVIC->IPR[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)] = tmpreg;
           /* Enable the Selected IRQ Channels --就是出在这里但是不知道怎么解决------------------------------------*/
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (u32)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (u8)0x1F);


      }
  else
  {
    /* Disable the Selected IRQ Channels -------------------------------------*/
    NVIC->ICER[(NVIC_InitStruct->NVIC_IRQChannel >> 0x05)] =   (u32)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (u8)0x1F);
  }
}

使用特权

评论回复
板凳
yzhj|  楼主 | 2012-8-31 17:07 | 只看该作者
这是标准库啊,按说不应该出错的。各位有别的写法吗?或者直接对寄存器赋值,不用这种通用的形式?

使用特权

评论回复
地板
IJK| | 2012-8-31 17:58 | 只看该作者
没碰到过这样的问题。
LZ需要说是具体哪个芯片,库的版本和IDE版本等等。

使用特权

评论回复
5
airwill| | 2012-9-1 09:14 | 只看该作者
楼主有没有使用 RTOS 呢, 如果是在 RTOS 的任务里执行, 那么这个操作属于特权操作, 会被封锁.

使用特权

评论回复
6
yzhj|  楼主 | 2012-9-1 14:32 | 只看该作者
4# IJK

谢谢回复!
用的芯片是 STM32F103RCT6;
编译器是 KEIL 4;
库的版本应该是3.4或者是更低,是买书是附带的。我也不是非常明白。

使用特权

评论回复
7
yzhj|  楼主 | 2012-9-1 14:32 | 只看该作者
5# airwill
谢谢回复!
我没有使用RTOS.

使用特权

评论回复
8
yzhj|  楼主 | 2012-9-1 14:36 | 只看该作者
继续尝试中:
如果
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
更换为
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
就可以运行正常了。
当然这不是我想要的,只能说明问题也可能出在别的地方。

这个是以前的老帖子,不过没有说明是怎样解决。
https://bbs.21ic.com/icview-108804-1-1.html

使用特权

评论回复
9
sflower| | 2012-9-18 09:21 | 只看该作者
呵呵,我刚调试时碰到过。USART1中断程序的名字(USART1_IRQHandler)和启动代码的不一样。检测一下。

使用特权

评论回复
10
sflower| | 2012-9-18 09:22 | 只看该作者
和启动代码的名字一致即可

使用特权

评论回复
11
yzhj|  楼主 | 2012-9-18 16:51 | 只看该作者
现在可以通过了,但是串口没有数据发出,也没有进中断。继续进行中。。。。。。。。。。。

使用特权

评论回复
12
yzhj|  楼主 | 2012-11-29 16:28 | 只看该作者
一堆杂事,外加自己懒惰,直到今天才算勉强搞定。
现在COM1可以通过中断收发数据了,在购买的学习板上测试的。
只是基本功能,没有尝试红外等其他的扩展功能。
结贴算分,再次感谢各位的帮助。

使用特权

评论回复
13
karle| | 2014-8-1 20:02 | 只看该作者
楼主,我也出现相同问题,能告诉我如何解决吗?

使用特权

评论回复
14
朝阳之光| | 2014-8-2 08:45 | 只看该作者
还没说解觉方法呢

使用特权

评论回复
15
zook0k| | 2014-11-2 11:40 | 只看该作者
怎么解决的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

226

帖子

0

粉丝