CKS32F103微控制器教学课件7 中断和事件_第1页
CKS32F103微控制器教学课件7 中断和事件_第2页
CKS32F103微控制器教学课件7 中断和事件_第3页
CKS32F103微控制器教学课件7 中断和事件_第4页
CKS32F103微控制器教学课件7 中断和事件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CKS32F103微控制器教学课件07中断和事件简单来说,中断就是打断CPU当前正在做的事情,让它去处理更紧急的任务。就像这张图里的交警,当路口出现紧急情况时,他会中断正常的车流,优先处理特殊情况。嵌入式系统在运行过程中需要及时应对各种突发事件。外部设备可能引起引脚电平变化,如锅炉水位越限、电机温度异常、火焰传感器报警等,片上外设则可能产生计数器溢出、AD转换完成等信号。这些事件在安全生产中的紧急性和重要性各不相同,因此处理方式也有所区别当检测到锅炉水位低于下限时,系统会通过增大给水调节阀开度来提升液位,同时触发报警提示。而当电机温度传感器监测到温度超过设定值时,温度继电器则会触发联锁保护机制,立即切断电机电源、强制停机并启动散热装置,以避免温度持续升高导致绕组绝缘损坏或线圈烧毁。相比之下,电机过温保护的紧急程度明显高于水位越限。引言:为何需要中断与事件?轮询方式的弊端•效率低下:CPU不断循环查询事件状态,占用大量资源,导致其他任务无法及时执行。•实时性差:由于CPU有查询间隔,极易错过持续时间极短的信号脉冲或紧急事件。中断与事件的优势•中断(Interrupt):支持“主动上报”机制,打断CPU当前流程,即时响应处理,极大提升系统实时性。•事件(Event):纯硬件级信号联动,无需CPU介入即可直接触发DMA或外设操作,实现极致效率。为什么我们需要中断和事件?想象一下,如果CPU只能通过不断检查的方式来发现锅炉水位是否越限、电机温度是否异常、按键是否被按下等,会非常低效。中断和事件机制正是为了解决这个问题。中断让CPU能被事件主动通知,而事件则能实现硬件间的自动协同工作,两者共同构成了现代MCU高效运行的基础。基于ARMCortex-M内核的MCU,对紧急或重要状况的响应依赖中断和事件两种硬件触发机制。二者虽然都可以由片上外设或片外外设触发,但在触发后的处理方式和对系统的影响上存在显著差异。中断需要CPU介入并执行相应的中断服务程序,而事件则无需CPU参与即可由硬件直接完成后续动作7.1中断(Interrupt)和事件(Event)▍1.什么是中断?程序运行过程中,当发生特殊或异常事件时,CPU会暂时中止当前正在执行的程序,转而执行与异常相关的处理程序,待处理完成后再返回原来的位置继续运行。实时响应立即响应按键输入、定时器溢出等异步事件,保证实时性。提高效率无需主动“轮询”等待事件,通过被动通知的方式,最大化解放CPU资源。处理异常在系统运行过程中,快速处理硬件错误、非法指令等突发故障。7.1中断(Interrupt)和事件(Event)系统运行过程中能够引发中断的事件称为中断源。中断源通常以脉冲或电平的形式出现。中断源:分为外部中断源和内部中断源。外部中断源指来自MCU外部的事件,例如按键操作、传感器的报警信息、通信接口接收数据等。内部中断源指由MCU内部或片上外设产生的事件,如定时器溢出、ADC转换结束、系统异常、软件触发等。由外部中断源触发的中断称为外部中断,由内部中断源触发的中断称为内部中断。中断源7.1中断(Interrupt)和事件(Event)中断服务程序ISR

当某个紧急或重要事件触发中断时,CPU将跳转至用户编写的处理代码,该代码称为中断服务程序,即ISR。ISR需针对性处理特定中断事件,快速响应并高效执行,以应对高优先级任务ISR中的常见任务:包括清除中断标志、数据处理和紧急控制、状态更新等。清除中断标志是了避免中断反复触发。ISR的质量直接影响系统的稳定性,因此编写时需遵循代码尽量简短、减少嵌套、慎用全局资源和避免阻塞操作的原则7.1中断(Interrupt)和事件(Event)ISR设计时尽量遵循:尽量简短:ISR会中断原程序执行,过长的处理会增加系统延迟,尤其是实时系统。复杂逻辑应放在ISR之外,可在ISR中设置标志位通知主程序处理。减少嵌套:虽然Cortex-M支持高优先级中断打断低优先级中断的嵌套操作,但过多嵌套会增加栈空间消耗和调试难度。慎用全局资源:ISR访问全局变量时,需避免主程序与ISR的资源竞争,可通过关中断、使用互斥锁等方式。避免阻塞操作:ISR中禁止使用延时函数、等待外设响应等阻塞性操作,否则会导致其他中断无法及时响应。7.1中断(Interrupt)和事件(Event)中断处理过程:包括中断请求产生、CPU响应中断、保护现场与执行ISR、恢复现场与继续执行原程序。中断请求产生:外部或内部事件的中断源触发中断,并在中断使能的情况下向CPU发送中断请求信号,硬件将该中断请求挂起,同时置位中断标志。挂起指的是中断请求已经产生,但由于某种原因暂时未被CPU处理,处于等待状态的情况。

CPU响应中断:若CPU处于中断使能状态,即未屏蔽该中断,且当前正在执行的指令已完成,CPU将暂停原程序执行,转而响应中断。7.1中断(Interrupt)和事件(Event)保护现场与执行ISR:CPU首先保存原程序的上下文信息,如PC值、寄存器值等,通常存储于栈内存中,以防止后续操作覆盖关键数据。保护现场是确保中断处理完成后能正确恢复原程序运行的关键步骤。随后,CPU跳转至ISR入口地址执行相应的处理逻辑,这是中断处理的核心环节,由硬件自动完成以确保跳转的快速与准确。恢复现场与继续执行原程序:中断服务程序结束后,CPU从之前保存的上下文信息中恢复原程序状态,即恢复现场。恢复现场的作用与保护现场完全对应,将中断发生前保存的系统状态重新加载到CPU中,并根据保存的PC值返回原程序中断位置,继续执行后续指令7.1中断(Interrupt)和事件(Event)7.1中断(Interrupt)和事件(Event)中断优先级:基于紧急程度的分级机制称为中断优先级.为确保CPU能及时响应并处理系统中不同紧急程度的事件,需根据中断源的重要性、紧迫程度及实时性要求,为其划分不同的优先级级别.中断嵌套:高优先级中断对低优先级中断的抢占.如在计数器溢出中断发生后,CPU响应并执行其对应的ISR。此时检测到锅炉水位低于下限,而锅炉水位中断的优先级高于计数器溢出中断,CPU则立即保存当前计数器ISR的执行现场,并暂停其运行,转而进入锅炉水位ISR。当锅炉水位ISR执行完毕后,CPU再恢复之前保存的现场,继续完成计数器溢出ISR的执行7.1中断

和事件▍2.事件事件是嵌入式系统中一种特殊的触发机制,主要用于触发特定外设模块操作或唤醒内核,不引起CPU程序流程的跳转,因此也被称为非中断型事件。硬件级同步外设间直接触发,无需CPU介入,实现精准的时序同步,如定时器自动触发ADC转换。零CPU开销处理逻辑完全由硬件完成,响应速度极快,不占用宝贵的CPU资源去处理中断。低功耗唤醒可配置为从停机或待机等低功耗模式中唤醒系统,平衡系统性能与功耗需求。事件的触发逻辑与中断类似,均由外部信号或内部状态的变化触发,触发源称为事件源。3中断与事件的区别与联系与中断相比,事件没有对应的服务函数,也不涉及现场保存与恢复,能显著降低CPU负载,提升系统响应速度。因此事件机制特别适用于硬件间需直接联动、无需CPU参与中间环节的场景7.1中断

和事件中断(Interrupt)●触发对象:CPU(软件层面的响应)●CPU参与:需要,执行中断服务函数●响应路径:经NVIC仲裁,产生异常进入●延迟表现:相对较高(微秒级

μs)●典型用途:处理按键、串口等需CPU干预的任务事件(Event)●触发对象:DMA、ADC等其他硬件外设●CPU参与:不需要,纯硬件联动操作●响应路径:直接连接到目标外设,绕过CPU●延迟表现:极低(纳秒级ns),效率极高●典型用途:硬件模块间的自动同步与握手二者联系:同一个物理信号源(例如GPIO引脚的电平变化或定时器溢出),可同时被配置为触发中断(唤醒CPU处理逻辑)和事件(触发DMA传输数据),灵活满足复杂场景需求。7.1中断

和事件项目中断事件触发方式外部信号或内部状态变化触发外部信号或内部状态变化触发触发结果CPU跳转执行中断服务程序(ISR)直接驱动相关外设硬件操作CPU参与需要CPU介入,保存/恢复现场并执行ISR不需要CPU介入,全程由硬件完成程序支持必须编写对应的中断服务函数无需编写服务函数效率影响需保存/恢复现场,执行ISR,增加CPU负担提高系统效率,减轻CPU负担嵌套可能可设置优先级并允许中断嵌套不存在嵌套概念7.2CKS32F103中断系统特点Cortex-M3的核心组件嵌套向量中断控制器NVIC:与内核紧密耦合,负责统一管理所有的异常即内核异常和外设中断,可实现中断的启用与屏蔽、优先级分配、嵌套控制等,并支持低延迟响应及晚到中断,实现高优先级中断在低优先级处理期间到达时的高效处理。CKS32F103直接采用Cortex-M3内置的NVIC作为中断控制器,因此中断优先级管理、嵌套机制、低延迟响应等核心功能均由NVIC实现,与具体厂商无关。CKS32F103芯片厂商的主要工作是在外设层面将外部中断挂接到NVIC的中断通道,而具体的中断源数量、类型及在向量表中的分布位置,则由CKS32F103厂商定义和实现。7.2CKS32F103中断系统特点CKS32F103芯片中NVIC的特点:43个可屏蔽中断通道,除了16个Cortex™-M3的中断线;16个可编程的优先等级,使用了4位中断优先级;低延迟的异常和中断处理;电源管理控制;系统控制寄存器的实现;Cortex-M3内核与异常处理程序之间建立对应关系的关键是异常向量表。异常向量表相当于一套导航系统,通过固定的地址映射机制,实现对各类异常的快速定位、准确区分与统一管理,是保证嵌入式系统稳定运行的关键硬件结构7.3异常向量表(ExceptionVectorTable)中断映射:将外设产生的中断请求与处理器可识别的中断向量建立对应关系的过程异常向量表:反映中断映射关系,是ARM架构CPU中实现异常快速响应的关键数据结构。异常向量表中的每个元素对应一个异常处理程序的入口地址,用于在异常发生时,快速引导CPU跳转到对应的处理代码中断请求号IRQn:所有异常的唯一标识,分为内核异常向量和外设中断向量两部分。内核异常向量:由ARM官方定义,属于系统级内核异常。其IRQn编号为负数,在所有Cortex-M3处理器中固定不变,无厂商差异,优先级通常高于外设中断。例如Reset、NMI、HardFault、SysTick等。外设中断向量:由芯片厂商根据自身器件的外设资源进行定义,IRQn编号为非负数。7.3异常向量表(ExceptionVectorTable)异常/中断的入口地址当异常或者中断发生时,若CPU响应这些异常或者中断,需要获取相应异常或中断的中断服务程序入口地址,再由入口地址跳转到中断服务程序执行。对于CKS32F103,当某个中断被响应时,硬件会根据中断源的IRQn计算中断服务程序的地址,公式如下:中断服务程序地址=向量表基地址+(IRQn+16)×4CKS32F103的默认向量表基地址=0x00000000CKS的固件库文件

cs32f10x.h通过宏定义将IRQn号与宏名联系起来,编写中断服务程序时直接使用宏名即可。中断入口地址在启动代码文件中定义,如startup_cs32f10x_yy.s文件7.4片上外设的中断/事件机制片上外设中断的名称:由于中断服务程序名称与向量表中的入口地址强绑定,以便CPU通过向量表索引直接跳转至该函数名对应的地址,因此函数名称不允许随意修改。//cs32F10x.h中定义的中断请求编号TIM3_IRQn=29,/*!<TIM3globalInterrupt*/I2C1_EV_IRQn=31,/*!<I2C1EventInterrupt*/I2C1_ER_IRQn=32,/*!<I2C1ErrorInterrupt*/SPI1_IRQn=35,/*!<SPI1globalInterrupt*/USART1_IRQn=37,/*!<USART1globalInterrupt*/USART2_IRQn=38,/*!<USART2globalInterrupt*///startup_cks32f10x_yy.s中定义的中断服务程序名称TIM3_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandlerSPI1_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandler7.5外部中断/事件与通用GPIO映射CKS32F103提供19条独立的外部中断线EXTI0~EXTI18。每条EXTI线都用于将外部

GPIO引脚信号或内部特定外设信号映射为中断或事件请求,且同一时刻每条EXTI线仅能绑定一个输入信号源,确保触发逻辑无冲突。EXTI0~EXTI15为GPIO引脚的专用映射通道,解决GPIO引脚数量远多于EXTI线数量的扩展需求。CKS32F103的GPIO引脚多达80余个,远多于EXTI0~EXTI15的16条线,因此MCU通过功能复用AFIO的映射机制,保证任意GPIO引脚均可作为外部中断源或事件源。7.5外部中断/事件与通用GPIO映射

EXTI16~EXTI18为MCU内部特定外设信号的映射通道,仅连接与系统核心状态相关的外设,无法修改信号源,用于监测MCU关键运行状态并触发响应。电源电压调节器PVD映射到EXTI16,当电源电压低于阈值时,通过EXTI16产生中断或事件,处理电源异常。RTC闹钟事件映射到EXTI17,产生定时唤醒或触发中断信号。USB唤醒信号映射到EXTI18,处理USB模块的唤醒事件。19条中断/事件线分布EXTI0~15·GPIO输入对应芯片的GPIO引脚输入,是开发中处理按键、传感器等外部信号的最常用中断源EXTI线16连接到PVD(可编程电压监测器)输出,监测电源电压异常EXTI线17连接到RTC(实时时钟)闹钟事件,用于从停机/待机模式唤醒系统。EXTI线18连接到USB唤醒事件。7.5外部中断/事件与通用GPIO映射

GPIO与EXTI线的映射关系见图7‑2,EXTI0~EXTI15采用同序号GPIO引脚共享一条EXTI线的规则。若某个GPIO引脚序号已经做为外部中断源,则同序号的其它GPIO引脚不能再做为中断源。7.10外部中断/事件相关寄存器及关键位配置基地址为0x40010400寄存器名称偏移地址复位值功能及关键位描述中断屏蔽寄存器:EXTI_IMR0x000x00000000RW:设置EXTIx线是否产生中断请求,x=0~18;D[x]:MRx,对应EXTIx线的中断屏蔽位,1=允许,0=屏蔽;例如:MR0=1,允许EXTI0中断;事件屏蔽寄存器:EXTI_EMR0x040x00000000RW:设置EXTIx线是否产生事件请求,x=0~18;D[x]:MRx,对应EXTIx线的事件请求,1=允许,0=屏蔽;例如:MR0=1,允许EXTI0事件请求;上升沿触发选择寄存器:EXTI_RTSR0x080x00000000RW:设置EXTIx线上升沿触发,x=0~18;D[x]:TRx,对应EXTIx线的上升沿触发,1=允许,0=禁止;例如:TR0=1,允许EXTI0上升沿触发;下降沿触发选择寄存器:EXTI_FTSR0x0C0x00000000RW:设置EXTIx线下降沿触发,x=0~18;D[x]:TRx,对应EXTIx线的下降沿触发,1=允许,0=禁止;例如:TR0=1,允许EXTI0下降沿触发;软件中断事件寄存器:EXTI_SWIER0x100x00000000RW:设置EXTIx线软件中断,x=0~18;D[x]:SWIERx,当该位为0时,写1将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中允许产生该中断,则产生中断。挂起寄存器:EXTI_PR0x140x00000000RcW1:指示哪个EXTI线产生中断请求,x=0~18;D[18:0]:PRx,1=EXTIx线已触发中断/事件,需写1清除,例如:PR0=10,EXTI10被触发7.6外部中断/事件控制器(EXTI)

(Externalinterrupt/eventcontroller)EXTI定义将MCU片外外设信号和部分片上外设信号安全接入NVIC处理的关键模块是外部中断/事件控制器EXTI。EXTI:是芯片厂商在Cortex-M3内核外围设计的一个外设模块,将GPIO引脚或部分片上外设信号映射到中断线,并提供触发方式选择、事件输出、中断挂起等功能。EXTI独立于内核,负责监测并处理来自芯片引脚或内部外设的中断请求,特点:●触发灵活:支持上升沿、下降沿或双边沿触发方式,可根据应用场景动态配置。●独立管理:每一条中断/事件线均可单独配置屏蔽状态,互不干扰,实现精细化控制EXTI结构6个相关寄存器组成,包括:中断屏蔽寄存器EXTI_IMR事件屏蔽寄存器EXTI_EMR上升沿选择寄存器EXTI_RTSR下降沿选择寄存器EXTI_FTSR软件中断/事件寄存器EXTI_SWIER挂起寄存器EXTI_PR7.6外部中断/事件控制器(EXTI)EXTI的核心逻辑在于将GPIO输入信号进行边沿检测后,依据配置将信号导向不同的处理路径,以实现中断唤醒CPU或硬件事件触发的功能。中断路径(InterruptPath)检测到有效边沿跳变后,经中断屏蔽寄存器(IMR)与挂起寄存器(PR)的逻辑控制,最终向NVIC发送中断请求,以唤醒CPU进行响应处理。2.中断的传输路径7.6外部中断/事件控制器(EXTI)输入信号在经过边沿检测后,兵分两路。一路走向中断路径,最终唤醒CPU;另一路走向事件路径,直接触发其他硬件。可通过配置IMR和EMR寄存器,决定让信号产生中断、产生事件,还是两者都产生事件路径(EventPath)经事件屏蔽寄存器(EMR)控制,直接产生脉冲信号输出。此过程无需CPU介入,常用于直接触发定时器、DMA

等其他片上外设。关键配置寄存器:EXTI_IMR/EMR/RTSR/FTSR/PR3.事件的传输路径7.6外部中断/事件控制器(EXTI)需要产生事件时须先配置并使能事件线。根据事件的边沿信号类型设置2个边沿选择寄存器,同时在事件屏蔽寄存器的相应位写1允许事件请求。当事件线上发生了预设的边沿后,产生一个事件请求脉冲7.6外部中断/事件控制器(EXTI)#include"cs32f10x.h"voidEXTI_PA7_Init(void){/*1.开启GPIOA与AFIO时钟*/RCC->APB2ENR|=(1<<2);//IOPAEN:使能GPIOA时钟RCC->APB2ENR|=(1<<0);//AFIOEN:使能AFIO时钟/*2.配置PA7为输入模式(上拉输入)*///PA7在CRL中配置:CNF7=10(上拉/下拉),MODE7=00(输入)GPIOA->CRL&=~(0xF<<(7*4));//清除原配置GPIOA->CRL|=(0x8<<(7*4));//CNF7=10,MODE7=00GPIOA->ODR|=(1<<7);//上拉(ODR=1表示上拉)/*3.配置EXTI7映射到PA7*/AFIO->EXTICR[1]&=~(0xF<<12);//EXTICR2[15:12]对应EXTI7AFIO->EXTICR[1]|=(0x0<<12);//选择PA7(0000)/*4.配置EXTI7*/EXTI->IMR|=(1<<7);//使能中断请求EXTI->EMR&=~(1<<7);//屏蔽事件(只用中断)EXTI->RTSR|=(1<<7);//上升沿触发EXTI->FTSR&=~(1<<7);//禁止下降沿触发/*5.配置NVIC,略*/}CKS32F103使用PA7作为EXTI输入中断源程序代码4.中断初始化程序EXTI不仅能响应硬件信号,用户还可以通过软件来“伪造”一个中断或事件。该功能在调试时非常有用7.7软件中断/事件软件中断/事件:通过软件方式主动触发中断或事件,灵活模拟硬件行为实现方式向软件中断事件寄存器(EXTI_SWIER)的相应位写1该操作会置位挂起寄存器(EXTI_PR)的对应位,效果与检测到实际的硬件电平跳变一致。操作效果向EXTI_SWIER的第x位写1后:•若该EXTI线的EXTI_IMR对应位使能,将产生中断请求。•若该EXTI线的EXTI_EMR

对应位使能,将产生脉冲信号,可触发DMA请求。用途🛠软件调试:无需连接硬件,直接在代码中触发中断,验证中断服务函数逻辑的正确性。🎭任务模拟:在自动化测试或特定逻辑中,模拟按键、传感器等外部硬件事件的发生。⚡强制触发:在复杂软件条件满足时,强制触发关键流程或异常处理操作。相关代码:7.7软件中断/事件EXTI->SWIER|=(1<<0);//触发EXTI0软件中断//使能EXTI0的事件(而非中断)EXTI->EMR|=(1<<0);//软件触发EXTI0事件EXTI->SWIER|=(1<<0);CKS32F103利用NVIC可实现灵活的中断优先级管理。除三个被内核固定的高优先级异常Reset、NMI和

HardFault

不可编程设置外,其余中断的优先级均可配置。CKS32F103使用8位优先级寄存器NVIC_IPR中的高4位配置中断优先级,因此理论上支持16级中断优先级。7.8中断优先级管理但在实际应用中,过多的中断嵌套会导致中断处理时间增加,从而影响系统的实时性和响应速度。此外,嵌套级数还受堆栈空间限制,因为每次中断都需要保护现场的上下文信息。所以实际应用中的中断嵌套级数一般小于10级中断优先级管理:当多个中断同时发生时,CPU的处理顺序。7.8中断优先级管理1抢占优先级(PreemptionPriority)决定了一个中断是否能够打断或“抢占”正在执行的其它中断•规则:高抢占优先级的中断请求,可立即打断当前低抢占优先级中断的执行2.子优先级(Subpriority)•子优先级应用在多个中断的抢占优先级相同的情况下,决定这些中断的执行顺序•规则:CPU将按照“子优先级”的高低顺序,依次响应中断请求。设置中断和复位控制寄存器SCB_AIRCR选择不同的优先级分组,不同分组抢占优先级和子优先级所占位数不同。抢占优先级和子优先级的数值越小,优先级越高3.优先级分组(NVIC_PriorityGroupConfig)标准外设库misc.h和misc.c文件中定义了NVIC的相关中断配置,可直接利用NVIC的优先级分组函数,设置抢占优先级和子优先级的位数7.8中断优先级管理文件中定义了结构体和5个相关函数voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct);voidNVIC_SetVectorTable(uint32_tNVIC_VectTab,uint32_tOffset);VoidNVIC_SystemLPConfig(uint8_tLowPowerMode,FunctionalStateNewState);voidSysTick_CLKSourceConfig(uint32_tSysTick_CLKSource);分组管理函数voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)设置中断的优先级分组7.8中断优先级管理优先级分组、抢占优先级和子优先级的取值范围表NVIC_PriorityGroup抢占优先级取值范围子优先级取值范围描述可配置的优先级NVIC_PriorityGroup_000-15抢占优先级占0位,子优先级占4位0个抢占优先级,16个子优先级NVIC_PriorityGroup_10-10-7抢占优先级占1位,子优先级占3位2个抢占优先级,8个子优先级NVIC_PriorityGroup_20-30-3抢占优先级占2位,子优先级占2位4个抢占优先级,4个子优先级NVIC_PriorityGroup_30-70-1抢占优先级占3位,子优先级占1位8个抢占优先级,2个子优先级NVIC_PriorityGroup_40-150抢占优先级占4位,子优先级占0位16个抢占优先级,0个子优先级7.8中断优先级管理例如:RTC中断、外部中断0和外部中断1的抢占优先级分别为2、3和2,子优先级分别为1、0、0,中断

IRQn抢占优先级子优先级优先级顺序RTC中断121外部中断1>RTC>外部中断0外部中断0630外部中断1720#include"cs32f10x.h"voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;//配置中断分组,这里使用分组2,即2位抢占优先级,2位子优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置RTC中断NVIC_InitStructure.NVIC_IRQChannel=RTC_IRQn;//配置中断源,IRQ通道优先级配置程序7.8中断优先级管理NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//配置抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//配置抢子优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;;//使能中断通道

NVIC_Init(&NVIC_InitStructure);//配置外部中断0

NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);//配置外部中断1

NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);}7.9外部中断/事件编程实例7.9.1中断编程步骤中断初始化中断初始化包括对时钟、引脚输入方式、中断源、中断优先级、中断触发条件等的配置,以及开启相应的中断使能位。使能GPIO和AFIO的时钟由于使用GPIO引脚作为外部中断输入,首先要使能相应GPIO端口的时钟,由于GPIO需通过AFIO复用功能映射中断线,所以还需使能AFIO时钟。2)配置GPIO引脚模式将对应的GPIO引脚设置为输入模式,一般选择上拉或下拉输入,保证无外部信号时引脚处于稳定电平,具体可由外部电路特性决定。3)配置EXTI外部中断线映射通过AFIO_EXTICRx寄存器,将对应的GPIO引脚映射到指定的EXTI0~EXTI15中断线,实现外部中断与相应的GPIO引脚关联。配置EXTI寄存器主要设置外部中断的触发方式如上升沿、下降沿或双边沿触发,并且使能相应的中断线。如需产生事件则使能事件屏蔽寄存器EXTI_EMR的相应位,EXTI_RTSR配置上升沿响应,EXTI_FTSR配置下降沿响应,EXTI_IMR使能对应EXTI线的中断。配置NVIC嵌套向量中断控制器在NVIC中使能对应的EXTI中断通道,并且设置中断优先级。7.9外部中断/事件编程实例7.9.1中断编程步骤中断初始化4)配置EXTI寄存器主要设置外部中断的触发方式如上升沿、下降沿或双边沿触发,并且使能相应的中断线。如需产生事件则使能事件屏蔽寄存器EXTI_EMR的相应位,EXTI_RTSR配置上升沿响应,EXTI_FTSR配置下降沿响应,EXTI_IMR使能对应EXTI线的中断。5)配置NVIC嵌套向量中断控制器在NVIC中使能对应的EXTI中断通道,并且设置中断优先级。2.编写中断服务程序中断服务程序需要保存一些可能被更改的数据并实现中断事件的处理,处理完中断事件后需清除挂起寄存器EXTI_PR的对应位并恢复现场,然后退出ISR7.9外部中断/事件编程实例7.9.2按键中断编程实例编写外部按键的中断程序。按键一端接3.3V,另一端连接PA0并通过下拉电阻接地,保证未按下时为低电平,按键按下后在PA0引脚产生一个上升沿,引发一次中断。代码如下:#include"cs32f10x.h"//外部按键中断初始化voidEXTI0_Init(void){GPIO_InitTypeDefGPIO_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;//使能GPIOA和AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//配置PA0为浮空输入,外部连接了电阻GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);7.9外部中断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论