Board logo

标题: 请教HC08的CodeWarrior中断函数的含义和书写方式 [打印本页]

作者: jjs008    时间: 2005-3-29 22:27     标题: 请教HC08的CodeWarrior中断函数的含义和书写方式

#include #include #pragma DATA_SEG DEFAULT void main(void) { EnableInterrupts; } void interrupt 6 overflow_isr(void) { TSC_TOF = 1; } 上面这段代码是我从例子中缩减出来的,我的疑问仅仅是那个overflow_isr中断函数,interrupt后面的“6”是什么含义?是中断向量号吗?CodeWarrior还有其它的书写中断函数的方式吗?
作者: seuafu2005    时间: 2005-3-30 10:22

可以这样,定义中断函数
interrupt void Timer1_ISR(void)
{
    TSC_TOF = 1;
    ...
}

在中断向量表中,把Timer1_ISR写在对应的中断向量中。

在Codewarrior中不必非要按照上面的写法来的。
作者: usbmcu    时间: 2005-3-30 16:47

向量6对应的位置是0xFFF2
向量5对应的位置是0xFFF4
作者: southcreek    时间: 2005-3-31 15:38

6 对应于中断向量表的第6号中断。
在连接时,overflow_isr这个函数的起始地址会放支中断向量6对应的位置。
好象是0xFFF2
TIMER1 的溢出中断

[此贴子已经被作者于2005-3-30 11:52:18编辑过]





[此贴子已经被作者于2005-3-31 15:38:27编辑过]


作者: floatingwind    时间: 2005-4-1 23:17

建议使用二楼的建议。FREESCALE单片机手册中每款芯片均对应有中断优先级,6就是第六级。
作者: 风萧萧    时间: 2005-4-6 18:56

同意二楼
作者: 烈火旋灯    时间: 2005-4-6 19:15

"在中断向量表中,把Timer1_ISR写在对应的中断向量中"
这步如何写,在那个文件中定义
作者: mcu_moto    时间: 2005-4-7 09:46

应当是在你的*.prm文件中修改。

在自动生成的*.PRM文件的最后有向量定义,在向量6中加入应当就可以了把
作者: seuafu2005    时间: 2005-4-7 09:49

最常用的方法是在prm文件中定义
一般生成的prm文件中,有这样一句
VECTOR 0 _Startup;

假定你的Timer中断编号是第六
那么你可以在上面所写的程序上添加这样一句:
VECTOR 6  Timer1_ISR

在主程序中定义interrupt Timer1_ISR就可以了
作者: sampro    时间: 2005-4-16 15:07

如果在函数前面加上 #pragma TRAP_PROC
是不是就不需要修改PRM文件了?
作者: seuafu2005    时间: 2005-4-18 09:43

还是需要修改prm的。因为#pragma TRAP_PROC 只是定义了该函数为Interrupt函数,但是代码并不知道是哪个中断。
作者: southcreek    时间: 2005-4-19 09:58

没错,是中断向量号。
在编译时编译器会识别出interrupt
生成中断服务程序,自动完成寄存器入栈的工作。
函数用IRET指令返回。
在连接时,连接器会把overflow_irs对应的地址写入第6号中断向量表。
作者: aMonster    时间: 2005-4-19 16:34

哪位大侠有例子啊?我的安装完只有程序文件,好多用法都搞不定啊~~~
作者: sampro    时间: 2005-4-23 17:28

到Freescale的网站上去找,很多的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0