嵌入式--中断系统学习(中断系统+NVIC+SYSCFG+优先级配置+中断嵌套+中断架构)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌⼊式--中断系统学习(中断系统+NVIC+SYSCFG+优先级配置
+中断嵌套+中断架构)
⼀、嵌⼊式中断系统
(1)中断原理
⾸先要搞明⽩怎么实现的中断,CPU遇到紧急事件要处理,就跳转到紧急事件,再返回来继续处理
就时SP配合PC的⼀套操作了
1、进⼊中断
(a)处理器⾃动保存现场到栈⾥SP,PC,xPSR,R0-R3,LR,
(b)⼊栈结束以后,ISR开始执⾏(中断服务)
(c)中断会⾃动找到中断⼊⼝函数-》Vector⾥⾯声明的
2、退出中断
(a)现场恢复PC,SP
(b)出栈完成执⾏下⼀条
⼆、嵌套向量控制器NVIC
NVIC专门⽤于管理中断控制器(CPU并不知道谁传来的中断请求)
NVIC功能:
(1)中断管理
1、给中断使能/禁⽌
ISER--中断使能
ICER--中断禁⽌
2、设置挂起状态
ISPR--中断挂起
ICPR--中断挂起清除
3、设置脉冲/下降触发
(2)中断异常的向量化处理
Reset+SVCall+系统调⽤+Systick
当产⽣异常时,处理器把PC设置为中断向量(中断⼊⼝),每⼀个异常就是⼀个中断号,汇集起来就是中断向量表
其中位置系统内部是负数,外部异常时正数。

并且优先级值越⼩,优先级越⾼
(3)中断配置
1、中断分组
STM32可以将中断分为5组-》0-4,其中划分两种:抢占优先级和响应优先级
抢占优先级响应级别⾼于响应优先级。

其中数值越⼩优先级越⾼
嵌套:
⾼优先级的抢占优先级是可以打断正在进⾏的低抢占优先级中断的;
抢占优先级相同的中断,⾼响应优先级不可以打断低响应优先级的中断;
抢占优先级相同的中断,当两个中断同时发⽣的情况下,哪个响应优先级⾼,哪个先执⾏;
如果两个中断的抢占优先级和响应优先级都是⼀样的话,则看哪个中断先发⽣就先执⾏;
1. 打断的情况只会与抢占优先级有关,和响应优先级⽆关!
⼀般情况下,系统代码执⾏过程中,只设置⼀次中断优先级分组,⽐如分组2,设置好分组之后⼀般不会再改变分组。

随意改变分组会导致中断管理混乱,程序出现意想不到的执⾏结果。

因此设置组优先级
void NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)就是2:2的分配
2、中断优先级
NVIC_InitTypeDef结构体
NVIC_IRQChannel:定义初始化的是哪⼀个中断,这个可以在stm32f10x.h⽂件中查到每个中断对应的名字,如USART1_IRQn;
NVIC_IRQChannelPreemptionPriority:定义此中断的抢占优先级别;
NVIC_IRQChannelSubPriority:定义此中断的响应优先级别;
NVIC_IRQChannelCmd:该中断是否使能。

实例:
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串⼝1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;// 抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// ⼦优先级位2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据上⾯指定的参数初始化NVIC寄存器
copy好累。

原博主好棒快去康康↓
 三、外部中断配置寄存器
EXTIx哇终于到这⾥我⼼好累
这个图⾥不是有
外设吗,呐EXTI就是管理外设请求的康康:EXTIx代表 PAx,PBx,PCx...的x号引脚,每⼀个x引脚智能有⼀个响应中断
⽤SYSCFG来配置对应SYSCFG功能可多了
只有低16位可⽤,对应的16个类型分组
⼀个寄存器可以配4类引脚所以⼀共有4个寄存器来配置对应的端⼝
四、中断的构架
我好累
 五:中断的实验
 1、按键启动流⽔灯
配置KEY
⾸先看KEY的原理图
你看吧,就是按下以后KEYx对应为0,现在看看KEYx对应的引脚
看清楚了对应的引脚号,
(1)重写中断⼊⼝函数
到startup.s⾥找到EXTI0。

2.3.4对应的⼊⼝函数改名⾃⼰实现
具体怎么实现的key_irqHander最后再说
 (2)GPIO的中断初始
GPIO配置
SYSCFG配置
EXIT
NVIC
(3)结合前⾯的LED初始
可以编写最后的按键中断函数。

相关文档
最新文档