nRF51822外部中断学习总结Word格式文档下载.docx

上传人:b****5 文档编号:19056393 上传时间:2023-01-03 格式:DOCX 页数:10 大小:21.48KB
下载 相关 举报
nRF51822外部中断学习总结Word格式文档下载.docx_第1页
第1页 / 共10页
nRF51822外部中断学习总结Word格式文档下载.docx_第2页
第2页 / 共10页
nRF51822外部中断学习总结Word格式文档下载.docx_第3页
第3页 / 共10页
nRF51822外部中断学习总结Word格式文档下载.docx_第4页
第4页 / 共10页
nRF51822外部中断学习总结Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

nRF51822外部中断学习总结Word格式文档下载.docx

《nRF51822外部中断学习总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《nRF51822外部中断学习总结Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

nRF51822外部中断学习总结Word格式文档下载.docx

invoked 

on 

Power 

up 

and 

warm 

reset 

6. 

NonMaskableInt_IRQn 

-14, 

Non 

maskable 

Interrupt, 

cannot 

be 

stopped 

or 

preempted 

7. 

HardFault_IRQn 

-13, 

Hard 

Fault, 

all 

classes 

of 

Fault 

8. 

SVCall_IRQn 

-5, 

11 

System 

Service 

Call 

via 

SVC 

instruction 

9. 

DebugMonitor_IRQn 

-4, 

12 

Debug 

Monitor 

10. 

PendSV_IRQn 

-2, 

14 

Pendable 

request 

for 

system 

service 

11. 

SysTick_IRQn 

-1, 

15 

Tick 

Timer 

12./* 

---------------------- 

nRF51 

Specific 

13. 

POWER_CLOCK_IRQn 

0, 

POWER_CLOCK 

14. 

RADIO_IRQn 

1, 

RADIO 

15. 

UART0_IRQn 

2, 

UART0 

16. 

SPI0_TWI0_IRQn 

3, 

SPI0_TWI0 

17. 

SPI1_TWI1_IRQn 

4, 

SPI1_TWI1 

18. 

GPIOTE_IRQn 

6, 

GPIOTE 

19. 

ADC_IRQn 

7, 

ADC 

20. 

TIMER0_IRQn 

8, 

TIMER0 

21. 

TIMER1_IRQn 

9, 

TIMER1 

22. 

TIMER2_IRQn 

10, 

10 

TIMER2 

23. 

RTC0_IRQn 

11, 

RTC0 

24. 

TEMP_IRQn 

12, 

TEMP 

25. 

RNG_IRQn 

13, 

13 

RNG 

26. 

ECB_IRQn 

14, 

ECB 

27. 

CCM_AAR_IRQn 

15, 

CCM_AAR 

28. 

WDT_IRQn 

16, 

16 

WDT 

29. 

RTC1_IRQn 

17, 

17 

RTC1 

30. 

QDEC_IRQn 

18, 

18 

QDEC 

31. 

LPCOMP_COMP_IRQn 

19, 

19 

LPCOMP_COMP 

32. 

SWI0_IRQn 

20, 

20 

SWI0 

33. 

SWI1_IRQn 

21, 

21 

SWI1 

34. 

SWI2_IRQn 

22, 

22 

SWI2 

35. 

SWI3_IRQn 

23, 

23 

SWI3 

36. 

SWI4_IRQn 

24, 

24 

SWI4 

37. 

SWI5_IRQn 

25 

SWI5 

38.} 

IRQn_Type;

39.<

/span>

在进行中断处理时,一般都要按照这个步骤:

1、对要用到的中断初始化;

2、对用到的中断进行使能;

3、对中断进行优先级设置

1、中断初始化

nRF51822的外部I/O(暂时理解的程度以及用过的中断只有I/O中断,其他中断没有实践过)中断是基于任务和事件模式的。

按照nRF51822用户手册,每个GPIOTE通道的以下输入条件可以产生一个事件(在此可将事件理解为一个中断):

上升沿、下降沿或者任何变化。

因此,在进行中断初始化的时候,首先要将相应的中断输入I/O引脚设置为输入模式。

然后通过CONFIG[n]设置GPIOTE通道的模式MODE(任务或者事件)、关联任务OUT[n]或者事件IN[n]的引脚PSEL,触发方式POLARITY。

例如下面是将ROCKER_INTERRUPT引脚初始化为事件下降沿触发的事件IN[0]。

pre 

name="

code"

class="

objc"

NRF_GPIOTE->

CONFIG[0]=(GPIOTE_CONFIG_POLARITY_HiToLo<

GPIOTE_CONFIG_POLARITY_Pos) 

|(ROCKER_INTERRUPT<

GPIOTE_CONFIG_PSEL_Pos) 

3. 

|(GPIOTE_CONFIG_MODE_Event<

GPIOTE_CONFIG_MODE_Pos);

在对相关事件的触发方式以及关联引脚初始化完成之后,还需要通过INTENSET寄存器进行使能

1.NRF_GPIOTE->

INTENSET=GPIOTE_INTENSET_IN0_Set<

GPIOTE_INTENSET_IN0_Pos;

//Ê

¹

Ä

Ü

IN0Ê

Â

¼

þ

2、中断使能

在中断初始化中仅仅是对事件n的使能,在此要对相应的中断进行使能。

类比于Cortex-M3架构,在MDK内与NVIC相关的寄存器,MDK为其定义了如下的结构体

NVIC(NestedVectoredInterruptController)嵌套中断向量控制器

14px;

/** 

\ingroup 

CMSIS_core_register 

\defgroup 

CMSIS_NVIC 

Nested 

Vectored 

Controller 

(NVIC) 

\brief 

Type 

definitions 

the 

NVIC 

Registers 

4. 

@{ 

7./** 

Structure 

type 

to 

access 

(NVIC). 

9.typedef 

struct 

10.{ 

__IO 

uint32_t 

ISER[1];

Offset:

0x000 

(R/W) 

Set 

Enable 

Register 

12. 

RESERVED0[31];

ICER[1];

0x080 

Clear 

RSERVED1[31];

ISPR[1];

0x100 

Pending 

RESERVED2[31];

ICPR[1];

0x180 

RESERVED3[31];

RESERVED4[64];

IP[8];

0x300 

Priority 

21.} 

NVIC_Type;

23./*@} 

end 

group 

*/<

ISER[1]:

中断使能寄存器。

由前边可以看到,nRF51的寄存器编号为0-25,在这里ISER[1]为32位寄存器,总共可以表示32个中断,bit0-bit25分别对应中断0-25(其实后来发现在NVIC_EnableIRQ()函数中是将1左移IRQn位之后又与0x1F,也就是空出了低五位,所以在这里应该是对应的高地址,而把低位给空出来的)。

要使能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、I/O口映射等设置才算是一个完整的中断设置)。

此处是按照STM32中断设置理解的。

ICER[1]:

中断除能寄存器,和ISER的作用恰好相反,用来清除某个中断的使能的。

专门设置一个ICER来清除中断位,而不是向ISER写0来清除,这是因为NVIC的这些寄存器都是写1有效的,写0无效的。

ISPR[1]:

中断挂起控制寄存器。

通过置1可以将正在进行的中断挂起,而执行同级或者更高级别的中断。

ICPR[1]:

中断解挂控制寄存器。

通过置1可以将挂起的中断解挂。

IP[8]:

中断优先级控制寄存器组。

这个寄存器组相当重要。

中断分组与这个寄存器密切相关。

在这里插入一下中断优先级的理解。

因为以前都是用的STM32,在这里就按照Cortex-M3架构来理解。

Cortex-M3中有两个优先级的概念——抢占优先级和响应优先级,有人把响应优先级称作“亚优先级”和“副优先级”,每个中断源都需要被指定这两种优先级。

具有高抢占优先级的中断可以在具有低抢占优先级的中断处理过程中被响应,即中断嵌套。

当两个中断源的抢占优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个(在《原子教你玩STM32》中说在抢占优先级相同的中断,高优先级的响应优先级不可打断低响应优先级的中断,有待考证);

如果他们的抢占优先级和响应优先级相等,则根据他们在中断表中的排位顺序来决定先处理哪一个。

在STM32中需要用NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)先对中断优先级进行分组,这个分组在一个程序中只能设定一次,是在中断与复位控制寄存器SCB->

AIRCR中设置的,也就是分组之后所有的中断只能按照这个分组方式进行设定抢占优先级和响应优先级。

在对中断优先级进行分组设置之后,要对每个中断的中断源优先级进行设置,也就是设置中断优先级控制寄存器IP,中断源优先级具体设置了该中断源的优先级别。

在此先说一下STM32中断优先级设置的步骤:

系统运行开始的时候设置中断分组,确定组号,也就是确定抢占优先级和子优先级的分配位数,调用函数为NVIC_PriorityGroupConfig();

设置用到的中断的中断优先级别,对每个中断调用函数为NVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct);

而在nRF51822中,我现在还没有碰到中断优先级进行分组的情况,在此就先不写,如果将来用到,再进行相关补充

首先是中断使能,和STM32中在初始化NVIC_InitStruct结构体的同时完成中断使能不同,nRF51822通过专门的函数NVIC_EnableIRQ(IRQn_TypeIRQn)来实现响应中断使能,形参变量IRQn为要进行初始化的中断编号,在本博文的开头已经给出,在SDK的core-m0.h中定义,以下为中断使能函数。

1./** 

External 

The 

function 

enables 

device-specific 

interrupt 

in 

controller. 

\param 

[in] 

IRQn 

number. 

Value 

negative. 

7.__STATIC_INLINE 

void 

NVIC_EnableIRQ(IRQn_Type 

IRQn) 

8.{ 

NVIC->

ISER[0] 

(1 

((uint32_t)(IRQn) 

&

0x1F));

10.} 

13./** 

Disable 

disables 

19.__STATIC_INLINE 

NVIC_DisableIRQ(IRQn_Type 

20.{ 

ICER[0] 

22.} 

例如,要使能GPIOTE中断,则调用

1.NVIC_EnableIRQ(GPIOTE_IRQn);

3、中断优先级设置

中断优先级设置源函数如下:

sets 

priority 

an 

interrupt. 

\note 

set 

every 

core 

set. 

10.__STATIC_INLINE 

NVIC_SetPrior

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1