注册会员
- 积分
- 45
- 威望
- 26
- 贡献
- 11
- 兑换币
- 13
- 注册时间
- 2013-1-21
- 在线时间
- 4 小时
- 毕业学校
- 山东大学
|
4#
楼主 |
发表于 2013-1-23 13:21:56
|
只看该作者
GordonFreeman 发表于 2013-1-23 09:33
进入PIT中断服务函数后要清除中断标志位才能再次进入中端
谢谢您的回复我在中断服务子程序里清过中断了,以下是我PIT初始化程序和ISR程序,请您帮我看一下:
初始化程序:
void pit_init(PITn pitn, u32 cnt)
{
//PIT 用的是 Bus Clock 总线频率
//溢出计数 = 总线频率 * 时间
/* 开启时钟*/
SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; //使能PIT时钟
/* PIT模块控制 PIT Module Control Register (PIT_MCR) */
PIT_MCR &= ~(PIT_MCR_MDIS_MASK | PIT_MCR_FRZ_MASK ); //使能PIT定时器时钟 ,调试模式下继续
switch(pitn)
{
case PIT0:
{
PIT_LDVAL0 = cnt; //设置溢出中断时间
PIT_TFLG0=0x1; //清中断标志位
PIT_TCTRL0 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
enable_irq(0 + 68); //开接收引脚的IRQ中断
}
break;
case PIT1:
{
PIT_LDVAL1 = cnt; //设置溢出中断时间
PIT_TFLG1=0x1; //清中断标志位
PIT_TCTRL1 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
enable_irq(1 + 68); //开接收引脚的IRQ中断
}
break;
case PIT2:
{
PIT_LDVAL2 = cnt; //设置溢出中断时间
PIT_TFLG2=0x1; //清中断标志位
PIT_TCTRL2 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
enable_irq(2 + 68); //开接收引脚的IRQ中断
}
break;
case PIT3:
{
PIT_LDVAL3 = cnt; //设置溢出中断时间
PIT_TFLG3=0x1; //清中断标志位
PIT_TCTRL3 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
enable_irq(3 + 68); //开接收引脚的IRQ中断
}
break;
}
}
ISR程序:
void pit0_isr(void)
{
PIT_TFLG0=0x1; //Clear the flag
GPIOA_PCOR|=GPIO_PCOR_PTCO(GPIO_PIN(28)); //Lighten yellow,E2
delay();
GPIOA_PCOR|=GPIO_PCOR_PTCO(GPIO_PIN(29)); //Lighten green,E3
delay();
j++;
}
|
|