为什么我用S12的ECT的输出比较来定时时无法产生中断[求助]
- UID
- 140668
- 性别
- 男
|
为什么我用S12的ECT的输出比较来定时时无法产生中断[求助]
void main(void) { PACTL_PAEN=1; //使用预分频器 PACTL_CLK1=1; //Set Clock counter PACTL_CLK0=0; //使TCNT的周期为2ms TIOS_IOS4=1; //端口4为输出比较作用 TIE_C4I=1; //允许输入捕捉端口4产生中断 TC4=400; TSCR1= 0x90; /* enable timer TCNT FAST CLEAR FLAT */ TSCR2 = 0x00; EnableInterrupts; //开中断 for(;;);
}
interrupt void C4I_ISR (void){ DisableInterrupts; TC4+=400; EnableInterrupts; }
已经在prm文件中加入向量语句
VECTOR ADDRESS 0xFFE6 C4I_ISR
我通过在中断服务程序中加入一些标志,确定了程序没有进入中断服务程序。请问是什么原因呢?是不是有什么寄存器还没有设置好? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 140668
- 性别
- 男
|
今天发现如果不使用累加器的时钟PACLK(即上面程序PACTL_PAEN=1改为=0,使用预分频器TSRC2=0X02)则能顺利进入中断。
请问是不是输出比较只能用预分频器,不能用累加器的时钟?还是我的设置有问题 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
要知道PCTAL_PAEN=1并非只是选择时钟,它打开了16位脉冲累加器的功能,还要有相应的输入信号。 |
|
|
|
|
|
- UID
- 140668
- 性别
- 男
|
斑竹: 如上面的程序所示,除了用PCTAL_PAEN选择了时钟外,同时也用CLK0与CLK1位设置了分频率。这样的话TCNT的周期不是应该已经脱离预分频器的控制而采用PACLK作为COUNTER? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
可是你现在的设置是CLK0=0,CLK1=1,也就是采用PACLK/256作为时钟源。PACLK是哪里来的? |
|
|
|
|
|
- UID
- 140668
- 性别
- 男
|
谢谢斑竹指点
但还是不大懂。PACLK不是为P时钟频率的1/64, 而P时钟频率不是1/2的总线周期吗?(这是我一开始形成的概念,不知是不是一开始就记错)
所以希望斑竹能把这问题说白点 无限感激!!!!
|
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
PCLK和PACLK是不一样的,仔细看看数据手册吧。 |
|
|
|
|
|