版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录ContentsIIIIIIIVSTM32中断控制基础中断控制寄存器实践案例第6章STM32中断与编程NVIC与EXIT结构2知识点1)STM32中断通道与中断源;2)NVIC与EXIT结构;3)NVIC/EXIT中断控制寄存器。能力点了解STM32中断源与中断过程掌握NVIC寄存器结构与配置掌握EXIT寄存器结构与配置掌握STM32中断应用及编程方法课程学习知识点和能力点第6章STM32中断与编程6.1.1中断的基本概念6.1
STM32中断控制基础程序执行过程中,除了按部就班的“正常”流程外,还会遇到突发事件或紧急情况等“异常”流程,此时需要暂时中断当前流程,转而处理异常,这就是中断机制:异常必须及时处理,拖不得——实时响应多个异常同时发生,应区分轻重缓急——优先级事先准备,做好预案——异常处理函数异常处理完成后,要及时回归正常——中断返回中断的目的就是处理各种异常,所以中断处理是与异常(中断源)密切挂钩的中断优先级触发方式屏蔽中断通道正常流程异常处理中断嵌套6.1.2中断通道与中断源6.1
STM32中断控制基础中断通道即处理中断的信号通道,每个中断通道对应唯一的中断向量和唯一的中断服务程序,但该中断通道可以具有多个引发中断的中断源,这些中断源多可以通过对应“中断通道”向内核发起中断。STM32中断源Cortex-M4可处理总共256个中断源,支持可编程256级优先级:①16个内核异常(实际只有10个),包括
系统异常和SysTick定时器中断②240个核外中断(IRQ),包括片上外设
中断和外部中断(由I/O引入)正常流程异常处理中断嵌套6.1.2中断通道与中断源6.1
STM32中断控制基础所有中断都由NVIC管理1-内核异常2-外设中断3-外部中断图6.1STM32F4xx中断结构与组成6.1.2中断通道与中断源6.1
STM32中断控制基础STM32F4xx单片机并未使用Cortex-M4的全部中断功能内核异常16,6个保留,只用了10个,核外中断用了82个,总共92个中断优先级也未用满,只用到了16级编号类型优先级简介0N/A--(没有异常)1Reset-3(最高)复位2NMI-2不可屏蔽中断,来自外设或外部输入(STM32连接到RCC时钟安全系统)3硬fault-1由所有被除能的fault升级而来。除能原因包括被禁用或被屏蔽4存储器管理fault可编程(0)存储器管理错误,如MPU违规访问、非法位置访问等5总线fault可编程(1)总线错误引发的异常,如预取指、取数据失败,以及任何非法的总线访问6用法fault可编程(2)由于程序错误导致的异常,如未定义指令、非法的状态转换等7-10保留----11SVC可编程(3)系统服务调用指令(SWI)引发的异常,常用于操作系统12调试可编程(4)调试监视器异常(断点、数据观察点或外部调试请求)13保留----14PendSV可编程(5)为系统设备而设的“可悬挂请求”,常用于操作系统15SysTick可编程(6)系统滴答定时器中断,多用于操作系统优先级固定优先级可编程76.1.2中断通道与中断源6.1
STM32中断控制基础我们要学习和使用的是外部中断源:IRQ共82个,都是可屏蔽中断,优先级可编程(可设置)每个中断源固定地分配给了片上外设和I/O引脚,一个外设对应一个,称为中断通道。通常一个外设有若干个可以引起中断的中断来源或中断事件,故需将其汇总到中断通道上,再统一申请中断.86.1.3STM32中断向量表6.1
STM32中断控制基础每个中断通道都对应一个固定的地址(向量),形成“中断向量表”:中断向量表是一个存储器地址列表,存放的是各中断服务程序的入口地址当内核响应某个中断时,就取出该中断向量地址中的内容,送给程序指针(PC),然后跳转到了相应的中断服务程序的入口向量表从0x00000000开始,每4字节(32位)一个单元,连续排列中断向量表编号类型优先级向量地址0----0x00000000(存放MSP初始值)1Reset-30x00000004(存放PC初始值)2NMI-20x000000083硬fault-10x0000000C4存储器管理fault00x000000105总线fault10x000000146用法fault20x000000187-10保留--0x0000001C—0x0000002B11SVC30x0000002C12调试40x0000003013保留--0x0000003414PendSV50x0000003815SysTick60x0000003C中断向量表中断向量表在startup_stm32f40_41xxx.s中定义96.1.4STM32中断优先级6.1
STM32中断控制基础Cortex-M4可以设置多达256级的中断优先级(支持最多128级的抢占和最少2级的响应),由8位的优先级配置寄存器实现但STM32F4xx系列并没有照单全收,只实现了16级。优先级分为两种(两个属性),二者均是“标号越小,优先级越高”:①抢占优先级。它决定中断是否嵌套②响应优先级,亦称子优先级。它决定排队的先后顺序抢占优先级高于响应优先级优先级原则(先比“抢占”,再比“响应”):抢占优先级高的,可以打断抢占优先级低的——抢占,从而形成中断嵌套。若抢占优先级持平,响应优先级高的可以占据优先位置,但不可以抢占若两种优先级都相同,则根据它们在中断表的排位顺序,靠前的先处理以上优先级原则是针对中断通道的,至于同一通道的不同中断源,其优先顺序取决于用户程序106.1.4STM32中断优先级6.1
STM32中断控制基础优先级举例:设有3个中断:中断向量抢占优先级响应优先级A00B10C11若内核正在执行C的服务程序,A来了,则C将被A打断,形成嵌套(抢占)若内核正在执行C,此时B来了,虽然响应级别更高,
但B仍要等待,不能抢占C(遵循先来后到)若果B和C同时到达,则内核首先执行B(响应优先)若内核正在执行A,C先到,然后B也到了,那么在执行完A后,内核将率先执行B(排队优先)116.1.4STM32中断优先级6.1
STM32中断控制基础中断优先级分组:各中断通道的优先级,在中断优先级寄存器(IP,8位)中配置:STM32F401只用了IP的高4位(IP[7:4]),共16种优先级抢占和响应优先级都包含在这4位中,其中抢占优先级在高位在配置各中断通道的优先级之前,先要设定优先级分组,即按何种方案来表达抢占优先级和响应优先级:利用应用程序中断及复位控制寄存器(AIRCR)的3个位(AIRCR[10:8])来设置优先级分组。共有5种可选的分组方案(其他方案不可用):分组号AIRCR[10:8]分组方案对应IP[7:4]分配01114位全部为响应优先级0+411101位抢占优先级,3位响应优先级1+321012位抢占优先级,2位响应优先级2+231003位抢占优先级,1位响应优先级3+140114位全部为抢占优先级4+0126.1.4STM32中断优先级6.1
STM32中断控制基础中断优先级分组:分组方案选择:分组0:全为响应优先级,没有抢占优先级,故不能实现中断嵌套分组4:全为抢占优先级,没有响应优先级,可以实现多层嵌套(最多16层),但可能过于复杂,对系统的安全性不利通常选分组1—3,比如分组2:有4级抢占,4级响应,比较适中注意:在中断初始化时只需设置一次中断优先级分组,此后无需改变。随意改变优先级分组会导致中断管理混乱,出现意想不到的后果!分组号AIRCR[10:8]分组方案对应IP[7:4]分配01114位全部为响应优先级0+411101位抢占优先级,3位响应优先级1+321012位抢占优先级,2位响应优先级2+231003位抢占优先级,1位响应优先级3+140114位全部为抢占优先级4+0136.1.4STM32中断优先级6.1
STM32中断控制基础中断优先级配置设置好优先级分组后,就可以配置各中断通道的优先级了:将中断优先级控制字(PRI_n)写入到相应的中断优先级寄存器(IP)中PRI_n的构成:抢占优先级+响应优先级(共4位)PRI_n的选择:根据优先级分组要求,以及实际需要注意事项:所有中断通道都按照同一个分组方案配置IP仅高4位有效,总共可配置16种优先级不同的中断通道,可以配成不同的优先级,也可以配成相同的优先级中断优先级配置好后,一般不要再修改一个中断通道能够正常工作,除了优先级控制字,还有其他控制位:中断允许(使能/除能)中断挂起(使能/除能)中断激活标志146.1.5STM32中断过程6.1
STM32中断控制基础中断过程的四个阶段①中断初始化:由用户编写设置优先级分组,配置中断优先级,以及其它相关外设中断使能(允许中断)②中断响应:由系统硬件自动完成设置挂起标志(中断标志),表示有中断请求若内核响应,则设置激活标志,同时清除挂起,表示中断正在处理中保护现场,从中断向量表取出相应的入口地址赋给PC,跳转到中断服务程序③中断处理:即执行用户编写的中断服务程序若有多个中断原因,需在中断服务中处理④中断返回:执行完中断服务程序后,便进入返回过程,由系统硬件自动完成将激活标志清零恢复现场,原路返回(从LR寄存器取值赋给PC)设置中断优先级分组中断通道初始化其它准备(允许中断)正常流程中断请求来了中断服务程序设置标志,保护现场从向量表取入口地址清除标志,恢复现场,原路返回15
6.2.1NVIC结构与组成6.2
NVIC与EXIT结构中断和异常是分开处理的,其硬件电路也是分开的。外设中断,由NVIC直接处理外部中断/事件,来自I/O端口,经EXTI处理后再送达NVIC或其它设备EXTI图6.2中断与异常结构与组成内核异常包括:1:系统异常2:SysTiCK中断包括:1:外设中断2:外部中断/事件16
6.2.1NVIC结构与组成6.2
NVIC与EXIT结构中断和异常是分开处理的,其硬件电路也是分开的。外设中断,由NVIC直接处理外部中断/事件,来自I/O端口,经EXTI处理后再送达NVIC或其它设备图6.3NVIC结构与组成17
6.2.1NVIC结构与组成6.2
NVIC与EXIT结构中断通道发起中断请求,中断挂起寄存器被置1,标记中断并等待。如果要忽略此次中断请求,可以通过解挂起寄存器置1来清除标记等待中的中断;然后,中断使能寄存器开启中断;根据中断优先级决定中断执行顺序;处理器内核执行中断。中断激活位寄存器可以理解为中断标志寄存器,对中断执行过程中的状态进行标记。图6.4中断过程18
6.2.2外部中断/事件控制器(EXIT
)6.2
NVIC与EXIT结构STM32核外中断分为:外设中断,由NVIC直接处理外部中断/事件,来自I/O端口,经EXTI处理后再送达NVIC或其它设备EXTI1-外设中断2-外部中断图6.5外部中断/事件EXIT19
6.2.2外部中断/事件控制器(EXIT
)6.2
NVIC与EXIT结构外部中断/事件:来自I/O端口,或某些特殊设备(未纳入外设中断)的信号STM32Fxx所有I/O端口都可配置为外部中断模式,用来捕捉外来信号或事件EXTI的作用是对外部事件/中断线进行检测和控制,形成2种信号:中断信号——送至NVIC,申请中断事件信号——交给某个外设,由外设处理EXTI主要功能:边沿检测触发选择:上升沿、下降沿、上升下降沿控制:中断屏蔽、事件屏蔽、挂起主要特性:同时支持多达23个中断/事件请求每个中断/事件线上都具有独立的触发和屏蔽每个中断/事件线都具有专用的状态位
外部中断与事件的区别:从外部激励信号来看,二者没有区别,都是高低电平中断:信号将送达NVIC,下一步内核将响应中断,执行中断服务程序,属于软件行为事件:信号将送达片上某个外设,由外设去响应和处理,不产生中断,属于硬件行为20
6.2.2外部中断/事件控制器(EXIT
)6.2
NVIC与EXIT结构外部中断/事件EXIT框图:外部中断/事件线EXTIn,n=0~22图6.6外部中断/事件EXIT框图21
6.2.3外部中断/事件线映射6.2
NVIC与EXIT结构外部中断/事件线映射STM32F407的82个I/O通过多路选通门连接到16个EXTI中断/事件线,通过SYSCFG(系统配置控制器)中的EXTICR寄存器组进行配置:……每个选通门都是9选1(实际少于9)各端口同标号的引脚“合成”一根中断/事件线22
6.2.3外部中断/事件线映射6.2
NVIC与EXIT结构外部中断/事件线映射另外7根EXTI线连接如下:由图可知:PA0、PB0、PC0等连接到EXTI0,PA1、PB1、PC1等连接到EXTI1……这意味着同一时刻一根EXTI线只能响应一个端口的事件触发,不能同时响应多个端口的事件,但可以分时复用236.3.1NVIC寄存器6.3中断控制寄存器要使一个中断通道正常工作,需要配置多个寄存器(特权级才能访问):中断优先级寄存器(IP)
中断使能寄存器(ISER)中断除能寄存器(ICER)中断挂起寄存器(ISPR)中断解挂寄存器(ICPR)中断激活标志位寄存器(IABR)NVIC只有一个,而中断数量众多,这些寄存器都定义成了寄存器数组:__IOuint8_t IP[240];
//中断优先级寄存器组__IOuint32_t ISER[8];
//中断使能寄存器组__IOuint32_t ICER[8];
//中断除能寄存器组__IOuint32_t ISPR[8];
//中断挂起寄存器组__IOuint32_t ICPR[8];
//中断解挂寄存器组__IOuint32_t
IABR[8]; //中断激活标志位寄存器组采用“寄存器对”的形式,分别针对相反的操作。类似于GPIO的BSRR寄存器,只需单一写操作,无需读-改-写246.3.1NVIC寄存器6.3中断控制寄存器MDK中NVIC寄存器结构体:typedefstruct{
__IOuint32_t ISER[8]; //中断使能寄存器组
uint32_t RESERVED0[24]; //保留,不可用
__IOuint32_t ICER[8]; //中断除能寄存器组
uint32_t RSERVED1[24];__IOuint32_t ISPR[8]; //中断挂起寄存器组
uint32_t RESERVED2[24];__IOuint32_t ICPR[8];//中断解挂寄存器组
uint32_t RESERVED3[24];__IOuint32_t IABR[8];//中断激活标志位寄存器组
uint32_t RESERVED4[56];
__IOuint8_t IP[240]; //中断优先级寄存器组
uint32_t RESERVED5[644];
__Ouint32_t
STIR; //软件触发中断寄存器}
NVIC_Type;由于存储空间没有用满,造成地址不连续,这个保留空间不能省!用软件操作该寄存器,可以触发中断,从而享受特权服务中断优先级寄存器,一个通道对应一个数组元素,共240个一个通道对应一个位,共32x8=244位该结构体仅用于配置核外中断(NVIC管辖范围,最多240个)256.3.1NVIC寄存器6.3中断控制寄存器NVIC结构体地址:和GPIO结构体一样,NVIC结构体成员也采用基地址+偏移量的寻址方法基地址(core_cm4.h)各成员偏移地址:ISER: 0x000ICER: 0x080ISPR: 0x100ICPR: 0x180IABR: 0x200IP: 0x300STIR 0xE00访问方法:结构体指针,指向到成员的具体元素。例如:NVIC->IP[3]=0x60
;266.3.1NVIC寄存器6.3中断控制寄存器中断使能寄存器组ISER[8]全称:InterruptSet-EnableRegisters,共8个寄存器,使能中断
(即允许中断)1位对应1个中断通道,STM32F407只用了前82位,涉及ISER[0]~ISER[2]ISER[0]的第0—31位,分别对应中断0—31ISER[1]的第0—31位,分别对应中断32—63ISER[2]的第0—17位,分别对应中断64—81要使能某个中断,只需在ISER相应位写1即可。例如,要使能WWDG(窗口看门狗)中断:
NVIC->ISER[0]=0x1;//WWDG在外中断中排在最前面(中断0)注意:该寄存器写1有效,写0是无效的(不是禁止中断!)中断使能仅仅是允许中断,还要配合优先权配置、屏蔽、I/O口映射等设置才是一个完整的中断设置276.3.1NVIC寄存器6.3中断控制寄存器中断除能寄存器组ICER[8]全称:InterruptClear-EnableRegisters,共8个寄存器,除能中断
(即禁止中断),与ISER作用相反1位对应1个中断通道,STM32F407只用了前82位,涉及ICER[0]~ICER[2]ICER[0]的第0—31位,分别对应中断0—31ICER[1]的第0—31位,分别对应中断32—63ICER[2]的第0—17位,分别对应中断64—81要除能某个中断,只需在ICER相应位写1即可。例如,要使能WWDG(窗口看门狗)中断:
NVIC->ICER[0]=0x1;//WWDG在外中断中排在最前面(中断0)注意:该寄存器写1有效,写0是无效的(不是相反操作!)中断除能后,内核不会响应其中断(尽管仍可能有中断申请)286.3.1NVIC寄存器6.3中断控制寄存器中断挂起寄存器组ISPR[8]全称:InterruptSet-PendingRegisters,共8个寄存器,用于设置中断挂起,即暂停正在执行的中断,令其“靠边站”,转而执行优先级更高的中断。这种暂停执行、靠边等待的状态称为“挂起”或“悬起”。1位对应1个中断通道,STM32F407只用了前82位,涉及ISPR[0]~ISPR[2],具体哪一位对应哪个中断,可通过中断排列顺序计算。ISPR[0]的第0—31位,分别对应中断0—31ISPR[1]的第0—31位,分别对应中断32—63ISPR[2]的第0—17位,分别对应中断64—81要挂起某个中断,只需在ISPR相应位写1即可。例如,要挂起EXTI0(外中断/事件0)中断:
NVIC->ISER[0]=0x1<<6; //EXTI0在外中断中排在第6位(中断6)注意:该寄存器写1有效,写0是无效的(不是相反操作!)中断挂起后,一直悬停等待,直到“解挂”才会恢复执行!296.3.1NVIC寄存器6.3中断控制寄存器中断解挂寄存器组ICPR[8]全称:InterruptClear-PendingRegisters,共8个寄存器,用于解除中断挂起,即恢复“悬停”的中断,继续执行。ICPR与ISPR的作用正好相反。1位对应1个中断通道,STM32F407只用了前82位,涉及ICPR[0]~ICPR[2],具体哪一位对应哪个中断,可通过中断排列顺序计算。ICPR[0]的第0—31位,分别对应中断0—31ICPR[1]的第0—31位,分别对应中断32—63ICPR[2]的第0—17位,分别对应中断64—81要解挂某个中断,只需在ICPR相应位写1即可。例如,要解挂EXTI0(外中断/事件0)中断:
NVIC->ISER[0]=0x1<<6; //EXTI0在外中断中排在第6位(中断6)注意:该寄存器写1有效,写0是无效的(不是相反操作!)中断解挂后,中断即恢复执行!306.3.1NVIC寄存器6.3中断控制寄存器中断激活标志寄存器组IABR[8]全称:InterruptActive-BitRegisters,共8个寄存器,用于指示中断处于激活状态,只要处理器执行了中断服务程序(ISR)的第一条指令,它的激活状态就被置位,且一直保持到从ISR返回时才由硬件清0。IABR寄存器1位对应1个中断通道,STM32F407只用了前82位,涉及IABR[0]~IABR[2],具体哪一位对应哪个中断,可通过中断排列顺序计算。IABR[0]的第0—31位,分别对应中断0—31IABR[1]的第0—31位,分别对应中断32—63IABR[2]的第0—17位,分别对应中断64—81IABR是只读寄存器,不可以写入,其置位和复位是由硬件自动完成的。如果IABR的某一位为1,就表示对应的中断正在执行:
NVIC->ISER[0]=0x1<<6; //EXTI0在外中断中排在第6位(中断6)注意:激活状态置位后,即使被抢占而挂起,也仍然处于激活状态
。316.3.1NVIC寄存器6.3中断控制寄存器中断优先级寄存器组IP[240]全称:InterruptPriorityRegisters,共240个寄存器,每个寄存器为8位,用于配置中断优先级,该寄存器的设置与中断优先级分组密切相关。与之前的使能/除能、挂起/解挂和激活寄存器不同,IP寄存器组中1个寄存器对应1个中断通道。STM32F407只用了前82个,涉及IP[0]~IP[81]。IP[i]数组下标正好就是中断号每个寄存器的8位并没有全部使用,只使用了高4位。这4位,又要根据优先级分组的要求,分为抢占优先级和响应优先级来配置:IP[i]配置:
高4位(抢占+响应)
低4位(不用)假设优先级分组为2(即2+2),若抢占优先级为1,响应优先级为2
xxxx0110:0x60=0x6<<4326.3.1NVIC寄存器6.3中断控制寄存器中断优先级分组设置优先级分组在AIRCR中设置AIRCR:ApplicationInterruptandResetControlRegister,即应用程序中断和复位控制寄存器。其中3位(AIRCR[10:8])用于设置中断优先级分组:
分组设置值01111110210131004011501060017000方案0+41+32+23+14+0------高16位为访问秘钥:0x05FA336.3.1NVIC寄存器6.3中断控制寄存器中断优先级分组设置AIRCR寄存器的访问AIRCR属于系统控制块(SCB:SystemControlBlock)。SCB和NVIC都是”内设”。
AIRCR设置方法(注意访问秘钥!):偏移0xCSCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;0x05FA<<16如分组2:0x5<<8MDK中定义了SCB结构体(core_cm4.h)SCB基地址:6.3中断控制寄存器中断初始化的一般步骤1)设置中断优先级分组(AIRCR)设置AIRCR寄存器的[10:8]位,注意访问秘钥分组方案只能是5选1只设置一次,不要更改2)设置中断优先级(IP[])确定中断号,即哪一个中断通道根据优先级分组,设置每个中断的优先级:抢占优先级响应优先级3)如有必要,设置与中断通道相关的其他外设,然后使能中断(ISER[])等待中断发生……练习思考题4、外部中断与事件的区别是什么?5、一个外部中断与NVIC的哪些寄存器有关?6、简述中断初始化的基本步骤6.3中断控制寄存器前情回顾NVIC寄存器结构体:typedefstruct{
__IOuint32_t ISER[8]; //中断使能寄存器组
uint32_t RESERVED0[24]; //保留,不可用
__IOuint32_t ICER[8]; //中断除能寄存器组
uint32_t RSERVED1[24];__IOuint32_t ISPR[8]; //中断挂起寄存器组
uint32_t RESERVED2[24];__IOuint32_t ICPR[8]; //中断解挂寄存器组
uint32_t RESERVED3[24];__IOuint32_t IABR[8]; //中断激活标志位寄存器组
uint32_t RESERVED4[56];
__IOuint8_t IP[240]; //中断优先级寄存器组
uint32_t RESERVED5[644];
__Ouint32_t
STIR; //软件触发中断寄存器}NVIC_Type;一个通道对应一个寄存器,共240个(实用82)中断使能/除能寄存器组中断挂起/解挂寄存器组中断激活标志寄存器组(只读)各组都是1个通道对应1个位,共32x8=244位(实用82)对应关系:从0号寄存器的第0位开始,按中断向量表的顺序一一对应。0号寄存器第0—31位,对应中断0—311号寄存器第0—31位,对应中断32—632号寄存器第0—17位,对应中断64—81写入方法(使能/除能、挂起/解挂):写1有效,写0无效只需简单写入即可,无需读-改-写6.3中断控制寄存器前情回顾——中断优先级分组(设置AIRCR)分组设置值01111110210131004011501060017000方案0+41+32+23+14+0------访问秘钥:0x05FASCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;访问秘钥:0x05FA<<16分组值(如组2):0x5<<86.3中断控制寄存器前情回顾外部中断/事件控制器EXTI中断事件6.3中断控制寄存器前情回顾EXTI外部中断/事件线映射:所有82个I/O引脚通过选通门连接到16个中断/事件线(EXTI0—EXTI15)通过SYSCFG(系统配置控制器)中的EXTICR寄存器组进行配置……相当于PA—PI共9个端口合成1个端口(实际只有PA—PE和PH的一部分)所有的0口合成EXTI0,所有的1口合成EXTI1,……6.3中断控制寄存器外部中断/事件控制器(EXTI)EXTI能同时支持23路外部中断或事件,其中I/O中断为16路:EXTI0—EXTI1516路中断对应的中断向量表只有7个(即7个中断服务函数):EXTI0—EXTI4各分配了一个向量EXTI5—EXTI9共用一个向量(EXTI9_5)EXTI10—EXTI15共用一个向量(EXTI15_10)6.3中断控制寄存器外部中断配置寄存器在使用EXTI之前,首先要将有关的“线路”(中断/事件线)配置好:通过SYSCFG(系统配置控制器)中的EXTICR寄存器组进行配置:SYSCFG基地址及指针(在stm32f4xx.h中)://存储器重映射寄存器0x0//外设模式寄存器 0x4//外部中断配置寄存器组0x8//保留,不用//补偿单元寄存器 0x20//0x40000000即外设块首地址6.3中断控制寄存器外部中断配置寄存器(EXTICR[4])共4个,每个寄存器可配置4根线:EXTIx[3:0]:0000:PAx0001:PBx0010:PCx0011:PDx0100:PEx0101:PFx0110:PGx0111:PHx1000:PIx属于SYSCFG结构体,偏移:0x8高16位不用复位值:0x00000000EXTICR[0]:EXTI0--EXTI3EXTICR[1]:EXTI4–EXTI7EXTICR[2]:EXTI8–EXTI11EXTICR[3]:EXTI12–EXTI15访问方法(以PD3为例):①PD3只能接入EXTI3②寄存器不是写1有效,要用“读-改-写”,注意不要误改了其他位SYSCFG->EXTICR[0]&=~(0xF<<12);SYSCFG->EXTICR[0]|=0x3<<12;6.3中断控制寄存器6.3.2EXTI寄存器EXTI结构体(在stm32f4xx.h中):EXTI基地址即及指针://中断屏蔽寄存器0x0//事件屏蔽寄存器 0x4//上升沿触发选择寄存器
0x8//下降沿触发选择寄存器0xC//软件中断事件寄存器0x10//挂起寄存器0x14//0x40000000即外设块首地址6.3中断控制寄存器6.3.2EXTI寄存器中断屏蔽寄存器IMR英文名:InterruptMaskRegister作用:用于设置是否屏蔽EXTI线路上的中断请求0:屏蔽(禁止中断)1:开放(允许中断)1个位对应1个外中断/事件线,低16位对应16个I/O口IMR不是写1有效,注意不要改写其他位属于EXTI结构体,偏移:0x0位[31:23]保留,不可用复位值:0x00000000MRx:0:屏蔽中断请求1:开放中断请求6.3中断控制寄存器6.3.2EXTI寄存器事件屏蔽寄存器EMR英文名:EventMaskRegister作用:用于设置是否屏蔽EXTI线路上的事件请求0:屏蔽(禁止事件)1:开放(允许事件)1个位对应1个外中断/事件线,低16位对应16个I/O口EMR不是写1有效,注意不要改写其他位属于EXTI结构体,偏移:0x4位[31:23]保留,不可用复位值:0x00000000MRx:0:屏蔽事件请求1:开放事件请求6.3中断控制寄存器6.3.2EXTI寄存器IMR和EMR的对应位组合起来可以决定输入线的性质:EMRIMR输入线性质0 0弃之不用01外部中断10外部事件11--6.3中断控制寄存器6.3.2EXTI寄存器上升沿触发选择寄存器RTSR英文名:RisingTriggerSelectionRegister作用:用于设置是否选择上升沿触发0:不选择上升沿触发(禁止)1:选择上升沿触发(允许)1个位对应1个外中断/事件线,低16位对应16个I/O口RTSR不是写1有效,注意不要改写其他位属于EXTI结构体,偏移:0x8位[31:23]保留,不可用复位值:0x00000000TRx:0:禁止上升沿触发1:允许上升沿触发6.3中断控制寄存器6.3.2EXTI寄存器下降沿触发选择寄存器FTSR英文名:FallingTriggerSelectionRegister作用:用于设置是否选择下降沿触发0:不选择下降沿触发(禁止)1:选择下降沿触发(允许)1个位对应1个外中断/事件线,低16位对应16个I/O口FTSR不是写1有效,注意不要改写其他位属于EXTI结构体,偏移:0xC位[31:23]保留,不可用复位值:0x00000000TRx:0:禁止下降沿触发1:允许下降沿触发6.3中断控制寄存器6.3.2EXTI寄存器RTSR和FTSR的对应位组合起来可以决定输入线的触发方式:FTSRRTSR触发方式0 0不触发01上升沿触发10下降沿触发11双边沿触发(上升沿/下降沿)6.3中断控制寄存器6.3.2EXTI寄存器软件中断事件寄存器SWIER英文名:SoftwareInterruptEventRegister作用:用于软件产生中断或事件若原值为0,写1将产生中断/事件标志(挂起寄存器相应位置1),若得到允许,将产生中断/事件1个位对应1个外中断/事件线,低16位对应16个I/O口注意:欲使SWIER的某位为0,应清除挂起寄存器(PR)的相应位(写入1),而不是直接写0属于EXTI结构体,偏移:0x10位[31:23]保留,不可用复位值:0x00000000SWIERx:0:无影响1:产生中断/事件6.3中断控制寄存器6.3.2EXTI寄存器挂起寄存器PR英文名:PendingRegister显示是否触发了选择的边沿事件,用作中断标志0:无触发1:有触发(中断标志)1个位对应1个外中断/事件线,低16位对应16个I/O口注意:PR寄存器为“可读/写1清0”寄存器,由硬件自动置位(或SWIER置位)。可读,但只能写“1”(但得到的结果是“0”,即清除标志)属于EXTI结构体,偏移:0x14位[31:23]保留,不可用复位值:0x00000000PRx:0:无触发产生1:有触发产生练习思考题1、I/O中断或事件的边沿触发方式有哪几种?2、一个I/O中断与EXTI的哪些寄存器有关?3、以下I/O口中,能够同时用作外部中断/事件的是():A)PA2、PB2、PC3、PD3 B)PA4、PB5、PC5、PD6C)PA2、PB3、PC5、PD6 D)PA3、PB4、PC15、PD156.4应用实例中断编程的一般步骤外设中断和外部中断1、外设相关I/O端口配置2、外设初始化3、NVIC配置外设中断结束4、编写中断服务函数外部中断1、外中断相关I/O端口配置2、EXTI配置6.4应用实例中断编程的一般步骤外部中断编程步骤3、NVIC配置结束4、编写中断服务函数外部中断1、外中断相关I/O端口配置2、EXTI配置①端口模式(MODER)②输出类型(OTYPER)③输出速度(OSPEEDR)④上拉下拉(PUPDR)①中断线路映射(EXTICR[])②挂起寄存器(PR)--先清0③上升沿选择(RTSR)④下降沿选择(FTSR)⑤中断屏蔽(IMR)⑥事件屏蔽(EMR)⑦软件中断事件(SWIER)要先使能外设时钟:GPIOx配置EXTICR时要先使能SYSCFG时钟6.4应用实例中断编程的一般步骤外部中断编程步骤3、NVIC配置结束4、编写中断服务函数外部中断1、外中断相关I/O端口配置2、EXTI配置①优先级分组(AIRCR)②中断解挂(ICPR[])--先清0③中断优先级(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026版)临床医学院医院临床教学管理制度
- 2026年体育赛事组织安全课件
- 2026年实验动物伦理培训课件
- 2025-2026学年统编版三年级上册语文期末真题汇编卷(三)(含答案和解析)
- 2026 年中国农民丰收节致敬三农劳动者主题宣讲课件
- 2026 年传统年俗探寻感受新春年味课件
- 医院院内外转运试题及答案
- 麦芽制麦工复试模拟考核试卷含答案
- 采购员安全生产规范评优考核试卷含答案
- 化纤聚合工岗前技能认知考核试卷含答案
- 《政治经济学》课程教学大纲
- 2025年污水处理工岗位职业技能资格知识考试题库(附含答案)
- DB37T 4442-2021 城市轨道交通互联互通体系规范 车地无线通信系统
- 2024 走进“芯”+时代系列深度之八十四“光刻机”:半导体设备系列报告之光刻机国产路漫其修远中国芯上下求索
- 深圳市灵活就业协议书范本
- 精卫填海成语神话故事
- DZ∕T 0130-2006 地质矿产实验室测试质量管理规范(正式版)
- 施工进度计划横道图-自动绘制
- PPT供应链协同管理蓝图规划项目整体解决方案
- 陕西国防科技工业职业技能大赛(电工赛项)理论备考试题库-上(单选题汇总)
- 失智老人及其照护护理课件PPT
评论
0/150
提交评论