控制发光二极管指示灯闪烁

上传人:咆哮****海 文档编号:243134219 上传时间:2024-09-16 格式:PPT 页数:35 大小:1.63MB
返回 下载 相关 举报
控制发光二极管指示灯闪烁_第1页
第1页 / 共35页
控制发光二极管指示灯闪烁_第2页
第2页 / 共35页
控制发光二极管指示灯闪烁_第3页
第3页 / 共35页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,通用,IO,接口,-2,本节要点,查询方式下的输入,按键消抖和矩阵键盘,中断的使用,中断方式下的输入,第一个工程,:,控制发光二极管指示灯闪烁,要求,根据前面课上讲解的知识,设计程序,实现,E4,灯闪烁。,#include derivative.h,“,void delay(void);,/*/,int,main(,void,),SIM_SCGC5 = SIM_SCGC5_PORTA_MASK;,/,打开,A,口时钟,值为,0x200u,PORTA_PCR10 |= (18);,/,将,A,口,10,号 引脚配置为,GPIO,口功能,GPIOA_PDDR= 110;,/,引脚配置为输出功能,while(1),GPIOA_PTOR|=110;,/,输出取反寄存器;灯闪烁,delay();,/,延时,return 0;,void delay(),/,延时程序, unsigned int i, n, m ;,for(i=0;i30000;i+),for(n=0;n100;n+) m=m;,第二个嵌入式,C,语言工程,:,对按键进行查询方式工作,启动,/,停止发光二极管闪烁,两个按键分别接,PTA19,,,PTE26,,当键按下,对应引脚输入低电平。输入、设置内部上拉电阻。,先画流程图,考虑好逻辑关系再编程。,第二个嵌入式,C,语言工程,:,对按键进行查询方式工作,启动,/,停止发光二极管闪烁,#include,“,derivative.h,“,/KEY-PTA19,,,LED-PTA10,int,main(,void,),SIM_SCGC5 = SIM_SCGC5_PORTA_MASK;,/,打开,A,口时钟,值为,0x200u,PORTA_PCR10 |= (18);,/,将,A,口,10,号 引脚配置为,GPIO,口功能,PORTA_PCR19 |= (18) | (11) |(10) ;,/,将,A,口,19,号 引脚配置为,GPIO,口功能,拉电阻有效,上拉,GPIOA_PDDR |= 110;,/PTA10,引脚配置为输出功能,GPIOA_PDDR ,/PTA19,引脚配置为输入功能,while(1),/add your code,return 0;,#include,“,derivative.h,“,/KEY-PTA19,,,LED-PTA10,int,main(,void,),unsigned int key;,/,初始化代码,while(1),/add your code,key = GPIOA_PDIR ,if(key = 0) GPIOA_PDOR ,/,有键按下,LED,亮,else GPIOA_PDOR |= (110);,/,无键按下,LED,灭,return 0;,抖动时间,10,ms,开关动作时间,100,ms,“ 1 ”,“ 0 ”,10,ms,按键抖动,硬件电路消除抖动或软件消除抖动。,软件消除抖动,延时等待10,ms,仍有按键信号?,Y,有按键信号?,N,Y,N,键盘识别,按键释放?,N,Y,矩阵键盘,行,0,行,1,行,2,行,3,列3,列2,列1,列0,+,Vcc,1).扫描法,列线输出,行线输入。,列线逐行输出0,某行有按键,行线输入有0,若无按键,行线输入全部为1。,2).反转法,行列线交换输入、输出,两步获取按键键号。,矩阵键盘,综合练习:,实验仪器上有两个按键、四个,LED,灯,请自己设计一个控制流程,希望把按键和,LED,都用上。,例如:荧光棒,多种亮灯模式,通过按键切换模式。,程序的功能,说明和流程图,,请写在作业本上,程序第,2,次,上机时调试。,中断,中断(,Interrupt,),因事件发生,程序中止正常的执行流程,转入到该事件的处理程序。,中断服务程序,(,ISR, Interrupt service routine,),中断返回,事件处理完毕(,ISR,执行完毕)返回正常的流程。,与函数调用的区别,被动、硬件调用,断点是随机的、不可预知,与程序异步。,中断方式数据传输的优点,CPU,与外设异步工作,无须大量的查询,高速,CPU,不需要等待慢速的外部设备;,编程时,程序仍分正常流程、中断服务程序,ISR,并可以分别编写,思路清晰;,CPU,的执行时,由事件驱动,ISR,的运行;,在控制应用中几乎没有不使用中断的;,K60,芯片中断编程,嵌套的向量中断控制器(,NVIC,)是,Cortex,内核不可分割的一部分,可对系统异常和外设中断进行控制。,在配置某个外围模块的中断功能时,除了需要,设置此模块本身,的寄存器中的中断使能位之外,还需要,配置,NVIC,中对应的中断控制寄存器,系统才会响应此模块的中断请求。,第一部分:主程序中的,中断处理流程,第二部分:,中断,服务,程序的,编写,第三部分:定义并声明,中断,服务,程序,K60,芯片中断编程,第一部分:主程序中的,中断处理流程,1,、配置中断屏蔽寄存器,设置,系统,关总中断;,2,、开启,外设模块,并使能该外设模块中断;,3,、配置,NVIC,模块,中对应的中断控制寄存器;,4.,开总中断,1.,开关总中断,/,配置中断屏蔽寄存器,寄存器,功能,PRIMASK,只有,1,个位的,寄存器,:,置,1,:,关掉,所有可屏蔽的异常,只剩下,NMI,和,硬,fault,可以响应,。,缺省值,是,0,,表示没有关中断。,FAULTMASK,只有,1,个位的,寄存器,:,置,1,:,只有,NMI,能,响应,所有其它的,异常,(,包括,中断和,fault,)都关闭,。,缺省值是,0,,表示没有关异常。,BASEPRI,最多,有,9,位,的寄存器,(由,表达优先级的位数决定,),,,定义,了被屏蔽优先级的,阈值。,当,它被设成某个值后,所有优先级号大于等于此值的中断都被,关,闭,(,优先级号 越大,优先级越低),。,缺省值是,0,,则不关闭任何,中断。,CPSID I ;PRIMASK=1,;,关中断,; asm(“CPSID I ”);,CPSIE I ;PRIMASK=0,;,开中断,; asm(“CPSIE I ”);,2.,开启外设模块并使能该外设模块中断,引脚,PTE26,接按键,则需开启,PortE,时钟模块,在,PCR,中配置引脚复用功能及拉电阻,,并配置中断,。,PORTE_PCR26 |= (18) | 0b11 | (0xA16);,CortexM4,支持大量异常,/,中断,包括,11,个系统异常,(fault),,,240,个外部中断(,IRQ,)。(,IRQ,号等于中断类型号减去,16,),编号,类型,优先级,简介,0,N/A,N/A,没有异常,1,复位,-3,(最高),复位,2,NMI,-2,不可屏蔽中断(来自外部,NMI,输入脚),3,硬,(ha,rd) fault,-1,所有被除能的,fault,,都将,“,上访,”,成硬,fault,。,除能的原因包括当前被禁用,或者,FAULTMASK,被置位。,4,MemManage,fault,可编程,存储器管理,fault,,,MPU,访问犯规以及访问非法位置均可引发。企图在,“,非执行区,”,取指也会引发此,fault,5,总线,fault,可编程,从总线系统收到了错误响应,原因可以是预取流产(,Abort,)或数据流产,或者企图访问协处理器,6,用法,(usage),Fault,可编程,由于程序错误导致的异常。通常是使用了一条无效指令,或者是非法的状态转换,例如尝试切换到,ARM,状态,7-10,保留,N/A,N/A,11,SVCall,可编程,执行系统服务调用指令(,SVC,)引发的异常,12,调试监视器,可编程,调试监视器(断点,数据观察点,外部调试请求),13,保留,N/A,N/A,14,PendSV,可编程,为系统设备而设的,“,可悬挂请求,”,(,pendablerequest,),15,SysTick,可编程,系统滴答定时器(周期性溢出的时基定时器),16,IRQ #0,可编程,外中断,#0,17,IRQ #1,可编程,外中断,#1,255,IRQ#239,可编程,外中断,#239,NVIC,中的非优先级中断寄存器:,NVICISERx:,中断使能设置寄存器,NVICICERx:,中断使能清除寄存器,NVICISPRx:,中断挂起设置寄存器,NVICICPRx:,中断挂起清除寄存器,NVICIABRx:,中断激活状态寄存器,(只读寄存器,用于判断某个中断是否处于激活状态),其中,x,为,0 - 7,,称为寄存器的组号,表示每种寄存器都有,8,个。,这些寄存器都是,32,位的。每一位控制一个中断源,则可以分别控制,256,个中断源。,中断源位于寄存器组中的哪一个寄存器(组号)和该,32,位寄存器的哪一位(位号),组号,IRQ / 32,;,位号,IRQ % 32,,,例如,NVICICER221,,它的组号就是,2,,位号就是,21,。,3.,配置,NVIC,模块中对应的中断控制寄存器,IRQ,号和中断类型号的关系?,IRQ,号,=,中断类型号,-16,中断向量表,3.,配置,NVIC,模块中对应的中断控制寄存器,配置,NVIC,中的寄存器,以便使能一个外设的中断。,分两步:,1,)置位,NVICICPRx,(中断挂起清除寄存器),2,)置位,NVICISERx,(中断使能设置寄存器),原因:在完成第二步开启并使能外设模块中断后,外设模块便可以被触发产生中断请求,这时如果置位,NVICISERx,,程序便可能进入中断服务程序,而这并非程序编写者的本意,因此,为了避免如此,先置位,NVICICPRx,,清除已经挂起的中断,然后置位,等待下一个中断的发生。,例: 使能,PORTE,对应的,NVIC,模块中对应的中断控制寄存器:,NVICISER2 |= 127; /,中断使能设置寄存器;,NVICICPR2 |= 127;/,中断挂起清除寄存器;,void enable_irq (int irq) /,使能中断请求, switch (irq/32),case 0x0:,NVICICPR0 |= 1 (irq%32);,NVICISER0 |= 1 (irq%32);,break;,case 0x1:,NVICICPR1 |= 1 (irq%32);,NVICISER1 |= 1 (irq%32);,break;,case 0x2:,NVICICPR2 |= 1 (irq%32);,NVICISER2 |= 1 (irq%32);,break;,例:,NVIC,模块中对应的中断控制寄存器初始化,3.,配置,NVIC,模块中对应的中断控制寄存器,若关闭一个外设的中断源,对,NVIC,的中断使能清除寄存器,NVICICERx,置位即可。,void disable_irq (int irq) /,除能中断, switch (irq/32),case 0x0:,NVICICER0 |= 1 (irq%32);,break;,case 0x1:,NVICICER1 |= 1 (irq%32);,break;,case 0x2:,NVICICER2 |= 1 (irq%32);,break;,优先级中断寄存器:,NVICIPRx,:用于设定每个中断源的优先级,3.,配置,NVIC,模块中对应的中断控制寄存器,第二部分:,中断,服务,程序的,编写,例:,PortE-26,引脚接按键,以外部中断方式工作,按键后,黄灯开始闪烁,再按则停止闪烁。,void,porte_isr(void),disableinterrupts;,/在进入中断服务函数后往往会关闭中断,执行完毕后再打开,这样就保证了该中断服务程序在运行时不会被其他中断源干扰,PORTE_ISFR=0xFFFFFFFF,; /Clear Port E ISR flags,清中断标志,flag_PTE26 = 1;,/,状态变量置位,在主循环中执行具体任务,/,或者:,GPIO,A,_PTOR = (128);,28号引脚取反,黄色灯变亮或变暗;,enableinterrupts;,/,开中断返回,void porte_isr(void);,void init_gpio(void);,void delay(void);,int main (void), SIM_SCGC5 |=(19)|(113);,DisableInterrupts;,/* disable interrupts */,enable_irq(91);,/GPIOE . IRQ# is 91,init_gpio();,/ Initialize GPIO,EnableInterrupts; ;,/* enable interrupts */,while(1),/add your code,return 0;,/,函数声明,unsigned int flag_PTE26 = 0;,int main (void),/*,初始化,IO,和中断,*/,while(1),if(flag_PTE26),flag_PTE26 = 0;,GPIOA_PTOR|=110;/,状态寄存器取反,delay();,return 0;,void init_gpio(),/,设置,PTE26 (,接,SW2),引脚为通用,gpio,功能,中断下降沿触发,使能拉电阻,使能上拉电阻,PORTE_PCR26 |= (18) | 0b11 | (0xA16);,PORTA_PCR10|=(18);,/,设置,PTA10,为通用,GPIO,功能,GPIOA_PDDR|=(110);,/,将引脚,PTA10,配置为输出功能,GPIOA_PDOR|=(110);,/,灯初始状态为熄灭,对于一个完整的中断程序代码,用户还需要:,1. 定义中断服务函数;,2,.在Vector.h中声明自定义的中断服务函数,并修改对应中断向量表中中断服务函数的函数名,指定中断服务程序的入口地址。,第三部分:定义并声明,中断,服务,程序,第三部分:定义并声明,中断,服务,程序,1. 新建,ISR.h,定义中断服务函数;,第三部分:定义并声明,中断,服务,程序,2,.在Vector.h中声明自定义的中断服务函数,并修改对应中断向量表中中断服务函数的函数名,指定中断服务程序的入口地址。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 等级考试


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!