PAGE1
PAGE1
LPC1100系列的中断系统
中断系统概述
中断系统是嵌入式系统中一个非常重要的组成部分,它允许处理器在处理正常任务的同时响应外部或内部的突发事件。LPC1100系列微控制器使用基于Cortex-M0内核的中断控制器,该控制器提供了一种高效且灵活的方式来管理不同类型的中断。
中断控制器结构
LPC1100系列的中断控制器是基于ARMCortex-M0内核的嵌套向量中断控制器(NVIC)。NVIC支持多个中断源,并且可以对这些中断进行优先级管理。中断控制器的主要功能包括:
中断请求管理:处理不同来源的中断请求。
中断优先级管理:确定中断的优先级顺序。
中断向量表管理:存储中断处理函数的地址。
中断使能和禁用:控制哪些中断可以被处理器响应。
中断优先级
LPC1100系列的NVIC支持16个不同的优先级级别(0-15),其中0是最高优先级,15是最低优先级。中断优先级可以在NVIC的寄存器中进行配置。优先级管理确保了在多个中断同时发生时,处理器能够按照一定的顺序处理这些中断。
中断向量表
中断向量表是NVIC的一个重要组成部分,它存储了每个中断处理函数的地址。LPC1100系列的中断向量表通常位于Flash存储器的起始地址。处理器在接收到中断请求时,会根据中断向量表跳转到对应的中断处理函数。
中断使能和禁用
通过NVIC的寄存器,可以对每个中断进行使能或禁用操作。使能的中断可以在发生中断事件时被处理器响应,而禁用的中断则不会被处理。这种机制允许开发者根据应用需求灵活地控制中断的响应。
中断配置
初始化中断控制器
在使用中断之前,需要初始化NVIC。初始化包括设置中断优先级、使能中断以及配置中断向量表。
#includeLPC11xx.h
voidNVIC_Init(void){
//设置中断优先级
NVIC_SetPriority(WKT_IRQn,1);//设置WKT中断优先级为1
NVIC_SetPriority(TIMER32_0_IRQn,2);//设置32位定时器0中断优先级为2
//使能中断
NVIC_EnableIRQ(WKT_IRQn);//使能WKT中断
NVIC_EnableIRQ(TIMER32_0_IRQn);//使能32位定时器0中断
}
设置中断优先级
中断优先级的设置通过NVIC的NVIC_SetPriority函数完成。该函数需要两个参数:中断号和优先级。
voidSetInterruptPriority(void){
NVIC_SetPriority(WKT_IRQn,1);//设置WKT中断优先级为1
NVIC_SetPriority(TIMER32_0_IRQn,2);//设置32位定时器0中断优先级为2
}
使能和禁用中断
使能和禁用中断分别通过NVIC_EnableIRQ和NVIC_DisableIRQ函数完成。使能中断后,当对应的中断事件发生时,处理器会响应并处理该中断。
voidEnableInterrupts(void){
NVIC_EnableIRQ(WKT_IRQn);//使能WKT中断
NVIC_EnableIRQ(TIMER32_0_IRQn);//使能32位定时器0中断
}
voidDisableInterrupts(void){
NVIC_DisableIRQ(WKT_IRQn);//禁用WKT中断
NVIC_DisableIRQ(TIMER32_0_IRQn);//禁用32位定时器0中断
}
中断处理函数
中断处理函数是当特定中断发生时,处理器跳转执行的代码。这些函数通常需要在启动代码中定义,并且在中断向量表中注册。
定义中断处理函数
中断处理函数的定义需要遵循特定的命名规则,例如WKT_IRQHandler用于WKT中断,TIMER32_0_IRQHandler用于32位定时器0中断。
voidWKT_IRQHandler(void){
if(WKT_INTSTATWKT_INTSTAT_INT){
//清除中断标志
WKT_INTCLR=WKT_INTCLR_INT;
//处理WKT中断
//例如:读取WKT计数器值
uint32_twkt_count=WKT_COUNT;
//执行其他中断处理任务
//...