在线时间3 小时
UID423073
注册时间2013-3-25
NXP金币0 
 
 
 
该用户从未签到 
注册会员 
  
 
	- 积分
 - 70
 
 
- 最后登录
 - 1970-1-1
  
 
 | 
 
各位大神及老师: 
      大家好!我用freescale单片机g128测试定时器通道0的输入捕捉功能,用PTP_PT3引脚的IO口功能模拟输出PWM波,将该引脚与PT0引脚连接,来验证输入捕捉功能。但是问题来了,PT3引脚能够正常输出PWM波,但却未触发输入捕捉中断,也就是说没有进入中断,求大神指点,比较着急,谢谢! 
     具体程序如下: 
     include <hidef.h>      /* common defines and macros */ 
#include <mc9s12g128.h>     /* derivative information */ 
//#pragma LINK_INFO DERIVATIVE "mc9s12dg128b" 
  
unsigned int   Input_Num; 
unsigned int   M,m,PPPP; 
  
//----------------------时钟初始化------------------------------// 
void MCUInit(void){ 
  
     asm sei            
       
     CPMUSYNR=0x05;  //时钟合成寄存器,SYNDIV=5 
     CPMUREFDIV=0x41; //时钟分频寄存器,REFDV=1 
                  // 锁相环产生的时钟频率 fpll=2*foscclk*(SYNDIV+1)/(REFDV+1) 
                   //对于S12G128 8MHz外部晶体振荡器,总线时钟为24MHz,片内系统时钟为48MHz 
     CPMUPOSTDIV=0x00; //POST分频寄存器,POSTDIV=0,fpll= fvco/(POSTDIV+1) 
                   
     while((CPMUFLG & 0x08) !=0x08); //等待锁相环频率锁定 
     
     CPMUCLKS |= 0x80;    //时钟选择寄存器 
     asm cli 
}     
//--------------------通道0输入捕捉初始化-------------------// 
void ECT0_Init(void)              
{                           
  
  TSCR1_TEN = 0;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)  
  TSCR1_TFFCA = 1;  // 定时器标志位快速清除 
   
  TIOS  = 0xfE;      //指定其他所有通道为输出比较方式 
  TCTL4 = 0x01;     // 设置通道0为捕捉上升沿方式 
   
  TIE   = 0x01;     // 禁止其他通道定时中断 
  TSCR2 = 0x07;     //  
  TFLG1 = 0xff;     // 清除各IC/OC中断标志位 
  TFLG2 = 0xff;     // 清除自由定时器中断标志位 
  TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器) 
} 
void Delay3us(void)// 
{ 
    unsigned int j; 
    //for(i=0;i<time;i++) 
    for(j=0;j<15;j++); 
} 
void Delaynms(unsigned int n)  
{ 
    unsigned int i,j; 
    for(i=0;i<n;i++) 
    for(j=0;j<4000;j++); 
} 
//----------------------主函数-------------------------// 
void main(void)  
{ 
   MCUInit(); 
   ECT0_Init(); 
   
   DDRP=0XFF; 
   PTP=0X00; 
    
  // DDRT=0X00; 
  // PTT=0X00; 
   EnableInterrupts; 
   
  for(;;)  
  { 
    PTP_PTP3=0; 
    M=PTP_PTP3; 
    Delaynms(1); 
   // Delay3us(); 
    PTP_PTP3=1; 
    M=PTP_PTP3; 
    Delaynms(2); 
  // Delay3us(); 
  // m=TC0; 
  // m=TCNT; 
  } /* wait forever */ 
  /* please make sure that you never leave this function */ 
} 
 
//----------------------------------------------------------------//  
#pragma CODE_SEG NON_BANKED    //定时器通道0输入捕捉中断          
void interrupt 8 Timer0_Onput(void)  
{ 
 // TSCR1=0x00;                    
  TFLG1_C0F=1;      //清中断标志位 
  Input_Num++; 
  PPPP=TC0; 
//  PORTB=Input_Num; 
  if(Input_Num>=255) 
  { 
    Input_Num=0; 
  }      
} 
 
 
        
        
        
         |   
 
 
 
 |