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来求脉宽比的。 )
求大神指教!感激不尽!
我又用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积分