标题:
codewarrior2.1中“jsr $fc06”怎么实现?
[打印本页]
作者:
anhei98
时间:
2005-5-24 21:06
标题:
codewarrior2.1中“jsr $fc06”怎么实现?
flash在线编程,采用的是利用芯片自带的监控程序进行擦写:
用codewarrior2.1版本嵌入汇编程序“jsr $fc06”编译,不能通过,但“jsr $00”编译可以通过,用codewarrior3.0版本编译都能通过。
现在很郁闷,仿真器只支持2.1版本,求助:在2.1版本中怎样实现该功能,不管是c还是嵌入汇编实现。
万分感谢!
作者:
strongchen
时间:
2005-5-25 10:17
如果是CodeWarrior版本的问题,请发邮件到 support@metrowerks.com,他们会很快回复的。
作者:
anhei98
时间:
2005-5-25 13:15
恩,只好先试试看了,这邮件好象要用英文写吧
作者:
anhei98
时间:
2005-5-25 23:05
他们果然回信很快,要求用文件的形式提供一个完整的例子,我看应该是版本的限制,最好把仿真器升级一下就不会这么多麻烦了。
作者:
strongchen
时间:
2005-5-26 10:35
你可以先安装一个3.1版(16K免费)的试试。
作者:
anhei98
时间:
2005-5-26 20:48
今天跑了一趟总算解决了,仿真器软件进行升级了,现在终于可以用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){};里循环。 为什么会这样呢?难道还需要什么定义么?求助!
作者:
strongchen
时间:
2005-5-27 10:26
到现在还不知道你用的是什么芯片和调试工具。
打开中断后进入定时中断,很正常啊,有什么问题?
作者:
anhei98
时间:
2005-5-27 13:57
用的是MC68HC908JL3,调试工具是买的仿真器SEMV-HC08。
利用仿真器一步一步执行该程序,在打开中断的情况下,程序进行到while(1){};下一步马上就进入了下面中断函数time_over(void)中,按照我最初的想法应该是在while(1){};运行一段时间后定时时间到才进入中断而不是 马上就跟着进入中断。
不知道还要进行什么设置?
作者:
anhei98
时间:
2005-5-27 15:35
今天看了自带的帮助文件,才知道“jsr $fc06”可以这样用c实现:
#define erase ((void(*)(void))(0xfc06))
main(void)
{
erase();
} 这样就可以了
作者:
strongchen
时间:
2005-5-27 16:25
定时器打开后就以及开始运行了,很快也就产生了中断请求信号。这时一旦打开中断,肯定就马上响应。可以在开中断之前,清一下中断请求标志。
作者:
anhei98
时间:
2005-5-28 11:20
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。
看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。
作者:
anhei98
时间:
2005-5-28 11:20
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。
看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0