6535|17

45

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

MSP432的NVIC中断设置允许寄存器的复制问题 [复制链接]

在TI给出的MSP432例程里面看到对寄存器 “NVIC_ISER0” 是这么赋值的:

NVIC_ISER0 = 1 << ((INT_TA0_N - 16) & 31);

搞不懂为什么要这么写;

NVIC_ISER0寄存器是0到31号中断的允许位,相应的位置1就会允许对应的中断,INT_TA0_N的中断号是25号,把bit-25置1是不是就可以了呀?


最新回复

NVIC_ISER0 = 1   详情 回复 发表于 2015-12-11 13:01
 
点赞 关注

回复
举报

503

帖子

1

TA的资源

一粒金砂(高级)

沙发
 
看看INT_TA0_N 原型是什么

点评

这个东西:#define INT_TA0_N (25) /* TA0_N IRQ */  详情 回复 发表于 2015-6-5 20:10
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
曾经in 发表于 2015-6-5 18:58
看看INT_TA0_N 原型是什么

这个东西:#define INT_TA0_N                                          (25)                  /* TA0_N IRQ */

点评

使能位比中断号小16?不懂,等大神、  详情 回复 发表于 2015-6-5 21:01
 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

4
 
TWENLONG 发表于 2015-6-5 20:10
这个东西:#define INT_TA0_N                                          (25)                  /* TA0_N IRQ */
NVIC_ISER0 = 1 << ((INT_TA0_N - 16) & 0x1f);
使能位比中断号小16?不懂,等大神、

点评

系统异常16个,外部中断56个,一共64个,NVIC_ISER0这个寄存器不包括系统异常,所以要减掉16,&31是为了避免结果超出范围,这么理解似乎能说得过去  详情 回复 发表于 2015-6-6 10:27
前16号是系统异常  详情 回复 发表于 2015-6-6 10:11
 
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

5
 

前16号是系统异常
  1. //*****************************************************************************
  2. // NVIC interrupts
  3. //*****************************************************************************

  4. // System exceptions
  5. #define FAULT_NMI                                          ( 2)                  /* NMI fault */
  6. #define FAULT_HARD                                         ( 3)                  /* Hard fault */
  7. #define FAULT_MPU                                          ( 4)                  /* MPU fault */
  8. #define FAULT_BUS                                          ( 5)                  /* Bus fault */
  9. #define FAULT_USAGE                                        ( 6)                  /* Usage fault */
  10. #define FAULT_SVCALL                                       (11)                  /* SVCall */
  11. #define FAULT_DEBUG                                        (12)                  /* Debug monitor */
  12. #define FAULT_PENDSV                                       (14)                  /* PendSV */
  13. #define FAULT_SYSTICK                                      (15)                  /* System Tick */

  14. // External interrupts
  15. #define INT_PSS                                            (16)                  /* PSS IRQ */
  16. #define INT_CS                                             (17)                  /* CS IRQ */
  17. #define INT_PCM                                            (18)                  /* PCM IRQ */
  18. #define INT_WDT_A                                          (19)                  /* WDT_A IRQ */
  19. #define INT_FPU                                            (20)                  /* FPU IRQ */
  20. #define INT_FLCTL                                          (21)                  /* FLCTL IRQ */
  21. #define INT_COMP_E0                                        (22)                  /* COMP_E0 IRQ */
  22. #define INT_COMP_E1                                        (23)                  /* COMP_E1 IRQ */
  23. #define INT_TA0_0                                          (24)                  /* TA0_0 IRQ */
  24. #define INT_TA0_N                                          (25)                  /* TA0_N IRQ */
  25. #define INT_TA1_0                                          (26)                  /* TA1_0 IRQ */
  26. #define INT_TA1_N                                          (27)                  /* TA1_N IRQ */
  27. #define INT_TA2_0                                          (28)                  /* TA2_0 IRQ */
  28. #define INT_TA2_N                                          (29)                  /* TA2_N IRQ */
  29. #define INT_TA3_0                                          (30)                  /* TA3_0 IRQ */
  30. #define INT_TA3_N                                          (31)                  /* TA3_N IRQ */
  31. #define INT_EUSCIA0                                        (32)                  /* EUSCIA0 IRQ */
  32. #define INT_EUSCIA1                                        (33)                  /* EUSCIA1 IRQ */
  33. #define INT_EUSCIA2                                        (34)                  /* EUSCIA2 IRQ */
  34. #define INT_EUSCIA3                                        (35)                  /* EUSCIA3 IRQ */
  35. #define INT_EUSCIB0                                        (36)                  /* EUSCIB0 IRQ */
  36. #define INT_EUSCIB1                                        (37)                  /* EUSCIB1 IRQ */
  37. #define INT_EUSCIB2                                        (38)                  /* EUSCIB2 IRQ */
  38. #define INT_EUSCIB3                                        (39)                  /* EUSCIB3 IRQ */
  39. #define INT_ADC14                                          (40)                  /* ADC14 IRQ */
  40. #define INT_T32_INT1                                       (41)                  /* T32_INT1 IRQ */
  41. #define INT_T32_INT2                                       (42)                  /* T32_INT2 IRQ */
  42. #define INT_T32_INTC                                       (43)                  /* T32_INTC IRQ */
  43. #define INT_AES256                                         (44)                  /* AES256 IRQ */
  44. #define INT_RTC_C                                          (45)                  /* RTC_C IRQ */
  45. #define INT_DMA_ERR                                        (46)                  /* DMA_ERR IRQ */
  46. #define INT_DMA_INT3                                       (47)                  /* DMA_INT3 IRQ */
  47. #define INT_DMA_INT2                                       (48)                  /* DMA_INT2 IRQ */
  48. #define INT_DMA_INT1                                       (49)                  /* DMA_INT1 IRQ */
  49. #define INT_DMA_INT0                                       (50)                  /* DMA_INT0 IRQ */
  50. #define INT_PORT1                                          (51)                  /* PORT1 IRQ */
  51. #define INT_PORT2                                          (52)                  /* PORT2 IRQ */
  52. #define INT_PORT3                                          (53)                  /* PORT3 IRQ */
  53. #define INT_PORT4                                          (54)                  /* PORT4 IRQ */
  54. #define INT_PORT5                                          (55)                  /* PORT5 IRQ */
  55. #define INT_PORT6                                          (56)                  /* PORT6 IRQ */
复制代码
 
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

6
 
本帖最后由 TWENLONG 于 2015-6-6 10:31 编辑

系统异常16个,外部中断56个,一共64个,NVIC_ISER0这个寄存器不包括系统异常,所以要减掉16;ADC14的中断号是40,大于31,照理说应该给NVIC_ISER1赋值,不过40-16就小于31了,所以它还是给NVIC_ISER0赋值的:“NVIC_ISER0 = 1 << ((INT_ADC14 - 16) & 31);         // Enable ADC interrupt in NVIC module”;&31是为了避免结果超出范围,可能是这么回事

点评

哈哈,能清楚了就好  详情 回复 发表于 2015-6-6 12:57
 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

7
 
本帖最后由 曾经in 于 2015-6-6 12:58 编辑
TWENLONG 发表于 2015-6-6 10:27
系统异常16个,外部中断56个,一共64个,NVIC_ISER0这个寄存器不包括系统异常,所以要减掉16;ADC14的中断号是40,大于31,照理说应该给NVIC_ISER1赋值,不过40-16就小于31了,所以它还是给NVIC_ISER0赋值的:“NVIC_ISER0 = 1

哈哈,弄清楚了就好
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

8
 
我也猜估计是你想的这种情况

点评

我的CCS是Free License的,不能调试,不能体验Energy Trace++,你是怎么解决的呀?  详情 回复 发表于 2015-6-13 22:49
 
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

9
 
强仔00001 发表于 2015-6-11 23:36
我也猜估计是你想的这种情况

我的CCS是Free License的,不能调试,不能体验Energy Trace++,你是怎么解决的呀?

点评

我不用这个的Energy Trace++,我也是没破解的,可以调试的吧  详情 回复 发表于 2015-6-14 20:32
 
 
 

回复

1144

帖子

17

TA的资源

纯净的硅(高级)

10
 
我只想说,常量计算后还是常量.
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

11
 
TWENLONG 发表于 2015-6-13 22:49
我的CCS是Free License的,不能调试,不能体验Energy Trace++,你是怎么解决的呀?

我不用这个的Energy Trace++,我也是没破解的,可以调试的吧

点评

我的不能调试  详情 回复 发表于 2015-6-14 22:44
 
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

12
 
强仔00001 发表于 2015-6-14 20:32
我不用这个的Energy Trace++,我也是没破解的,可以调试的吧

我的不能调试

点评

你试试重装看看,我一直都没破解,也是能调试的  详情 回复 发表于 2015-6-15 10:58
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

13
 

你试试重装看看,我一直都没破解,也是能调试的
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

14
 

为何要进行左移1位操作?

点评

哪是右移一位 楼主在6楼已经说了  详情 回复 发表于 2015-12-10 20:30
 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

15
 
bryanlee512 发表于 2015-12-10 15:45
为何要进行左移1位操作?

哪是右移一位
楼主在6楼已经说了
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

16
 
曾经in 发表于 2015-12-10 20:30
哪是右移一位
楼主在6楼已经说了

没错啊是左移。

点评

NVIC_ISER0 = 1  详情 回复 发表于 2015-12-11 13:01
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

17
 
6楼说的很明白哦。
 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

18
 

NVIC_ISER0 = 1 << ((INT_ADC14 - 16) & 31);
5楼:前16号是系统异常System exceptions之后才是外部中断External interrupts
所以外部中断控制寄存器里的使能位是异常号-16,
NVIC_ISER0 =1 << (INT_ADC14 - 16) 就是置为对应的使能位
& 31就是&0x1f防止超出范围
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表