Board logo

标题: 关于ECT中断 [打印本页]

作者: mickmice    时间: 2008-3-2 21:40     标题: 关于ECT中断

请教版主
我编了一个ECT中断的程序,在PE0口用波形发生器输入规则的0/5V的方波信号,在Codewarrior中单步运行时单片机能够正常中断,但是当连续运行时就不能正常中断,一直处于等待模式,进入不了中断程序,或者有时只能中断一两次就进不了中断了,请教版主这是怎么回事啊?我用的是Freescale的MC9SDG128B单片机。
作者: mickmice    时间: 2008-3-2 21:46

下面是我编的ECT的程序,采集轮速的。

#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#pragma CODE_SEG NON_BANKED

unsigned int start_time,end_time;
long int pulse_ticks,overflow_count,i;
unsigned char pp,pt;

interrupt void TIMER1_isr(void) {
++overflow_count;
TFLG2=0x80;//清除中断标志
//PORTB=0xff;
}

interrupt void ccp1_isr(void) {
end_time=TC0;//捕捉寄存器的值作为结束时间;
pulse_ticks=(0x10000*overflow_count)-start_time+end_time;
//pp++;
//if(pp*pp PORTB=pp--;
start_time=end_time;
overflow_count=0;
TFLG1=0x01;//清除中断标志;
}


void ini(void) {

TIOS=0x00;//定义引脚为输入捕捉功能
TSCR1=0xC0;//启用计时器;等待模式无效;Debug模式下不停止;输入捕捉读取寄存器对相应标志位清零;
TCTL4=0x55;//0~3通道上升沿捕捉;
TIE=0x01;// 允许0通道输入捕捉中断;
TSCR2=0x82;//允许计时器溢出中断;禁止重置功能;计时器自由运行预分频系数为4,主计时器为2MHz;
DLYCT=0x01;//256个总线周期,即0.000032s之后输入有效(去噪声);
ICOVW=0xFF;//只有当捕捉寄存器和保持寄存器为空时才能被写入;
ICSYS=0x0E;//队列模式;
}

//union {
//unsigned char st[2];
// int time;
//} start;

//union{
// unsigned char et[2];
// unsigned int time;
//} end;




void main(void){
DDRB=0xFF;
pp=0xee;
pt=0x00;
ini();
EnableInterrupts;
for(;;){
//PORTB=pt++;
// for(i=1000;i>=1;i--){
//}
};

}

作者: strongchen    时间: 2008-3-3 10:05

输入信号的频率和占空比是多少?
作者: mickmice    时间: 2008-3-3 10:37

频率可以调,是信号发生器的输出频率,我暂时设置的是2Hz,因为频率小点才能在PORTB口的灯上看到变化情况。谢谢Strongchen对我的问题的关心,我刚又仔细读了下手册上
作者: mickmice    时间: 2008-3-3 10:38

关于寄存器的内容,发现可能是我对ICSYS寄存器设置错误导致的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0