查看: 2251|回复: 0

[其他] 定时器输入捕捉中断进不去的问题

[复制链接]

该用户从未签到

4

主题

21

帖子

0

注册会员

Rank: 2

积分
70
最后登录
1970-1-1
发表于 2015-10-15 11:40:11 | 显示全部楼层 |阅读模式
各位大神及老师:
      大家好!我用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;
  }     
}


我知道答案 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 10:59 , Processed in 0.083019 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表