优先级抢占的实例.docx

上传人:小飞机 文档编号:5008332 上传时间:2023-05-29 格式:DOCX 页数:8 大小:160.59KB
返回 下载 相关 举报
优先级抢占的实例.docx_第1页
第1页 / 共8页
优先级抢占的实例.docx_第2页
第2页 / 共8页
优先级抢占的实例.docx_第3页
第3页 / 共8页
优先级抢占的实例.docx_第4页
第4页 / 共8页
优先级抢占的实例.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《优先级抢占的实例.docx》由会员分享,可在线阅读,更多相关《优先级抢占的实例.docx(8页珍藏版)》请在三一办公上搜索。

1、浙江万里学院实验报告课程名称:ARM系统体系结构及接口技术成绩:实验名称:中断优先级抢占的应用教师:方晋甬专业班级:电子114姓名:沈拓学号:2011013906实验日期:2014.3.13一、实验目的1、了解抢占式优先级的概念并且能够实73B0基本的配置2、理解并能够调用SysTick库函数中能够使能或者失能SysTick中断的函数 SysTick_ITConfig3、基本掌握通过优先级抢占实现LED灯闪烁状态变换的方法二、实验内容(1) 配置两根EXTI外部中断线(Line0和Line9),在下降沿产生中断,并配 置SysTick中断。其中:EXTI0:优先级=PreemptionPrio

2、rityValue,子优先级=0;EXTI9:优先级=0,子优先级=1;SysTick Handler:优先级=!PreemptionPriorityValue,子优先级 SubPriority = 0;(2) 刚开始设置 PreemptionPriorityValue=0,即 EXTI0 优先级比 SysTick 优 先级高;在EXTI9中断服务子程序中,EXTI Line0和SysTick的优先级对换;(3) 在EXTI0中断服务子程序中,SysTick中断挂起位被置1,若SysTick优先 级比EXTI Line0优先级高,则EXTI 0中断被抢占,转而去执行SysTick中断 服务子程

3、序;否则继续执行EXTI Line0中断服务子程序。(4) 如果EXTI0被SysTick抢占则LED1、LED2、LED3、LED4循环闪烁,如果EXTI0 抢占 SysTick 则 LED1、LED2、LED3、LED4 常亮或者常灭。三、实验结果1. 实验要求设计一个中断优先级抢占的实例。设置三个中断:EXTI0、EXTI9和SysTick,在EXTI9的中断服 务子程序中实现EXTI0和SysTick的优先级别的转换,使之分别出现:在EXTI0中断时可以被SysTick 抢占和不可以被SysTick抢占这两种状态。2. 硬件电路在EduKit-M3实验平台上按键Key与PB.9相连作为

4、EXTI9,按键 Wakeup与PA.0相连作为EXTI0; LED1、LED2、 LED3、LED4分别与PC6、PC7、PC8、PC9相连,用于显示不同的优先级抢占状态。3. 软件程序(1)主要源代码主程序:void RCC_Configuration(void)RCC_DeInit();RCC_HSEConfig(RCC_HSE_ON);HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus = SUCCESS)RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK2Config(RCC_HC

5、LK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);FLASH_SetLatency(FLASH_Latency_2);FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);RCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while(RCC_G

6、etSYSCLKSource() != 0x08)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOBRCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO,ENABLE);void EXTI_Configuration(void)GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode

7、= EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;/_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);EXTI_InitStructure.EXTI_Line = EXTI_Line9;EXTI_Init(&EXTI_InitStructure);中断部分:void

8、EXTI9_5_IRQHandler(void) /外部中断 59NVIC_InitTypeDef NVIC_InitStructure;if(EXTI_GetITStatus(EXTI_Line9) != RESET) 确认是否为外部中断 9 PreemptionPriorityValue = !PreemptionPriorityValue;PreemptionOccured = FALSE;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPr

9、iority = PreemptionPriorityValue;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, !PreemptionPriori tyValue, 0);EXTI_ClearITPendingBit(EXTI_Line9);/清除中断标志(3)代码分析程序正常

10、启动运行后,会有以下结果:当第一次发生EXTI9中断后(按下EduKit-M3实验平台上Key按钮),SysTick中断的优先级比EXTI0中断优先级高。因此当EXTI0中断发生时(按下Wakeup按钮),将先执行SysTick中断服务子程序,发生抢占,变量PreemptionOccured为真,LED1-LED4开始闪烁; 当第二次发生EXTI9中断后,SysTick中断的优先级比EXTI0优先级低,因此当EXTI0中断发生时 SysTick 无法抢占,变量 PreemptionOccured 为假,LED1-LED4停止闪烁;每次EXTI9发生后,SysTick和EXTI0就会发生优先级转换,出现前面2步的状态。三、实验结果验证符合实验要求,当按键按下时,流水灯速度立即改变。键四、实验总结这是本门课本学期的第一次实验,一开始虽然老师讲了很多理论知识,但是等自己动起手了就不知道该如何下手,只能靠自己不断摸索中找感觉,加上老师的提醒,最终顺利完成了实验。总结本次实验,我认为学习只要还是得靠自己自学,老师讲的东西毕竟有 限,有些东西还是靠自己不断实践研究出来的,总之,这次实验中我还是收获了 不少东西。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号