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

[求助]Timebase Module 128分频中断工作,但是主程序不正常

[求助]Timebase Module 128分频中断工作,但是主程序不正常

我调试GZ60 Timebase Module,32768分频中断工作正常,中断执行能回到主程序,128分频中断工作,但是主程序不正常,好像进入不了主循环。


会不会是DELAY()的执行周期大于Timebase 中断周期造成的?


我想用Timebase中断实现160微秒延时,8M晶振,可行吗?


请斑主和高手过目,先谢!


#include <hidef.h>
#include "derivative.h"


unsigned int  Time;   


void Delay(unsigned int n)
{
            unsigned int stopTime;


            stopTime = Time+n;


            while (stopTime > Time);
}


void main(void) {
                        int i=0;
                        CONFIG2=0x09; //TBMCLKSEL=0


                        CONFIG1 =0x4B; //禁止看门狗



                        DDRF  = 0xFF;
                        PTF = 0x00; 
                        Time=0;


                        TBCR_TBIE =1;//2 基础定时器中断使能
                        TBCR_TACK =1;//3 清除中断标志


                        TBCR_TBR2 =0;//6 分频系数8192,1.024ms
                        TBCR_TBR1 =1;//5
                        TBCR_TBR0 =1;//4


                        TBCR_TBIF =1;//7 中断标志
                        TBCR_TBON =1;//0 启动定时器



                        EnableInterrupts;



                        for(;;) {


                                    Delay(1);
                                    PTF_PTF4=~PTF_PTF4;
                                    PTF_PTF5=~PTF_PTF5;
                                    PTF_PTF6=~PTF_PTF6;
                                    PTF_PTF7=~PTF_PTF7;
                        }


}



void interrupt 17 TBM_ISR(void){


            TBCR_TACK=1; 
            Time++;
            if (Time>=65534)
            {
                        Time=0;
            }
}


 

怎么没人回呀,自己顶了
我把project发上来了
我把project发上来了
http://bbs.chinaecnet.com/uploadImages/testtime1.zip
还没人回呀,自己顶了
你可以先把TimeBase中断关掉或延长试试。
海纳百川  有容乃大
收到,延长timebase中断周期试过了2048分频也不行,

完全关掉还没有试,因为有个死循环,看门狗是关的,逻辑上程序没法跳出delay(),完全关掉的目的是检验主程序吗?

谢谢
128分频好像定时器是16us吧?
中断根本就出不来啊
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
你好zhwdy81,128分频就是16us,

我也想知道中断需要多久才可以返回,freescale有文档说明还是要自己计算呀?
中断多久返回取决于你中断函数的长短
你可以根据汇编语句自己计算
用Full Chip Simulation走一次可以帮你计算指令周期数
   
明白一些了。
freescale 技术支持回复如下
You are using the TBM prescaler = 128 which results into 16us interrupt
period. Your TBM interrupt code takes 43 bus cycles and because you
haven't set the CGM the bus runs at 2MHz. So your interrupt code lasts
43/2000000 = 21.5us and before it could be finished another pending TBM
interrupt is entered.

You can set the PLL so that bus runs at 8MHz or use higher TBM
prescaler (2048) Attached is the example with 8MHz bus clock.

NOTE: If you debug your code in monitor mode, the PLL is bypassed and
bus clock = XTAL / 4 which is in your case also 2MHz

也谢谢斑主和众高手
返回列表