使用Cortex M3通用定时器发现一个奇怪的问题,求解!

2019-03-24 14:28发布

MCU: Stellaris® LM3S608 Microcontroller编译环境: IAR Embedded Workbench 5.5问题描述:初始化3个通用定时器,均配置为32位周期性定时器,使能了定时器中断和定时器中断源  IntEnable(ulIntTimer);    TimerIntEnable(ulBase, ulIntFlags);但是此处没有使能定时器(TimerEnable(TIMER0_BASE, TIMER_A);)接着初始化了其他的外设以及驱动,最后运行系统,使能IntMasterEnable();和定时器中断TimerEnable(TIMER0_BASE, TIMER_A);现象:定时器初始化完毕之后,在没有使能定时器的情况下,发现代码进入了定时器中断处理函数。(通过在中断处理函数中放置while(1);捕获)如果将IntEnable(ulIntTimer);    TimerIntEnable(ulBase, ulIntFlags);放置所有外设以及驱动初始化之后,运行系统之前,就不会出现这种问题。在Stellaris® LM3S5K31 Microcontroller上也出现过类似情况。问题是没有使能定时器的时候,问什么会进入定时器中断呢?勘误上也没有此类问题描述。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
Study_Stellaris
1楼-- · 2019-03-24 20:17
< 运行系统是指 RTOS 吗?确实是很奇怪的问题。
tekkon
2楼-- · 2019-03-24 21:56
 精彩回答 2  元偷偷看……
azhiking
3楼-- · 2019-03-25 02:07
原帖由 tekkon 于 2012-4-25 21:32 发表
如果你用RTOS了 会不会是你的RTOS使能了某个定时器

或者可以在初始化外设以及驱动之前 使用IntMasterDisable()
在运行系统前再使能

亦或者在你的task里再使能定时器而不是在外设初始化的时候


测试这个问题时没有使用RTOS,初始化外设以及驱动之前确实没有关闭处理器中断,IntMasterDisable()
但是处理器中断默认应该是关闭的吧。

不过我再验证一下,看看使能处理器中断的时候,处理器中断是否已经使能……
azhiking
4楼-- · 2019-03-25 03:56
本来以为处理器中断默认是关闭的

经过试验发现,初始化系统时钟时候,处理器中断已经开启了。

如果初始化系统时钟之后,关闭处理器中断,IntMasterDisable()就不会在进入定时器中断了。

虽然问题可以这么解决,但是在定时器没有使能的时候进入定时器中断的原因还是没有搞清楚~

期待高人解答!!
azhiking
5楼-- · 2019-03-25 04:21
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章