/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称:PORTA_IRQHandler * 功能说明:PORTA端口中断服务函数 * 参数说明:无 * 函数返回:无 * 修改时间:2012-1-25 已测试 * 备 注:引脚号需要自己初始化来清除 *************************************************************************/ void PORTA_IRQHandler() { u8 n = 0; //引脚号 /* 根据自己的引脚号,自己编写,这里给出 n= 0 的模版,即 PTAn 产生外部中断 * 也给出 n=26 例子 ,自行修改 n 即可 ,添加用户任务就行 */ //========================== n = 0 模版 ======================================== n = 0; if(PORTA_ISFR & (1 << n)) //PTA0触发中断 { PORTA_ISFR |= (1 << n); //写1清中断标志位 /* 以下为用户任务 */ /* 以上为用户任务 */ } //============================================================================== n = 26; if(PORTA_ISFR & (1 << n)) //PTA26触发中断 { PORTA_ISFR |= (1 << n); //写1清中断标志位 /* 以下为用户任务 */ LED_turn(LED0); //LED0反转 /* 以上为用户任务 */ } }
void reed_switch(void){ u8 n=0; n=11; if(PORTC_ISFR & (1<<n)) { PORTC_ISFR |= (1<<n); rsw++; if(rsw==1){ LED_turn(LED0);} if(rsw==2){ LED_turn(LED1);} if(rsw==3){ LED_turn(LED2);} if(rsw==4){ LED_turn(LED3);} } }
/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称:FTM1_IRQHandler * 功能说明:FTM1输入捕捉中断服务函数 * 参数说明:无 * 函数返回:无 * 修改时间:2012-2-25 * 备 注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能 *************************************************************************/ void FTM1_IRQHandler() { u8 s=FTM1_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS. u8 CHn; FTM1_STATUS=0x00; //清中断标志位 CHn=0; if( s & (1<<CHn) ) { FTM_IRQ_DIS(FTM1,CHn); //禁止输入捕捉中断 /* 用户任务 */ LED_turn(LED0); //翻转LED0 /*********************/ //不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启 //通道 CH0、CH1、Ch2、Ch3 有滤波器 FTM_IRQ_EN(FTM1,CHn); //开启输入捕捉中断 //delayms(10); //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时 //但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启 } /* 这里添加 n=1 的模版,根据模版来添加 */ CHn=1; if( s & (1<<CHn) ) { FTM_CnSC_REG(FTM1_BASE_PTR,CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断 /* 用户任务 */ /*********************/ //不建议在这里开启输入捕捉中断 //FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //开启输入捕捉中断 } }
void PORTB_IRQHandler(void){ //HS PTB8, field interrupt if(PORTB_ISFR & (1<<8)){ PORTB_ISFR |= (1<<8);//exit //DisableInterrupts; LED_turn(LED0); p_counter++; cur_line = cur_line_start; //EnableInterrupts; } //VS PTB9, line interrupt if(PORTB_ISFR & (1<<9)){ PORTB_ISFR |= (1<<9);//exit cur_line++; if((cur_line >= 0) && (cur_line < ROW*DISTANCE) && (cur_line % DISTANCE == 0)){ for (int delay=0; delay < delaytime; delay++) //550 ; //get dummy 250 for (unsigned char cur_column = 0 ; cur_column < COLUMN; cur_column++) data[(ROW-1) - cur_line/DISTANCE][cur_column] = PTB10_IN; } } }
/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称:PIT0_IRQHandler * 功能说明:PIT0 定时中断服务函数 * 参数说明:无 * 函数返回:无 * 修改时间:2012-2-18 已测试 * 备 注: *************************************************************************/ void PIT0_IRQHandler(void) { LED_turn(LED0); //LED0反转 PIT_Flag_Clear(PIT0); //清中断标志位 }