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

菜鸟急求 MCF5213中断的例程

菜鸟急求 MCF5213中断的例程

各位高手大家好
    我是刚接触32为的coldfire,编译器是codewarrior 6.0 ,使用的是mcf5213EVB开发板,在外部中断的时候,各种设置都可以,而且也发现中断标志位也置1了,但我不知道怎么进入中断服务程序,请各位大虾指导,最好给一个例程,谢谢了
你可以在以下 MCF5213 的綱頁找到中断服务程序的例子

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MCF5213&nodeId=0162468rH3YTLC00M91436

下載 MCF5213SC.zip 後, 請參考在 \src\cpu\ 的 mcf5213.c, mcf5xxx.c, mcf5xxx_lo.s, vectors.s
我对这些文件看了几遍了,但不知道如何下手。
是不是中断的时候就进入cpu_handle_interrupt (int vector)这个函数里面,再根据vector来判断中断的类别呀,可是怎么进入到这个函数呀,麻烦大虾继续指导,最好能给一个例程,菜鸟在此多谢了
当中断发生时,如果没有更重要的中断在处理中, CPU 就会按中断的种类进入vectors.s 的 VECTOR_TABLE 中其中一地址.  在下载的例子中, 所有中断都进入asm_exception_handler.

asm_exception_handler巳经是中断程式 .  在 mcf5xxx_lo.s 中定义.  

在例子中, 中断程式会再进入 mcf5xxx_exception_handler (在 mcf5xxx.c 中定义). 在mcf5xxx_exception_handler中再按中断的 vector  分类. 分类的定义可在MCF5213 的用户手册sec. 3.6 中 找到. vector 63-255 就会进入 cpu_handle_interrupt
我在调试的时候,当中断标志位置1时,再执行程序但并没有跳到mcf5xxx.c中的mcf5xxx_exception_handler()函数里呀。是不是要在主程序和链接时要include一些头文件呀,请指导,多谢了
你可以看看有没有以下两种情况:

1.Status Register (SR) 内的 bit 10-8 (interrupt level mask) = 7 ?
   如果是7, 则CPU不会接受中断. 可改成 0 试式看.

2.Interrupt Mask = 1?
  看看 interrupt mask register 内所对应中断位置的 bit 是否是 1. 如果是, 则中断不会被送出去. 可改成 0 试式看.
请问如何进入定时器、串口中断这类中断呢,它们没有vector呀
请指点
谢谢答复
定时器、串口中断这类中断都是 auto-vector. MCF5213 的 interrupt source number 可 在参考手册 http://www.freescale.com/files/32bit/doc/ref_manual/MCF5213RM.pdf 中的表12-13 找到。

例如 PIT0  的 Vector source number 是 55.

Vector number = 64 + interrupt source number = 119 (请看参考手册sec. 12.1.1.3)

所以 PIT0 的 interrupt vector (32-bits) 就应放在 exception vector table 的 4 x 119 的位置。

当 PIT0  的中断发生时, CPU 就会进到 PITO 的 interrupt vector 所指的地址去。
返回列表