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

[求助]TIM的自由计数器的溢出中断

[求助]TIM的自由计数器的溢出中断

我用9s12c32,8个TIM口全用为输入捕捉,捕捉中断都是正常的。

  就是自由计数器TCNT的溢出中断总是没有,我用查询的方法,溢出中断标志都产生了!

  溢出中断我也使能了.
正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
中断向量的地址正确? 进入中断后标志位清了没有?
  中断向量的地址void interrupt 16 TM(void),我有别的中断靠着它,interrupt 20(SCI),22(AD)我都用了,都是正确的啊!
  如果不清中断标志位,它会一直中断下去死循环,不可能不进入中断啊!


[此贴子已经被作者于2005-9-27 10:18:46编辑过]

正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
试试中断号17?

另外,你也可以在S19文件中看看其中断矢量中的地址是否是你定义的函数地址。
海纳百川  有容乃大
我把程序下载到单片机内,查看FLASH的内容。
  用void interrupt 16 TM(void)时对应的地址是$FFDE,$FFDF,内容也不是FF了,应该是对应了函数!叫standard Timer overflow的中断!
  用17就不对了。
  版主,帮我看看程序可以吗?


[此贴子已经被作者于2005-9-27 12:47:06编辑过]

正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
大家有没有用过这个中断的,发表一下你们的意见吗?
    谢谢..................
正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
我看到了你发过来的程序和截图。因为我手头没有S12C32的板子,所以无法进行硬件调试。但是我编译了一下你的程序,觉得你可以这样试一下:

1. 在CodeWarrior的编译界面中,进入“Link Order”页,将“function.c”文件选上(后面加上一小黑点即可);

2. 在中断程序中无需关中断和开中断。进入中断服务程序时MCU会自动关中断,退出时会自动开中断;

3. 这样改后再编译,应该没有警告信息出现了。我现在编译时没有看到任何警告信息。但我也不能确定这样是否就能进TM中断了。我检查过矢量地址的对应是正确的。如果不能进中断,只有2个可能,一是某些寄存器的设置不对,二是芯片有问题。所以建议你再仔细检查一下寄存器的设置。如果实在不行,就换一块板子试试。
海纳百川  有容乃大
TSCR2寄存器的TOI位置1了吗?
海纳百川  有容乃大
TSCR2寄存器的TOI位我也置1了,我是仔细看了几遍datasheet,实在是没找到问题!
  我也用S12DP256的系统,我也用同样的方法试了,也还是没进入TM中断,我想应该不是硬件的问题!还是要找原因啊...
  谢谢版主的支持,指点...
正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
还有一个问题,如果进入中断服务程序时MCU会自动关中断,退出时会自动开中断,
中断嵌套还能够实现吗?
  特别是做嵌入式系统的时候,中断嵌套应该允许吧!
正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
如果要实现中断嵌套,就要在进入中断服务程序后用软件开中断。

中断嵌套一般是不推荐的,因为它会占用大量资源。
海纳百川  有容乃大
上面是一个用DP256调试自由计数器TCNT的溢出中断,那位有时间可以帮我一下,我做的总是不能进入中断程序!
  我开始用S12C32,一直没调通!就换了一个DP256的板子,结果是一样的,还是不能中断程序。DP256的程序在上!
    版主再帮帮我......
正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b" //-************************************************************ void init(void) { CLKSEL_PLLSEL=0; // Select clock source from XTAL // INITRG=0; //初始化内部寄存器位置 PLLCTL=0x80; //允许时钟监视 //-***串口设置################################################## SCI0CR2=0x0C; //SCI发送,接收允许 SCI0CR2_RIE=1; //SCI接收中断允许 SCI0BDH=0; // SCI0BDL=25; //8M时钟,4M的总线周期,波特率为9200 //-***定时TIM################################################ TSCR1_TEN=1; //Timer Enable TIE=0xFF; //允许8通道的定时器中断 TSCR2_TOI=1; //TCNT溢出中断允许 TSCR1_TFFCA=0; //快速清除中断标志允许 TSCR2=0x07; //11.0592MHz的晶振,大约1.5S可以 //从0000->FFFF应该有一次TCNT的溢出中断 EnableInterrupts; // enable interrupts // } //-************************************************************* void put_char(char c); void main(void) { //put your own code here // init(); for(;;) { //put_char(0x00); /*while(!TFLG2_TOF); //查询中断标志位是否产生, //我可以查询到每1.5S左右有一次标志位产生 m=TCNT; //清TCNT的溢出标志 put_char(0xCC);*/ } // wait forever } //-*********************************// void put_char(char c) //串口向外发送一个char字符 { while((SCI0SR1&0x80)==0); SCI0DRL=c; } //-***********以下为中断服务程序************************************** #pragma CODE_SEG __NEAR_SEG NON_BANKED ////////自由计数器TCNT的溢出中断//////////////////// void interrupt 16 TM(void){ //我做的实验,这个中断从来没进入执行过 int m; put_char(0xEE); //可以从串口看到进入中断,设断点也可以 m=TCNT; //TSCR1_TFFCA=1快速清除中断标志允许, } //读结果清TCNT的溢出标志 #pragma CODE_SEG default

[此贴子已经被作者于2005-9-29 16:23:52编辑过]

[此贴子已经被作者于2005-9-29 17:48:16编辑过]

正在使用MC9S12DP256和MC9S12C32,学习MC9S12UF32......
 下一步MC9S12NE64...
我提个想法呀,可以在软仿真中,在源程序窗口点击中断服务函数“void interrupt 16 TM,,”,按住不放移动到地址MEMORY中,看中断函数的ROM地址是多少,再到中断号16的位置对一下,看是否一致。
我从你说的‘FFDE’猜想,地址可能不对吧。试试,)
学后而问
你把整个DP256的project打包发给我吧。
海纳百川  有容乃大
返回列表