微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > XD128系列ECT输入捕捉,请教

XD128系列ECT输入捕捉,请教

时间:10-02 整理:3721RD 点击:
我用飞思卡尔单片机,就是XD128的PWM模块产生了一个38Khz的方波,在程序里可以调整脉宽比,
我又用ECT模块做了一个输入信号捕捉功能,用来测38Khz方波的占空比,但是当频率达到20khz左右的时候,测出来的完全不对啊,而且占空比一直在变。(我的占空比在液晶上显示的)
重要代码如下:
ECT初始化
void initialize_ect(void){
  TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  TIOS  = 0xfe;      //指定所有通道为输出比较方式
//  TCTL1 = 0x00;            // 后四个通道设置为定时器与输出引脚断开
//  TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  TCTL4 = 0x03;            // 设置通道0为捕捉上升沿,和下降沿同时捕捉方式
  DLYCT = 0x00;            // 延迟控制功能禁止
  ICOVW = 0x00;            // 对应的寄存器允许被覆盖;  NOVWx = 1, 对应的寄存器不允许覆盖
  ICSYS = 0x00;            // 禁止IC及PAC的保持寄存器
  TIE   = 0x01;     // 禁止所有通道定时中断
  TSCR2 = 0x00;            // 预分频系数pr2-pr0:111,,时钟周期为0.03125us,  128分频
  TFLG1 = 0xff;            // 清除各IC/OC中断标志位
  TFLG2 = 0xff;     // 清除自由定时器中断标志位
}

中断捕捉处理:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void capture(void)
{
if(TFLG1_C0F == 1)
   TFLG1_C0F = 1;
time1 = time2;
time2 = time3;
time3 = TC0;
didianping = time2-time1;
gaodianping = time3-time2;
LEDCPU = ~LEDCPU;
}
#pragma CODE_SEG DEFAULT
(注:就是用didianping和gaodianping来求脉宽比的。  )
求大神指教!感激不尽!


已退回1积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top