#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 |