430 的ADC12IE问题

2019-03-24 13:24发布

在ADC_init()AD初始化函数中打开了ADC12IE中断,在ADC12ISR中断函数中需不需要将ADC12IE关掉?   我的程序出现两个问题: 问题1:如果在#pragma vector=ADC_VECTOR __interrupt void ADC12ISR (void) 中断函数中不把ADC12IE关掉的话,程序不会跳出ADC12ISR中断函数? 问题2:如果在中断函数中把ADC12IE关掉的话,程序跑了一段时间(这个时间不固定)AD就不再采集,LCD也不再刷新?   请大侠们看看是什么原因,谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
wstt
1楼-- · 2019-03-24 16:10
MSP430在处理中断的时候,先把当前寄存器压栈,然后选择最高优先级的中断源。
你只开了ADC的中断,那么就是ADC中断,在然后会关闭全局中断使能,也就是说在处理一个中断的时候,不再会相应任何可屏蔽中断。
所以你的代码如果从中断服务函数中出不来,可能是出现了死循环或者系统复位的情况。
中断中关掉ADC12IE是可以的,但是在处理结束的时候需要打开才能相应下一次的中断。
你可以到我的空间中看下中断的响应过程,可能对你有帮助。
http://home.eeworld.com.cn/my/sp ... o=blog&id=42042
whaidong123
2楼-- · 2019-03-24 17:49
< :TI_MSP430_内容页_SA7 --> 首先谢谢您的回复,看了你的关于中断的文章对中断处理过程及优先级有点了解!
还有点疑问:
1、在你的回复中提到我的“中断服务函数中出不来,可能是死循环或系统复位”这点有点不解,因为我的中断服务函数只有简单的2个赋值语句“Result = ADC12MEM0;和Volt=(Result*3.3)/4095”,应该不会出现死循环吧!?,但是程序就是回不到main里执行LCD显示函数Dis_Volt()函数(因为液晶没有显示,我单步调试,进入中断后出不去!);
2、我在中断函数中关闭了ADC12IE,在ADC_init()AD初始化函数有重新打开ADC12IE(ADC12IE |=0x01),但是奇怪的是会出现我前面说的情况:程序跑了一段时间(这个时间不固定)AD就不再采集,LCD也不再刷新!!
注:刚学的430,如有不当,请指正,谢谢!
zkaiaizy
3楼-- · 2019-03-24 20:26
 精彩回答 2  元偷偷看……
zkaiaizy
4楼-- · 2019-03-24 23:08
还是转换的太快,CUP一直被中断服务占据着
whaidong123
5楼-- · 2019-03-25 01:02
自己顶一下!
wstt
6楼-- · 2019-03-25 01:53
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章