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