首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

codewarrior2.1中“jsr $fc06”怎么实现?

codewarrior2.1中“jsr $fc06”怎么实现?

flash在线编程,采用的是利用芯片自带的监控程序进行擦写:
用codewarrior2.1版本嵌入汇编程序“jsr $fc06”编译,不能通过,但“jsr $00”编译可以通过,用codewarrior3.0版本编译都能通过。
现在很郁闷,仿真器只支持2.1版本,求助:在2.1版本中怎样实现该功能,不管是c还是嵌入汇编实现。
万分感谢!
如果是CodeWarrior版本的问题,请发邮件到 support@metrowerks.com,他们会很快回复的。
海纳百川  有容乃大
恩,只好先试试看了,这邮件好象要用英文写吧
他们果然回信很快,要求用文件的形式提供一个完整的例子,我看应该是版本的限制,最好把仿真器升级一下就不会这么多麻烦了。
你可以先安装一个3.1版(16K免费)的试试。
海纳百川  有容乃大
今天跑了一趟总算解决了,仿真器软件进行升级了,现在终于可以用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){};里循环。 为什么会这样呢?难道还需要什么定义么?求助!
到现在还不知道你用的是什么芯片和调试工具。

打开中断后进入定时中断,很正常啊,有什么问题?
海纳百川  有容乃大
用的是MC68HC908JL3,调试工具是买的仿真器SEMV-HC08。
利用仿真器一步一步执行该程序,在打开中断的情况下,程序进行到while(1){};下一步马上就进入了下面中断函数time_over(void)中,按照我最初的想法应该是在while(1){};运行一段时间后定时时间到才进入中断而不是 马上就跟着进入中断。

不知道还要进行什么设置?
今天看了自带的帮助文件,才知道“jsr $fc06”可以这样用c实现:
#define erase ((void(*)(void))(0xfc06))
main(void)
{
erase();
}    这样就可以了
定时器打开后就以及开始运行了,很快也就产生了中断请求信号。这时一旦打开中断,肯定就马上响应。可以在开中断之前,清一下中断请求标志。
海纳百川  有容乃大
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。

看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。
在中断前即使请标志TSC_TOF=0或者定时时间加大,在仿真单步运行的情况下,while(1){};单步后马上运行中断程序。
做了个LED测试灯,在中断程序里对它取反,在仿真全速运行的情况下可以看到有规律按照定时时间闪烁,表明在全速运行状态下是正常的。
再用以前直接在MOTOROLA公司买的仿真器测试,相同的程序,单步运行不会出现这样的情况,在while(1){};运行后不会马上进入中断的,定时时间到才进入。

看来还是仿真器的问题,MOTOROLA原版仿真器才比较合理。
返回列表