首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

5249或5250如何进入定时中断程序

5249或5250如何进入定时中断程序

c编写的,需要什么设置,请高人指点
谢谢答复
定时中断需要设置以下两部份:
1. MCF5249 的 Timer0 或 Timer1
   Timer 的设定可参阅参考手册 (http://www.freescale.com/files/dsp/doc/ref_manual/MCF5249UM.pdf) sec. 11.5.6 中的例子。例子没有使用中断, 只须将 ORI (Output Reference Interrupt Enable) 改为 1 便可使中断功能打开。

2.Interrupt Vector 的设置
  Timer0 或 Timer1 都是 auto-vector。当中断发生时, CPU 就会进到 vector number 25-31 的 vector 所指的地址。Vector number 25-31 就由 interrupt level 来决定。可参阅参考手册 sec 9.4.1.

MCF5249 软件的例子可在 http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MCF5249&nodeId=0162468rH3YTLC00M93094
中找到 (下载 MCF5249SC)。
该设的都设了,可是还是进不了中断
请问vectors.s中有
vector1E:        .dc.l        _irq_handler        /* Autovector Level 6        */
vector1F:        .dc.l        _irq_Timer                /* Autovector Level 7        */
int_handlers.c中有
__declspec(interrupt)
void _irq_Timer(void)
{
     //my code       
}
不可以吗
我已将定时中断设成了Autovector Level设置成 7,IMR也设置了

现在看TCN寄存器已经在不停的自加了,可就是进不了中断,请指点
谢谢答复
这个问题可能是没有产生中断。

可以检查以下的情况:
1. Timer 中断有没有被关掉。请看TMR 内的 CE1-CE0, ORI。如果 CE1-CE0 和 ORI 全都是0, 便没有中断中断。
2. IMR (Interrupt Mask Register) 中的 Timer0 或 Timer1 位是否是 0。如果是 1, 就要改为 0 才能有中断产生。

在测试时, 可再看 IPR (Interrupt Pending Register) 中的 Timer0 或 Timer1 位是否是 1。如果是 1,则中断巳产生。

请留意 Watchdog timer 有没有在跑。如在跑,有可能是不断 reset 而没有中断。

中断后为什么回不到主程序里

中断程序如果这样写
__declspec(interrupt)
void irq_Timer(void)
{
dprintf("S\n");
}
就不停的输出 S,也不回到主程序里

中断程序如果这样写
#pragma interrupt irq_Timer
void irq_Timer(void)
{
dprintf("S\n");
}
就只输出一个S,程序好像死掉一样,也不回到主程序里

这是为什么呢,我在进入中断后将TMR的ORI设0,出中断前又设1,也不行

还需什么设定,__declspec(interrupt)和#pragma interrupt有什么区别,请高人指点


谢谢答复
返回列表