ARM-MDK4.12关于中断奇怪的BUG

今天下午调一个程序,遇到了一个非常奇怪的问题,至今也不知道是为什么,但是,总算解决了,知道问题出在哪,但不知道根本原因在哪。想不通,先不去想了。把这个问题记录下来吧。

      本来已经调试好的串口中断接收程序,和触屏校正程序,组合到一起就发现串口中断无法进入,但用查询的方式却能发送数据到电脑上,找了很久,把触摸屏程序先屏蔽看看怎么样。不做不知道,一试吓一跳!把触摸屏程序屏蔽了竟然串口中断又能正常进入了!初步知道问题是出在触摸屏上了。于是再一步步的测试,最后更让我吃惊的的事情出现了,问题锁定!竟然是触摸屏初始化程序中清除AD中断屏蔽和TC中断屏蔽这两条语句(rINTMSK=~BIT_ADC;rINTSUBMSK=~(BIT_SUB_TC); )的影响。把这两条语句(rINTMSK=~BIT_ADC;rINTSUBMSK=~(BIT_SUB_TC); )屏蔽了,串口中断正常!但这不现实,没有这两条语句我的触摸屏程序根本没有办法正常执行,难道串口中断的触摸屏中断只能二选择一?那这样就太糟糕了~!

      继续思考,测试,最后发现:把串口初始化程序放到触摸屏初始化程序中清除AD中断屏蔽和TC中断屏蔽这两条语句(rINTMSK=~BIT_ADC;rINTSUBMSK=~(BIT_SUB_TC); 后面,二者就能和平共处。真的想不通为什么是这样。为什么证实这个想法,我在触摸屏中断服务程序中加了清除AD中断屏蔽和TC中断屏蔽这两条语句(rINTMSK=~BIT_ADC;rINTSUBMSK=~(BIT_SUB_TC); ),结果只要我点过屏,也就是触屏中断服务程序运行过,串口中断就没有办法进入。想来想去也不知道加上这两条语句对串口中断服务程序有什么时候影响。下面是串口中断初始化程序,和触摸屏中断初始化程序。帖出来做个证据!以后备查!哪位大虾看到了知道是什么原因还请多指教!

 

//触摸屏中断初始化程序

 

void TouchpanelInit(void)

{

rADCUPDN = 0;

rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms

rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value

rADCTSC=0xd3;                  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En  等等中断模式

 

pISR_ADC = (int)AdcTsAuto;

rINTMSK=~BIT_ADC;       //ADC Touch Screen Mask bit clear

rINTSUBMSK=~(BIT_SUB_TC);

}

 

 

 

//串口中断初始化程序。

 

void UART0_INT_INIT(void)

{

 

/*IIC中断源有效(IIC中断源使能)*/

rINTMSK &= ~(BIT_UART0);

 

rSUBSRCPND=BIT_SUB_RXD0;      //清除SUBSRCPND中BIT_SUB_RXD0,INTSUBMSK标示

rSUBSRCPND=BIT_SUB_ERR0;

rINTSUBMSK=rINTSUBMSK&(~BIT_SUB_RXD0);//清除屏蔽

rINTSUBMSK=rINTSUBMSK&(~BIT_SUB_ERR0);

ClearPending(BIT_UART0);              //清除INTPND,SRCPND中断标示

rINTMSK=rINTMSK&(~BIT_UART0);         //清除屏蔽

 

/*pISR_IIC:IIC中断服务程序地址寄存器  IicInt为IIC中断服务函数名*/

pISR_UART0 = (unsigned)UART0_ISR;

}

 

 

最后解决方案:把/串口中断初始化程序放到触摸屏中断初始化程序后边,并且以后和程序都不再出现有操作rINTSUBMSK,rINTMSK寄存器清0的语句,那么一切正常!我还测试过,在程序后面换了操作别的中断源屏蔽寄存器清0操作的同样的也会造成串口无法进入到中断和情况下。以后记住这个!先把这个当是MDK的一个BUG吧。!

 

### 回答1: Keil Arm-MDK是一种用于嵌入式系统开发的开发工具。其具有使用方便、灵活性高、功能强大等特点,让开发者可以在开发过程中更加高效的完成工作。 在使用Keil Arm-MDK进行嵌入式系统开发时,开发者可以通过多种方式获取参考资料,帮助自己更好的完成开发工作。以下是一些常见的Keil Arm-MDK开发参考资料: 1. 官方文档:Keil Arm-MDK官方网站上提供了大量的使用文档和指南,包括入门指南、用户手册、开发指南、技术文档等,可供开发者在线或离线查阅。 2. 示例代码:Keil Arm-MDK带有大量的示例代码,覆盖了多个应用领域和开发板型号,开发者可以借鉴这些示例代码,快速掌握Keil Arm-MDK的使用方法和注意事项。 3. 手册和编程参考书籍:市面上有大量的Keil Arm-MDK编程参考书籍和手册,其中包括了Keil Arm-MDK的基础知识、实用技巧、应用案例等,有助于开发者深入了解Keil Arm-MDK的使用方法和开发技巧。 4. 在线资源:开发者可以通过搜索引擎或嵌入式技术社区查询Keil Arm-MDK相关的博客、论坛、教程等在线资源,获取更多的开发经验和技巧。 总之,Keil Arm-MDK开发参考资料丰富,开发者可以通过多种方式获取帮助和指导,在开发过程中更加高效的完成工作。 ### 回答2: Keil ARM-MDK是一款广泛使用的嵌入式系统开发工具,可用于开发各种基于ARM处理器的应用程序。Keil ARM-MDK的参考资料是非常丰富的,以下是一些常用的参考资料: 1. Keil ARM-MDK官方网站:该网站提供了Keil ARM-MDK的下载、安装、使用等方面的详细介绍和说明,是了解ARM-MDK最基本的途径。 2. Keil ARM-MDK用户手册:该手册包括所有Keil ARM-MDK软件及功能的详细介绍和指导。用户手册可分为几个章节,涵盖了工程管理、源文件编辑、编译、调试、版本管理等方面的内容。 3. Keil ARM-MDK软件包:Keil公司提供多种软件包,该软件包可以作为Keil ARM-MDK的附加组件,提供一些额外的功能。例如,可以使用CMSIS嵌入式软件包、Keil RTX实时操作系统等。 4. ARM Cortex-M4技术资料:Keil ARM-MDK支持基于Cortex-M4的处理器,该处理器具有高度的性能和灵活性。ARM提供了大量关于Cortex-M4的技术资料,这些资料涵盖了处理器的架构、指令集、时钟、内存、外设等方面的内容。 5. Keil ARM-MDK示例代码:Keil公司为ARM-MDK提供了大量的示例代码。这些示例涵盖了各种应用场景,包括基本的GPIO控制、LCD显示、串口通信、CAN总线通信等等。这些示例代码可以帮助新手更快地上手Keil ARM-MDK的开发。 总之,Keil ARM-MDK的参考资料是非常丰富的,但需要注意的是,学习前需要具备一定的单片机和C语言基础,同时需要对ARM处理器的特点和应用有一定的了解。 ### 回答3: Keil ARM-MDK是一种用于开发ARM微处理器的集成开发环境。它支持多种ARM处理器系列,包括Cortex-M系列和Cortex-R系列。Keil ARM-MDK提供了一个强大的编译器、调试器和仿真器,能够帮助开发人员快速有效地开发出高质量的嵌入式软件。 在使用Keil ARM-MDK进行ARM微处理器开发时,参考资料是非常重要的。下面是一些可供参考的资料: 1. Keil ARM-MDK官方网站:官方网站提供了大量的文档、例程和资料,以帮助开发人员更好地使用Keil ARM-MDK进行ARM微处理器开发。开发人员可以在官网的下载中心下载Keil ARM-MDK以及其他相关工具。 2. Keil ARM-MDK编译器用户手册:这是Keil ARM-MDK编译器的详细说明,包括编译器使用、编译器选项、编译器错误处理等。 3. Keil ARM-MDK调试器用户手册:该手册提供了关于Keil ARM-MDK调试器的使用说明和调试技巧。 4.ARM Cortex-M系列嵌入式系统开发实战》:该书是一本关于使用Keil ARM-MDK开发Cortex-M系列嵌入式系统的实战指南,内容包括嵌入式系统架构、软件设计、硬件控制等方面。 5. KEIL软件开发管理单元教程:该手册提供了一个完整的Keil ARM-MDK开发项目配置和管理教程,包括软件开发流程、项目配置、固件升级等。 以上资料可以帮助开发人员更好地使用Keil ARM-MDK进行ARM微处理器开发,提高开发效率和开发质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值