1、invokedonPowerupandwarmreset6. NonMaskableInt_IRQn-14,2NonmaskableInterrupt,cannotbestoppedorpreempted7. HardFault_IRQn-13,3HardFault,allclassesofFault8. SVCall_IRQn-5,11SystemServiceCallviaSVCinstruction9. DebugMonitor_IRQn-4,12DebugMonitor10. PendSV_IRQn-2,14Pendablerequestforsystemservice11. SysT
2、ick_IRQn-1,15TickTimer12. /*-nRF51Specific13. POWER_CLOCK_IRQn0,0POWER_CLOCK14. RADIO_IRQn1,RADIO15. UART0_IRQn2,UART016. SPI0_TWI0_IRQn3,SPI0_TWI017. SPI1_TWI1_IRQn4,4SPI1_TWI118. GPIOTE_IRQn6,6GPIOTE19. ADC_IRQn7,7ADC20. TIMER0_IRQn8,8TIMER021. TIMER1_IRQn9,9TIMER122. TIMER2_IRQn10,10TIMER223. RTC
3、0_IRQn11,RTC024. TEMP_IRQn12,TEMP25. RNG_IRQn13,13RNG26. ECB_IRQn14,ECB27. CCM_AAR_IRQn15,CCM_AAR28. WDT_IRQn16,16WDT29. RTC1_IRQn17,17RTC130. QDEC_IRQn18,18QDEC31. LPCOMP_COMP_IRQn19,19LPCOMP_COMP32. SWI0_IRQn20,20SWI033. SWI1_IRQn21,21SWI134. SWI2_IRQn22,22SWI235. SWI3_IRQn23,23SWI336. SWI4_IRQn24
4、,24SWI437. SWI5_IRQn25SWI538. IRQn_Type;39. 在进行中断处理时,一般都要按照这个步骤:1、对要用到的中断初始化;2、对用到的中断进行使能;3、对中断进行优先级设置1、中断初始化nRF51822的外部I/O(暂时理解的程度以及用过的中断只有I/O中断,其他中断没有实践过)中断是基于任务和事件模式的。按照nRF51822用户手册,每个GPIOTE通道的以下输入条件可以产生一个事件(在此可将事件理解为一个中断):上升沿、下降沿或者任何变化。因此,在进行中断初始化的时候,首先要将相应的中断输入I/O引脚设置为输入模式。然后通过CONFIGn设置GPIOTE通道
5、的模式MODE(任务或者事件)、关联任务OUTn或者事件INn的引脚PSEL,触发方式POLARITY。例如下面是将ROCKER_INTERRUPT引脚初始化为事件下降沿触发的事件IN0。prename=codeclass=objcNRF_GPIOTE-CONFIG0=(GPIOTE_CONFIG_POLARITY_HiToLoGPIOTE_CONFIG_POLARITY_Pos)|(ROCKER_INTERRUPTGPIOTE_CONFIG_PSEL_Pos)3. |(GPIOTE_CONFIG_MODE_EventINTENSET=GPIOTE_INTENSET_IN0_SetGPIOTE
6、_INTENSET_IN0_Pos;/IN02、中断使能在中断初始化中仅仅是对事件n的使能,在此要对相应的中断进行使能。类比于Cortex-M3架构,在MDK内与NVIC相关的寄存器,MDK为其定义了如下的结构体NVIC(Nested Vectored Interrupt Controller)嵌套中断向量控制器14px;/*ingroupCMSIS_core_registerdefgroupCMSIS_NVICNestedVectoredController(NVIC)briefTypedefinitionstheNVICRegisters4. 7. /*Structuretypetoacc
7、ess(NVIC).9. typedefstruct10. _IOuint32_tISER1;Offset:0x000(R/W)SetEnableRegister12. RESERVED031;ICER1;0x080ClearRSERVED131;ISPR1;0x100PendingRESERVED231;ICPR1;0x180RESERVED331;RESERVED464;IP8;0x300Priority21. NVIC_Type;23. /*endgroup*/AIRCR中设置的,也就是分组之后所有的中断只能按照这个分组方式进行设定抢占优先级和响应优先级。在对中断优先级进行分组设置之后,
8、要对每个中断的中断源优先级进行设置,也就是设置中断优先级控制寄存器IP,中断源优先级具体设置了该中断源的优先级别。在此先说一下STM32中断优先级设置的步骤:系统运行开始的时候设置中断分组,确定组号,也就是确定抢占优先级和子优先级的分配位数,调用函数为NVIC_PriorityGroupConfig();设置用到的中断的中断优先级别,对每个中断调用函数为NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct);而在nRF51822中,我现在还没有碰到中断优先级进行分组的情况,在此就先不写,如果将来用到,再进行相关补充首先是中断使能,和STM32中在初始化NVIC
9、_InitStruct结构体的同时完成中断使能不同,nRF51822通过专门的函数NVIC_EnableIRQ(IRQn_Type IRQn)来实现响应中断使能,形参变量IRQn为要进行初始化的中断编号,在本博文的开头已经给出,在SDK的core-m0.h中定义,以下为中断使能函数。1. /*ExternalThefunctionenablesadevice-specificinterruptincontroller.paraminIRQnnumber.Valuenegative.7. _STATIC_INLINEvoidNVIC_EnableIRQ(IRQn_TypeIRQn)8. NVIC-ISER0(1(uint32_t)(IRQn)&0x1F);10. 13. /*Disabledisables19. _STATIC_INLINENVIC_DisableIRQ(IRQn_Type20. ICER022. 例如,要使能GPIOTE中断,则调用1. NVIC_EnableIRQ(GPIOTE_IRQn);3、中断优先级设置中断优先级设置源函数如下:setspriorityaninterrupt.noteseteverycoreset.10. _STATIC_INLINENVIC_SetPrior
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1