在线时间2 小时
UID3241709
注册时间2016-5-18
NXP金币0
该用户从未签到
新手上路

- 积分
- 23
- 最后登录
- 2016-11-1
|
本帖最后由 犬夜小叉 于 2016-6-16 08:09 编辑
写了一个定时器中断程序,pit0定时时间为20ms,pit1定时时间为40ms,两个定时器的中断优先级都相同,程序运行后能进入pit0 isr,led0会不断闪烁,周期为40ms,而pit1 isr不能进入,led1不闪烁,pit0和pit1单独使用时都能正常进入中断,程序如下,这是什么问题,哪位朋友能解答下,万分感谢!
#include <MC9S12XEP100.h>
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
/* led initial */
void led_init()
{
DDRA |= 0x3c;
PORTA = 0;
}
/* pit0 isr */
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt VectorNumber_Vpit0 pit0_irq(void)
{
PITTF_PTF0 = 1;
/* led0 jump */
PORTA_PA2 = ~PORTA_PA2;
}
/* pit1 isr */
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt VectorNumber_Vpit1 pit1_irq(void)
{
PITTF_PTF1 = 1;
/* led1 */
PORTA_PA3 = ~PORTA_PA3;
}
/* clock initial */
void clock_init()
{
/* set oscclk as sysclk */
CLKSEL &= 0X7F;
/* disable pll circuit */
PLLCTL &= 0X8F;
/* pllclk = 40m, fbus = 20m*/
SYNR |= 0x53;
REFDV |= 0X07;
POSTDIV = 0;
/* enable pll circuit */
PLLCTL |= 0X70;
asm NOP;
asm NOP;
/* pllclk is locked alredy */
while (!(CRGFLG & 0X08));
/* set pllclk as sysclk */
CLKSEL |= 0X80;
}
/* 20ms */
void pit0_init()
{
/* close PIT */
PITCFLMT_PITE = 0;
/* enable channel0 */
PITCE_PCE0 = 1;
/* 16-bit timer counts with micro time base 0 */
PITMUX_PMUX0 = 0;
/* micro timer0 count value */
PITMTLD0 = 100 - 1;
/* timer0 count value */
PITLD0 = 4000 - 1;
/* enable interrupt */
PITINTE_PINTE0 = 1;
/* enable PIT */
PITCFLMT_PITE = 1;
}
/* 40ms */
void pit1_init()
{
/* close PIT */
PITCFLMT_PITE = 0;
/* enable channel1 */
PITCE_PCE1 = 1;
/* 16-bit timer counts with micro time base 1 */
PITMUX_PMUX1 = 1;
/* micro timer1 count value */
PITMTLD1 = 100 - 1;
/* timer1 count value */
PITLD1 = 8000 - 1;
/* enable interrupt */
PITINTE_PINTE1 = 1;
/* enable PIT */
PITCFLMT_PITE = 1;
}
/* set pit0, pit1 interrrupt priority */
void interrupt_priority_set()
{
/* set pit0 priority */
INT_CFADDR = 0x70;
INT_CFDATA5 = 0x06;
/* set pit1 priority */
INT_CFADDR = 0x70;
INT_CFDATA4 = 0x06;
}
int main()
{
DisableInterrupts;
clock_init();
led_init();
pit0_init();
pit1_init();
interrupt_priority_set();
EnableInterrupts;
while (1);
}
|
|