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

新手求助:关于HCS12d64的捕获

新手求助:关于HCS12d64的捕获

大家好,最近在调试D64的底层驱动,在调捕获功能时,将D64CAP接口TC4采集PWM1模块输出的波形,PWM波的周期为16MS,占空比为50%,现在可以通过示波器从相应的CAP口观察到波形,但是TC4的值一直是0;
这个问题困扰了很久,一直不知道怎么办,下面把我的程序贴出来,大家看看有没有错误。
PWM波的初始化
void InitPWM (void)
{
    /*PWME = 0x00;
    PWMCTL = 0x00;
    PWMCLK = 0x00;    //通道0、1、4、5选择clockA,通道2、3、6、7选择clockB        
    PWMPRCLK = 0x77;  //clockA = 总线时钟/128;clockB= 总线时钟/128;
   
    PWMPOL = 0xFF;    //所有PWM输出起始都为高电平

    PWMCAE = 0x00;        //左对齐
    PWME = 0x01;          //使能通道0
    PWMCNT0 = 0;
    PWMCNT2 = 0;
    PWMCNT4 = 0;
    PWMPER0 = 0XFF;       //PWM0周期=128/8000000*255=4ms
    PWMPER2 = 0xFF;
    PWMDTY0 = 0x80;       //PWM0占空比=128/255=0.5
    PWMDTY2 = 0xa0;       //清0通道channel计数器    */
    PWME = 0x00;          // 关闭所有通道的PWM输出
    PWMCTL = 0xf0;        // 通道01级联
    PWMCLK = 0x00;  //选择时钟来源,通道0145使用clockA,通道2367使用clockB
    PWMPRCLK = 0x77;  // clockA/clockB预分频控制clockA=clockB=bus/128=125KHz
   
    PWMPOL = 0xFF;          //所有PWM输出起始都为高电平,


    PWMCAE = 0x00;        //通道PWM输出左对齐
    PWME = 0xff;          //使能所有通道0
    PWMCNT01 = 0;          //PWM2通道计数寄存器
    PWMPER01 = 2000;       //PWM2通道周期寄存器      
    PWMDTY01 = 1005;       //PWM2通道占空比寄存器   
}

定时器初始化
void InitCap(void)
{
    TSCR1 = 0X80;   // 定时器正常工作
    TSCR2 = 0X80;   // 使能定时器溢出中断使能;定时器时钟=总线时钟=16MHz
    TIOS = 0X00;    // 4通道为输入捕捉通道
    TCTL3 = 0X01;   // 通道4为上升沿捕捉
    TIE_C4I = 1;    // 通道4相应的标志位产生中断
   
}



主程序
void interrupt 16 timovf(void)
{
    G_Timeover_add_var++;
   
    TFLG2 = 0Xff;     
}

void interrupt 12 timch4(void)            
{     
     G_Capture_new_var = TC4;
     
     G_dis_edge_var = G_Timeincap_add_var*63356+
G_Capture_new_var - G_Capture_old_var;
                     //两个相邻上升沿之间的计数器个数
     G_eng_speed_var = (unsigned int)(16000000 / (G_engineer_chiquan_const * G_dis_edge_var));
                     //发动机的转速计算(定时器周期频率/(齿圈数 * 捕获的计数器个数)
     
     G_Capture_old_var = G_Capture_new_var;   
     
     TFLG1_C4F = 1;
}



使用的总线频率为16MHz.,
我接触飞思卡尔单片机还不到1个月的时间,基础较差,希望大家能够指点一二,谢谢!


另外,我又做了一个例子,将K端口以一定频率输出方波,通过IOC4进行捕获,TC4寄存器的值有变化,以下是附件 InPutCapture(DebugPassed).rar (194.69 KB)
返回列表