智能车制作
标题:
关于中断的求助
[打印本页]
作者:
sunshineabner
时间:
2014-9-28 23:16
标题:
关于中断的求助
理论上FTM的每个模块都可以单独触发相应通道引脚相关的中断的吧,可是 我的终端服务程序如果用在CHn = 0时可以触发中断,若再CHn=1 或者其他值都触发不了,求各位大神帮助,不知道是不是配置问题,找了两天原因都没找到, 求帮助呀,不甚感激
void main()
{
DisableInterrupts; //禁止总中断
gpio_init(PORTD, 7, GPO, HIGH); //初始化PTA9,输出高电平
LED_INIT(); //初始化LED, FTM1_IRQHandler 中断函数里闪烁LED0
FTM_Input_init(FTM0, CH1, Rising); //初始化FTM输入捕捉模式,上升沿触发
EnableInterrupts; //开总中断
while(1)
{
gpio_set(PORTD, 7, LOW); //PTA9产生低电平
time_delay_ms(250); //延时一下
gpio_set(PORTD, 7, HIGH); //PTA9产生高电平
time_delay_ms(250); //延时一下
}
}
复制代码
/*************************************************************************
* 野火嵌入式开发工作室
*
* 函数名称:FTM1_IRQHandler
* 功能说明:FTM1输入捕捉中断服务函数
* 参数说明:无
* 函数返回:无
* 修改时间:2012-2-25
* 备 注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
*************************************************************************/
void FTM0_IRQHandler()
{
u8 s = FTM0_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS.
u8 CHn;
FTM0_STATUS = 0x00; //清中断标志位
CHn = 0;
if( s & (1 << CHn) )
{
FTM_IRQ_DIS(FTM0, CHn); //禁止输入捕捉中断
/* 用户任务
LED_turn(LED0);
time_delay_ms(50);
LED_turn(LED1);
time_delay_ms(50);
LED_turn(LED2);
time_delay_ms(50);
LED_turn(LED3);
time_delay_ms(50);*/
/*********************/
//不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启
//通道 CH0、CH1、Ch2、Ch3 有滤波器
FTM_IRQ_EN(FTM0, CHn); //开启输入捕捉中断
//delayms(10); //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时
//但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启
}
/* 这里添加 n=1 的模版,根据模版来添加 */
CHn = 1;
if( s & (1 << CHn) )
{
FTM_CnSC_REG(FTM0_BASE_PTR, CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断
/* 用户任务 */
LED_turn(LED0);
time_delay_ms(50);
LED_turn(LED1);
time_delay_ms(50);
LED_turn(LED2);
time_delay_ms(50);
LED_turn(LED3);
time_delay_ms(50);
/*********************/
//不建议在这里开启输入捕捉中断
//FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //开启输入捕捉中断
}
}
复制代码
作者:
zhou1994
时间:
2014-9-29 13:41
看你的宏定义引脚复用
作者:
sunshineabner
时间:
2014-9-29 13:45
zhou1994 发表于 2014-9-29 13:41
看你的宏定义引脚复用
复用更改了
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2