中断相关问题

中断相关问题

ID:24333263

大小:72.50 KB

页数:3页

时间:2018-11-13

中断相关问题_第1页
中断相关问题_第2页
中断相关问题_第3页
资源描述:

《中断相关问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、中断相关问题1.中断处理函数两种注册方法。1)第一种注册方式,只需要在isrx定义中断如理函数就好了。使用串口2接收中断为例,介绍一下此种方法的注册。这中方式只需要在isr.c中定义串口2的接受中断函数就可以。图1中是在此种方式下isrc中定义中断。//串口2接收中K服夯例程voidUART2IRQHandler(void){"uint__8ch;uint_8flag=1;DISABLE^INTERRUPTS;ch=uart_rel(UART2,&flag);if(0==flag){uart_sendl(UART_2,ch);}~~ENABLE^INTERRUPTS;图

2、1在isr.c中定义中断服务例程UART2_IRQHandler()这个函数名声明在O3_MCU/startup_MKL25Z4.S小。不同在模诀的中断函数名需要在此文件中查看。CMSIS框架下,在03_MCU/starmp_MKL25Z4.S巾,为每个巾断(包括内核巾断和非内核中断)声明了一个中断处理函数的名字,并使用弱定义方式(带.weak的定义方式)定义了一个默认的屮断处理函数。当在其他地方使用强定义(普通的定义方式,不带weak的方式)定义相同名称的函数后,在编译链接时,链接器会把函数链接到强定义的函数上。因为这样的C语言特性,所以只需要重新定义一个UART2J

3、RQHandler()函数,在发生中断时,就可以进入到屮断服务例程屮了。2)第二种注册方法需要包拈两个文件,isr.h和isr.c。在isr.h中进行注册,在isr.c中进行屮断服务例程的定义。同样以串口2接收屮断为例,介绍一下此种方法的注册。首先在isr.h中对中断进行注册,如图2。//中赴励啟主册voidUART2_IRQHandler(void);禅defineisr__uart2__reUART2_IRQHandler图2isr.h中注册中断UART2JRQHandler()这个阁数名声明在O3_MCU/startup_MKL25Z4.S中。isr_uart2_

4、re则是在isr.c屮定义的用于处理屮断的服务例程。“defineisr_uart2_reUART2_IRQHandler”一句,是将自己定义的isr_uart2_re屮断函数映射为了UART2的屮断处理函数。图3中是isr.c里中断的定义。//曲口2接收中曲明夯voidisr_uart2_re(void)<1uint_8ch;uint_8flag=i;DISABLE^INTERRUPTS;ch=uart_rel(UART_2,&flag);if(0ssflag){uartsendl(UART2,ch);}'~ENABLE^INTERRUPTS;图3isr.c中中断的定

5、义总结来说:选择第一种处理方式。本质上来说,两种处理方法的原理是一样的,都需要在03_MCU/startup_MKL25Z4.S查看处理函数名,都利用了C语言中弱定义与强定义的特性。但第二种方法增加了在isr.h使用宏定义的过程,反而使得过程更加复杂了。所以不选择。1.默认中断函数中怎么处理?现在考虑的默认屮断处理函数有两种形式,第一种是进入默认中断后,直接死循环不再跳出。第二种是进入后,直接跳出不做处理。首先考虑屮断向镒号16之前的异常(内核中断),应该使用第一种处理方式,16号之前的错误都是会影响芯片运行的异常,发生这些错误不应该跳出,应第一时间能显示出错误的发生。

6、16号之后的屮断用于芯片闪的外设模块,这些屮断不会伴有致命错误。此吋,使用第一种方式的优点是,调试时能方便发现导致错误发生的操作;缺点是,在发生不是预料中断时会进入到死循环,使得程序停止,妨碍正常运行。使用第二种中断默认处理方式使得发生非预料屮断后,程序依然可以顺利执行。讨论后认为,16号后中断依然选用第一种处理方法合适,理由主要如下:发生中断后进入屮断服务例程,除了产生了屮断信号外,还需要打开模块屮断。如果模块屮断不被显式打开,即使产生了中断信号也是不会进入服务例程的。如果打开模块巾断,说明是耑要使用这个中断的,此时应该编写有处理这个中断的函数,默认的中断服务例程不再

7、起作用了。总结来说,默认中断处理函数主要是用于处理IA)核中断的,此时芯片发生的可能是致命错误,需要能显式得指出错误的发生。对于非内核中断,如果模块不把中断打•开,并不会进入中断服务例程,此时选择第一种还是第二种影响不大。但是为了调试时能方便发现错误,最终也选择了第一种处理方式。1.common.c是否去掉common.c去掉,因为巾断相关功能在CMSIS框架下已经有关于巾断的函数:enable一irq()使用02_CPU/core_cm0plus.h中的NVIC_EnableIRQ();disable_irq()使用02_CPU/cor

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。