请教HC08的CodeWarrior中断函数的含义和书写方式
- UID
- 83540
- 性别
- 男
|
请教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还有其它的书写中断函数的方式吗? |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
可以这样,定义中断函数
interrupt void Timer1_ISR(void)
{
TSC_TOF = 1;
...
}
在中断向量表中,把Timer1_ISR写在对应的中断向量中。
在Codewarrior中不必非要按照上面的写法来的。 |
|
|
|
|
|
- UID
- 106740
- 性别
- 男
|
向量6对应的位置是0xFFF2
向量5对应的位置是0xFFF4 |
|
|
|
|
|
- UID
- 92251
- 性别
- 男
|
6 对应于中断向量表的第6号中断。
在连接时,overflow_isr这个函数的起始地址会放支中断向量6对应的位置。
好象是0xFFF2
TIMER1 的溢出中断
[此贴子已经被作者于2005-3-30 11:52:18编辑过]
[此贴子已经被作者于2005-3-31 15:38:27编辑过] |
|
|
|
|
|
- UID
- 104476
- 性别
- 男
|
建议使用二楼的建议。FREESCALE单片机手册中每款芯片均对应有中断优先级,6就是第六级。 |
|
|
|
|
|
- UID
- 108554
- 性别
- 男
|
|
|
|
|
|
- UID
- 108380
- 性别
- 男
|
"在中断向量表中,把Timer1_ISR写在对应的中断向量中"
这步如何写,在那个文件中定义 |
能不用日货,尽量不用日货!
能不用日货,尽量不用日货!
能不用日货,尽量不用日货! |
|
|
|
|
|
- UID
- 108266
- 性别
- 男
|
应当是在你的*.prm文件中修改。
在自动生成的*.PRM文件的最后有向量定义,在向量6中加入应当就可以了把 |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
最常用的方法是在prm文件中定义
一般生成的prm文件中,有这样一句
VECTOR 0 _Startup;
假定你的Timer中断编号是第六
那么你可以在上面所写的程序上添加这样一句:
VECTOR 6 Timer1_ISR
在主程序中定义interrupt Timer1_ISR就可以了 |
|
|
|
|
|
- UID
- 104723
- 性别
- 男
|
如果在函数前面加上 #pragma TRAP_PROC
是不是就不需要修改PRM文件了? |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
还是需要修改prm的。因为#pragma TRAP_PROC 只是定义了该函数为Interrupt函数,但是代码并不知道是哪个中断。 |
|
|
|
|
|
- UID
- 92251
- 性别
- 男
|
没错,是中断向量号。
在编译时编译器会识别出interrupt
生成中断服务程序,自动完成寄存器入栈的工作。
函数用IRET指令返回。
在连接时,连接器会把overflow_irs对应的地址写入第6号中断向量表。 |
|
|
|
|
|
- UID
- 109942
- 性别
- 男
|
哪位大侠有例子啊?我的安装完只有程序文件,好多用法都搞不定啊~~~ |
|
|
|
|
|
- UID
- 104723
- 性别
- 男
|
|
|
|
|
|