codewarrior2.1中“jsr $fc06”怎么实现?
- UID
- 113561
- 性别
- 男
|
codewarrior2.1中“jsr $fc06”怎么实现?
flash在线编程,采用的是利用芯片自带的监控程序进行擦写:
用codewarrior2.1版本嵌入汇编程序“jsr $fc06”编译,不能通过,但“jsr $00”编译可以通过,用codewarrior3.0版本编译都能通过。
现在很郁闷,仿真器只支持2.1版本,求助:在2.1版本中怎样实现该功能,不管是c还是嵌入汇编实现。
万分感谢! |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
如果是CodeWarrior版本的问题,请发邮件到 support@metrowerks.com,他们会很快回复的。 |
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
他们果然回信很快,要求用文件的形式提供一个完整的例子,我看应该是版本的限制,最好把仿真器升级一下就不会这么多麻烦了。 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
今天跑了一趟总算解决了,仿真器软件进行升级了,现在终于可以用3.1版本的了。在那里简单测试了一下,I/O输出都正常。
以前自己是用汇编,现在在学c,对以下这段程序不好理解:
#include /* for EnableInterrupts macro */
#include /* include peripheral declarations */
#define Enable_Interrupts _asm cli;
void main(void) {
/* include your code here */
CONFIG1=0x01;
DDRA=0xff;
PTA=0x55;
TMODH=0x30;
TMODL=0xd4;
TSC=0x46;
Enable_Interrupts;
while(1){
};
}
interrupt 6 void time_over(void)
{
unsigned char i;
i=TSC;
TSC=TSC&0x7f;
}
本想主函数进行死循环,测试定时中断函数能否进入。发现:如果main函数开中断,程序进行到while(1){};后马上就进入了下面中断函数time_over(void)中;如果关掉中断,程序始终在while(1){};里循环。
为什么会这样呢?难道还需要什么定义么?求助! |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
到现在还不知道你用的是什么芯片和调试工具。
打开中断后进入定时中断,很正常啊,有什么问题? |
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
用的是MC68HC908JL3,调试工具是买的仿真器SEMV-HC08。
利用仿真器一步一步执行该程序,在打开中断的情况下,程序进行到while(1){};下一步马上就进入了下面中断函数time_over(void)中,按照我最初的想法应该是在while(1){};运行一段时间后定时时间到才进入中断而不是 马上就跟着进入中断。
不知道还要进行什么设置? |
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
今天看了自带的帮助文件,才知道“jsr $fc06”可以这样用c实现:
#define erase ((void(*)(void))(0xfc06))
main(void)
{
erase();
} 这样就可以了 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
定时器打开后就以及开始运行了,很快也就产生了中断请求信号。这时一旦打开中断,肯定就马上响应。可以在开中断之前,清一下中断请求标志。 |
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。
看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。 |
|
|
|
|
|
- UID
- 113561
- 性别
- 男
|
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。
看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。 |
|
|
|
|
|