高级会员
- 积分
- 653
- 威望
- 364
- 贡献
- 191
- 兑换币
- 124
- 注册时间
- 2012-5-7
- 在线时间
- 49 小时
|
本帖最后由 神探刷王 于 2013-4-19 01:30 编辑
求大神指导,在用定时中断输出FTM测得的编码器脉冲,为什么在主函数里,用液晶。能显示pwmtest,但是zhuanshu永远显示的是0;求解
测试发现在pit中断中加入一定延时又能正确显示,求大神指导
中断程序
extern volatile u32 pwmtest;
extern volatile u32 zhuanshu;
void FTM2_IRQHandler()
{
u8 s = FTM2_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS.
u8 CHn;
FTM2_STATUS = 0x00; //清中断标志位
CHn = 0;
if( s & (1 << CHn) )
{
FTM_IRQ_DIS(FTM2, CHn); //禁止输入捕捉中断
/* 用户任务 */
pwmtest++; //计数+1
//通道 CH0、CH1、Ch2、Ch3 有滤波器
FTM_IRQ_EN(FTM2, CHn); //开启输入捕捉中断
}
void PIT0_IRQHandler(void)
{ u32 lll;
DisableInterrupts; //禁止总中断
//printf("\n接收到 %d 个脉冲", pwmtest);
// Ad_red10();
zhuanshu=pwmtest;
pwmtest = 0; //清计数
主函数
volatile u32 pwmtest; //用来计数
volatile u32 sudu;
volatile u32 Dj_test=760;
u32 zhuanshu;
u32 Dg[6];
u32 Dg_por[6];
void main()
{
//自行添加代码
DisableInterrupts; //禁止总中断
Ad_init();
Pwm_init();
//Gpio_init();
pit_init_ms(PIT0, 5); //5ms产生一次中断
LCD_Init();
LCD_Fill(0xff);//黑屏
delayms(1000);
LCD_Fill(0x00);//亮屏
delayms(1000);
EnableInterrupts; //开总中断
while(1)
{
LCD_P8x16Str(0,0 ,div_data(zhuanshu));
//delayms(1000);
//LCD_CLS();
}
}
}
加入1ms延迟,lcd能正常显示
void PIT0_IRQHandler(void)
{ //u32 lll;
DisableInterrupts; //禁止总中断
//printf("\n接收到 %d 个脉冲", pwmtest);
// Ad_red10();
pwm=pwmtest;
pwmtest = 0; //清计数
delayms(1);
PIT_Flag_Clear(PIT0); //清中断标志位
EnableInterrupts; //开总中断 //开总中断
}
|
|