基本信息
文件名称:NXP 系列:LPC1700 系列 (基于 Cortex-M3)_16. LPC1700系列中断系统.docx
文件大小:27.11 KB
总页数:38 页
更新时间:2025-06-14
总字数:约1.66万字
文档摘要

PAGE1

PAGE1

16.LPC1700系列中断系统

16.1中断系统概述

中断系统是嵌入式系统中一个非常重要的组成部分,它允许处理器在执行当前任务时,能够响应外部或内部事件,从而提高系统的响应速度和效率。LPC1700系列基于Cortex-M3内核,其中断系统支持多种中断源,并且具有强大的中断处理能力。

16.1.1中断源

LPC1700系列支持多种中断源,包括但不限于:

外部中断(ExternalInterrupts)

定时器中断(TimerInterrupts)

UART中断(UARTInterrupts)

ADC中断(ADCInterrupts)

I2C中断(I2CInterrupts)

SPI中断(SPIInterrupts)

DMA中断(DMAInterrupts)

每个中断源都有对应的中断请求线(IRQ),这些请求线可以通过中断控制器进行管理和优先级设置。

16.1.2中断控制器

LPC1700系列使用了一个嵌套向量中断控制器(NVIC),该控制器负责管理中断的优先级、使能和屏蔽。NVIC支持多个中断源,并且可以配置各个中断的优先级,从而确保高优先级的中断能够优先被处理。

16.2中断优先级和分组

16.2.1中断优先级

LPC1700系列的NVIC支持16个优先级级别,优先级编号从0到15,其中0为最高优先级,15为最低优先级。每个中断源都可以配置其优先级,以便在多个中断同时发生时,处理器能够按照优先级顺序进行处理。

16.2.2中断分组

Cortex-M3内核的NVIC支持中断分组,即将中断优先级分为抢占优先级和子优先级。LPC1700系列的NVIC支持4位的中断优先级设置,可以通过编程来配置分组方式。例如,可以将4位优先级分为2位抢占优先级和2位子优先级,或者1位抢占优先级和3位子优先级。

16.2.2.1配置中断分组

配置中断分组可以通过NVIC的NVIC_IPR寄存器进行。以下是一个示例代码,展示了如何配置中断分组:

//配置中断分组

voidconfigure_interrupt_grouping(uint8_tgroup,uint8_tsub){

//计算分组配置值

uint32_tgrouping=(group4)|sub;

//设置分组配置

NVIC_SetPriorityGrouping(grouping);

}

//示例:配置2位抢占优先级和2位子优先级

configure_interrupt_grouping(2,2);

16.2.3设置中断优先级

设置中断优先级可以通过NVIC的NVIC_IPRn寄存器进行。以下是一个示例代码,展示了如何设置定时器0的中断优先级:

//设置定时器0的中断优先级

voidset_timer0_priority(uint8_tpriority){

//设置定时器0的中断优先级

NVIC_SetPriority(TIMER0_IRQn,priority);

}

//示例:设置定时器0的优先级为5

set_timer0_priority(5);

16.3中断使能和屏蔽

16.3.1使能中断

使能中断可以让处理器响应特定的中断请求。LPC1700系列的NVIC提供了使能中断的功能。以下是一个示例代码,展示了如何使能定时器0的中断:

//使能定时器0中断

voidenable_timer0_interrupt(void){

//使能定时器0中断

NVIC_EnableIRQ(TIMER0_IRQn);

}

//示例:使能定时器0中断

enable_timer0_interrupt();

16.3.2屏蔽中断

屏蔽中断可以暂时禁止处理器响应特定的中断请求。LPC1700系列的NVIC提供了屏蔽中断的功能。以下是一个示例代码,展示了如何屏蔽定时器0的中断:

//屏蔽定时器0中断

voiddisable_timer0_interrupt(void){

//屏蔽定时器0中断

NVIC_DisableIRQ(TIMER0_IRQn);

}

//示例:屏蔽定时器0中断

disable_timer0_interrupt();

16.4中断服务例程(ISR)

16.4.1中断服务例程的定义

中断服务例程(ISR)是在中断发生时由处理器自动调用的函数。每个中断源都有对应的ISR,通过在启动文件中定义中断向量表,可以指定每个中断的ISR。

16.4.1.1定义中断服务例程

以下是一个示例代码,展示了如何