我在用k60做东西时,中断出现了一些错误,求组啊(已解决)
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 11:12 编辑我用的是也厚的库。我在程序里加入了一个按键中断,在按键中断里使能里定时中断,但是,按下按键后要经过一段时间,定时中断才开启,这个延时让我恒苦恼。
还有就是我的按建中断只能执行一次,需要关机后才
void main()
{
FTM_QUAD_Init(FTM1); //FTM1 正交解码初始化
pit_init_ms(PIT0, 1); //初始化PIT0,定时时间为: 1000ms
port_init(PTC0, ALT1 | IRQ_FALLING | PULLDOWN ); //干簧管初始化 PTC0 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
port_init(PTC5, ALT1 | IRQ_FALLING | PULLDOWN ); //光电管初始化PTC5 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
port_init(PTC6, ALT1 | IRQ_FALLING | PULLDOWN ); //光电管初始化PTC6 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
port_init(PTC7, ALT1 | IRQ_FALLING | PULLDOWN ); //光电管初始化PTC7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电
port_init(PTC14, ALT1 | IRQ_FALLING | PULLUP ); //启动初始化 PTC14管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
port_init(PTC15, ALT1 | IRQ_FALLING | PULLUP ); //停车初始化 PTC115 管脚,复用功能为GPIO ,下降沿触发中断,上拉电
set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断复位函数为 PIT0_IRQHandler
set_vector_handler(PORTC_VECTORn ,PORTC_IRQHandler); //设置PORTE的中断复位函数为 PORTE_IRQHandler
set_irq_priority(PORTC_IRQn,0);
set_irq_priority(PIT0_IRQn,1);
enable_irq (PORTC_IRQn); //使能PORTE中断
while(1)
{
}
}
/******************************************************/
/******************************************************/
/******************************************************/
/******************************************************/
/******************************************************/
/******************************************************/
/******************************************************/
/****************************************************/
void PIT0_IRQHandler(void)
{
int16 val1;
PIT_Flag_Clear(PIT0); //清中断标志位
val1 = FTM_QUAD_get(FTM1); //获取FTM 正交解码 的脉冲数(负数表示反方向)
FTM_QUAD_clean(FTM1);
System_Feed_Speed=abs(val1);//(int16)(0.15*val1);
AD_GetValue();
Cal_PostitionA();
if(Cal_PostitionA()==0)
{
duoji_PID(); //舵机PID
//Moto_PID();
}
if(Cal_PostitionA()==1)
{
if(AD_ZY>AD_ZY)
{
FTM_PWM_Duty(S3010_FTM, S3010_CH,165+20);
}
if(AD_ZY<AD_ZY)
{
FTM_PWM_Duty(S3010_FTM, S3010_CH,165-30);
}
}
}
/*****************************************************/
/*******************启动和停车中断***********************************/
/*!
*@brief PORTD端口中断服务函数
*@since v5.0
*/
void PORTC_IRQHandler(void)
{
PORT_FUNC(C,14,qidong_handler); //启动
/
void qidong_handler(void)
{
DELAY_MS(2000);
enable_irq (PIT0_IRQn); //使能PIT0中断
FTM_PWM_Duty(MOTOR_FTM, MOTOR1_PWM,70);
FTM_PWM_Duty(MOTOR_FTM, MOTOR2_PWM,70);
}能执行下一次。求组啊 因为你在按键中断里加了个大延时:DELAY_MS(2000);
山外メ雲ジ 发表于 2014-5-1 12:43
因为你在按键中断里加了个大延时:DELAY_MS(2000);
那个延时是我们要求加上的,我的意思是在2s的延时后,他还无法执行定时中断 先简化一下代码吧,太多无关的代码,排除法来确定原因。
看你初始化pit0为1ms,然后再在中断里使能,这个时候按理应该是马上执行pit0中断的。 山外メ雲ジ 发表于 2014-5-1 16:41
先简化一下代码吧,太多无关的代码,排除法来确定原因。
看你初始化pit0为1ms,然后再在中断里使能,这个时 ...
好的,我试一下 楼主问题解决了没有?
如果没解决,欢迎继续提问。
如果已经解决了,还请帮忙在你的标题上加上(已解决),方便我们查看未结帖。 在中断里面不要加大延时,利用时间片。尽量避免delay这种。 在中断里硬等2秒中,结果就是MCU什么都不做(不需要监测其他的吗),干等2秒钟?是故意这么设计的?还是无意为之?
建议采用状态机来做 定义个变量作计数用,单独用一个定时器来做为1ms或10ms定时节拍,变量递减为0后启用定时中断。
页:
[1]