基本信息
文件名称:NXP 系列:LPC1768 (适用于复杂娱乐设备)_(16).LPC1768中断系统.docx
文件大小:24.84 KB
总页数:20 页
更新时间:2025-06-15
总字数:约1.16万字
文档摘要

PAGE1

PAGE1

LPC1768中断系统

中断系统概述

中断系统是嵌入式系统中的一个关键组件,用于处理外部事件或内部任务,确保处理器能够及时响应并处理这些事件。LPC1768的中断系统基于ARMCortex-M3内核,具有强大的中断处理能力。本节将详细介绍LPC1768的中断系统的工作原理和配置方法。

中断源

LPC1768支持多种中断源,包括外部中断、定时器中断、UART中断、SPI中断等。每个中断源都有一个对应的中断请求线(IRQ)和中断向量表条目。以下是一些常见的中断源:

外部中断(ExternalInterrupts):通过外部中断控制器(EIC)处理,可以配置为上升沿、下降沿或电平触发。

定时器中断(TimerInterrupts):通过定时器模块(如Timer0、Timer1等)产生中断。

UART中断(UARTInterrupts):通过UART模块产生中断,用于串行通信的数据接收和发送。

SPI中断(SPIInterrupts):通过SPI模块产生中断,用于同步串行通信。

中断优先级

LPC1768的中断系统支持中断优先级配置。每个中断都有一个优先级值,优先级值越小,优先级越高。中断优先级的配置可以通过编程NVIC(NestedVectoredInterruptController)寄存器来实现。以下是一个配置定时器中断优先级的示例:

//配置定时器0中断优先级

voidTimer0_SetPriority(uint8_tpriority){

NVIC_SetPriority(TIMER0_IRQn,priority);

}

中断向量表

LPC1768的中断向量表位于闪存或SRAM的固定地址。每个中断向量表条目包含一个中断处理函数的地址。可以通过编程向量表来配置中断处理函数。以下是一个配置中断向量表的示例:

//定义中断处理函数

voidTimer0_IRQHandler(void){

//中断处理代码

if(Timer_GetIRQStatus(TIMER0_BASE)TIMER_INTEN){

//清除中断标志

Timer_ClearINT(TIMER0_BASE);

//处理定时器中断

//例如:更新某些状态或触发某个事件

}

}

//配置中断向量表

voidTimer0_SetVector(void){

NVIC_SetVector(TIMER0_IRQn,(uint32_t)Timer0_IRQHandler);

}

中断配置流程

1.使能中断

在LPC1768中,使能中断需要配置相应的中断使能寄存器。以下是一个使能外部中断的示例:

//使能外部中断

voidEINT_SetEnable(uint8_tpin,uint8_tenable){

if(enable){

LPC_PINCON-PINSEL0|=(1(pin*2));//配置引脚为外部中断

LPC_SCB-SYSAHBCLKCTRL|=(14);//使能外部中断控制器时钟

LPC_GPIOINT-IO0IntEnR|=(1pin);//使能上升沿中断

NVIC_EnableIRQ(EINT0_IRQn);//使能外部中断0

}else{

LPC_GPIOINT-IO0IntEnR=~(1pin);//禁用上升沿中断

NVIC_DisableIRQ(EINT0_IRQn);//禁用外部中断0

}

}

2.配置中断触发模式

LPC1768支持多种中断触发模式,包括上升沿、下降沿和电平触发。以下是一个配置外部中断触发模式的示例:

//配置外部中断触发模式

voidEINT_SetTriggerMode(uint8_tpin,uint8_tmode){

if(mode==RISING_EDGE){

LPC_GPIOINT-IO0IntEnR|=(1pin);//使能上升沿中断

LPC_GPIOINT-IO0IntEnF=~(1pin);//禁用下降沿中断

}elseif(mode==FALLING_EDGE){

LPC_GPIO