?? landzo
字號:
/******************** (C) COPYRIGHT 2011 藍宙電子工作室 ********************
* 文件名 :isr.c
* 描述 :中斷處理例程
*
* 實驗平臺 :野火kinetis開發板
* 庫版本 :
* 嵌入系統 :
*
* 作者 :藍宙電子工作室
* 淘寶店 :http://landzo.taobao.com/
**********************************************************************************/
/******************** (C) COPYRIGHT 2011 藍宙電子工作室 ********************
* 文件名 :isr.c
* 描述 :中斷處理例程
*
* 實驗平臺 :野火kinetis開發板
* 庫版本 :
* 嵌入系統 :
*
* 作者 :藍宙電子工作室
* 淘寶店 :http://landzo.taobao.com/
**********************************************************************************/
#include "common.h"
#include "include.h"
u8 TIME0flag_5ms = 0 ;
u8 TIME0flag_10ms = 0 ;
u8 TIME0flag_15ms = 0 ;
u8 TIME0flag_20ms = 0 ;
u8 TIME0flag_80ms = 0 ;
u8 TIME1flag_20ms = 0 ;
u8 TIME1flag_1ms = 0 ;
u8 TimeCount = 0 ;
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:USART1_IRQHandler
* 功能說明:串口1 中斷 接收 服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-14 已測試
* 備 注:
*************************************************************************/
void USART1_IRQHandler(void)
{
uint8 ch;
DisableInterrupts; //關總中斷
//接收一個字節數據并回發
ch = uart_getchar (UART1); //接收到一個數據
uart_sendStr (UART1, "\n你發送的數據為:");
uart_putchar (UART1, ch); //就發送出去
EnableInterrupts; //開總中斷
}
/*************************************************************************
* 藍宙嵌入式開發工作室
*
* 函數名稱:PIT1_IRQHandler
* 功能說明:PIT1定時中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-9-18 已測試
* 備 注:
*************************************************************************/
void PIT1_IRQHandler(void)
{
PIT_Flag_Clear(PIT1); //清中斷標志位
extern u8 IntegrationTime ; //曝光時間
extern void StartIntegration(void); //曝光函數
static unsigned char TimerCnt20ms = 0;
u8 integration_piont;
TIME1flag_1ms = 1 ;
TimerCnt20ms++;
/* 根據曝光時間計算20ms周期內的曝光點*/
integration_piont = 100 - IntegrationTime;
if(integration_piont >= 2) { /* 曝光時間小于2則不進行再曝光 */
if(integration_piont == TimerCnt20ms)
StartIntegration(); ///曝光開始
}
if(TimerCnt20ms >= 100) {
TimerCnt20ms = 0;
TIME1flag_20ms = 1;
}
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:PIT0_IRQHandler
* 功能說明:PIT0 定時中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-18 已測試
* 備 注:
*************************************************************************/
void PIT0_IRQHandler(void)
{
PIT_Flag_Clear(PIT0); //清中斷標志位
TimeCount ++ ;
if(TimeCount%1 == 0 ){
TIME0flag_5ms = 1;
}
if(TimeCount%2 == 0 ){
TIME0flag_10ms = 1;
}
if(TimeCount%3 == 0 ){
TIME0flag_15ms = 1;
}
if(TimeCount%4 == 0 ){
TIME0flag_20ms = 1;
}
if(TimeCount%64 == 0 ){
TIME0flag_80ms = 1;
}
if(TimeCount == 192)
{
TimeCount = 0 ;
}
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:SysTick_Handler
* 功能說明:系統滴答定時器中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-18 已測試
* 備 注:ucos里用得到
*************************************************************************/
void SysTick_Handler(void)
{
// OSIntEnter();
// OSTimeTick();
// OSIntExit();
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:PendSV_Handler
* 功能說明:PendSV(可懸起系統調用)中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-15 已測試
* 備 注:uC/OS用來切換任務
*************************************************************************/
void PendSV_Handler(void)
{
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:HardFault_Handler
* 功能說明:硬件上訪中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-4 已測試
* 備 注:可以用LED閃爍來指示發生了硬件上訪
*************************************************************************/
void HardFault_Handler(void)
{
while (1)
{
printf("\n****硬件上訪錯誤!!!*****\r\n\n");
}
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:PORTA_IRQHandler
* 功能說明:PORTA端口中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-1-25 已測試
* 備 注:引腳號需要自己初始化來清除
*************************************************************************/
u16 key8cout = 0 ;
u8 key8start = 0 ;
u8 key8flg = 0 ;
u16 key9cout = 0 ;
u8 key9start = 0 ;
u8 key9flg = 0 ;
u16 key10cout = 0 ;
u8 key10start = 0 ;
u8 key10flg = 0 ;
u16 key11cout = 0 ;
u8 key11start = 0 ;
u8 key11flg = 0 ;
void PORTD_IRQHandler(){
u8 n = 0; //引腳號
n = 8;
if(PORTD_ISFR & (1 << n)) //PTDn觸發中斷
{
PORTD_ISFR |= (1 << n); //寫1清中斷標志位
if( key8cout == 0 )
{
key8start = 1 ;
} else if( key8cout > 13)
{
key8cout = 0 ;
key8start = 0 ;
key8flg ++ ;
}
}
n = 9;
if(PORTD_ISFR & (1 << n)) //PTDn觸發中斷
{
PORTD_ISFR |= (1 << n); //寫1清中斷標志位
if( key9cout == 0 )
{
key9start = 1 ;
} else if( key9cout > 13)
{
key9cout = 0 ;
key9start = 0 ;
key9flg ++ ;
}
}
n = 10;
if(PORTD_ISFR & (1 << n)) //PTDn觸發中斷
{
PORTD_ISFR |= (1 << n); //寫1清中斷標志位
if( key10cout == 0 )
{
key10start = 1 ;
} else if( key10cout > 13)
{
key10cout = 0 ;
key10start = 0 ;
key10flg ++ ;
}
}
n = 11;
if(PORTD_ISFR & (1 << n)) //PTDn觸發中斷
{
PORTD_ISFR |= (1 << n); //寫1清中斷標志位
if( key11cout == 0 )
{
key11start = 1 ;
} else if( key11cout > 13)
{
key11cout = 0 ;
key11start = 0 ;
key11flg ++ ;
}
}
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:PORTB_IRQHandler
* 功能說明:PORTB端口中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-1-25 已測試
* 備 注:引腳號需要根據自己初始化來修改
*************************************************************************/
void PORTB_IRQHandler()
{
// PORT_PCR_REG(PORTB , 10) |= PORT_PCR_ISF(1);
u8 n = 0; //引腳號
n = 0;
if(PORTB_ISFR & (1 << n)) //PTB0觸發中斷
{
PORTB_ISFR |= (1 << n); //寫1清中斷標志位
/* 用戶任務 */
}
n = 10;
if(PORTB_ISFR & (1 << n)) //PTB10觸發中斷
{
PORTB_ISFR |= (1 << n); //寫1清中斷標志位
/* 用戶任務 */
}
}
/*************************************************************************
* 藍宙嵌入式開發工作室
*
* 函數名稱:PIT2_IRQHandler
* 功能說明:PIT2定時中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-9-18 已測試
* 備 注:
*************************************************************************/
void PIT2_IRQHandler(void)
{
PIT_Flag_Clear(PIT2); //清中斷標志位
if(key8start)
{
key8cout ++ ;
}
if( key8cout > 150)
{
key8cout = 0 ;
key8start = 0 ;
}
if(key9start)
{
key9cout ++ ;
}
if( key9cout > 150)
{
key9cout = 0 ;
key9start = 0 ;
}
if(key10start)
{
key10cout ++ ;
}
if( key10cout > 150)
{
key10cout = 0 ;
key10start = 0 ;
}
if(key11start)
{
key11cout ++ ;
}
if( key11cout > 150)
{
key11cout = 0 ;
key11start = 0 ;
}
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:FTM0_IRQHandler
* 功能說明:FTM0輸入捕捉中斷服務函數
* 參數說明:無
* 函數返回:無
* 修改時間:2012-2-25
* 備 注:引腳號需要根據自己初始化來修改,參考現有的代碼添加自己的功能
*************************************************************************/
void FTM0_IRQHandler()
{
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱: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 n;
FTM1_STATUS = 0x00; //清中斷標志位
n = 0;
if( s & (1 << n) )
{
FTM_CnSC_REG(FTM1_BASE_PTR, n) &= ~FTM_CnSC_CHIE_MASK; //禁止輸入捕捉中斷
/* 用戶任務 */
printf("\nFTM1發送中斷\n");
/*********************/
//不建議在這里開啟輸入捕捉中斷,而是在main函數里根據需要來開啟
//通道 CH0、CH1、Ch2、Ch3 有濾波器
//FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //開啟輸入捕捉中斷
//delayms(10); //因為輸入的信號跳變過程不穩定,容易觸發多次輸入捕捉,所以添加延時
//但考慮到中斷不應該過長延時,所以開輸入捕捉中斷就放在main函數里,根據需要來開啟
}
n = 1;
if( s & (1 << n) )
{
FTM_CnSC_REG(FTM1_BASE_PTR, n) &= ~FTM_CnSC_CHIE_MASK; //禁止輸入捕捉中斷
/* 用戶任務 */
/*********************/
//不建議在這里開啟輸入捕捉中斷
//FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //開啟輸入捕捉中斷
}
}
volatile u8 pit_flag = 0;
volatile u32 dma_int_count = 0;
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:DMA_CH4_Handler
* 功能說明:DMA通道4的中斷服務函數
* 參數說明:是采集攝像頭數據,本數據位攝像頭AD數據,可以采集到300個點。
設置標志位能夠及時搬移。
* 函數返回:無
* 修改時間:2012-3-18 已測試
* 備 注:
*************************************************************************/
u8 DMA_Over_Flg = 0 ; //行采集完成標志位
void DMA_CH4_Handler(void)
{
//DMA通道4
// u16 i ;
// uart_putchar(UART0,0XAA);
DMA_IRQ_CLEAN(DMA_CH4) ;
DMA_IRQ_DIS(DMA_CH4);
DMA_DIS(DMA_CH4);
DMA_Over_Flg = 1 ;
// disable_irq(PORTC+87);
}
/*************************************************************************
* 藍宙電子工作室
*
* 函數名稱:DMA_CH4_Handler
* 功能說明:DMA通道4的中斷服務函數
* 參數說明:是采集攝像頭數據,本數據位攝像頭AD數據,可以采集到300個點。
設置標志位能夠及時搬移。
* 函數返回:無
* 修改時間:2012-3-18 已測試
* 備 注:
*************************************************************************/
void DMA_CH0_Handler(void)
{
//DMA通道0
printf("DMA_CH0_Handler\n");
DMA_IRQ_CLEAN(DMA_CH0); //清除通道傳輸中斷標志位 (這樣才能再次進入中斷)
DMA_EN(DMA_CH0); //使能通道CHn 硬件請求 (這樣才能繼續觸發DMA傳輸)
// uart_putchar(UART0,0XAA);
}
volatile u8 LPT_INT_count = 0;
void LPT_Handler(void)
{
LPTMR0_CSR |= LPTMR_CSR_TCF_MASK; //清除LPTMR比較標志
LPT_INT_count++; //中斷溢出加1
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -