static void __CAN_IntInit(uint8_t byCanNo) { //挂中断线 if(byCanNo==0) { //发送中断线 Int_Register(CN_INT_LINE_CAN1_RX0); Int_SetClearType(CN_INT_LINE_CAN1_RX0,CN_INT_CLEAR_AUTO); Int_IsrConnect(CN_INT_LINE_CAN1_RX0,CAN_ISR_Handler); Int_SettoAsynSignal(CN_INT_LINE_CAN1_RX0); Int_ClearLine(CN_INT_LINE_CAN1_RX0); Int_RestoreAsynLine(CN_INT_LINE_CAN1_RX0); //发送中断线 Int_Register(CN_INT_LINE_CAN1_RX1); Int_SetClearType(CN_INT_LINE_CAN1_RX1,CN_INT_CLEAR_AUTO); Int_IsrConnect(CN_INT_LINE_CAN1_RX1,CAN_ISR_Handler); Int_SettoAsynSignal(CN_INT_LINE_CAN1_RX1); Int_ClearLine(CN_INT_LINE_CAN1_RX1); Int_RestoreAsynLine(CN_INT_LINE_CAN1_RX1); //发送中断线 Int_Register(CN_INT_LINE_CAN1_SCE); Int_SetClearType(CN_INT_LINE_CAN1_SCE,CN_INT_CLEAR_AUTO); Int_IsrConnect(CN_INT_LINE_CAN1_SCE,CAN_ISR_Handler); Int_SettoAsynSignal(CN_INT_LINE_CAN1_SCE); Int_ClearLine(CN_INT_LINE_CAN1_SCE); Int_RestoreAsynLine(CN_INT_LINE_CAN1_SCE); } // else // { // //发送中断线 // Int_Register(CN_INT_LINE_CAN2_RX0); // Int_SetClearType(CN_INT_LINE_CAN2_RX0,CN_INT_CLEAR_AUTO); // Int_IsrConnect(CN_INT_LINE_CAN2_RX0,CAN_ISR_Handler); // Int_SettoAsynSignal(CN_INT_LINE_CAN2_RX0); // Int_ClearLine(CN_INT_LINE_CAN2_RX0); // Int_RestoreAsynLine(CN_INT_LINE_CAN2_RX0); // // //发送中断线 // Int_Register(CN_INT_LINE_CAN2_RX1); // Int_SetClearType(CN_INT_LINE_CAN2_RX1,CN_INT_CLEAR_AUTO); // Int_IsrConnect(CN_INT_LINE_CAN2_RX1,CAN_ISR_Handler); // Int_SettoAsynSignal(CN_INT_LINE_CAN2_RX1); // Int_ClearLine(CN_INT_LINE_CAN2_RX1); // Int_RestoreAsynLine(CN_INT_LINE_CAN2_RX1); // // //发送中断线 // Int_Register(CN_INT_LINE_CAN2_SCE); // Int_SetClearType(CN_INT_LINE_CAN2_SCE,CN_INT_CLEAR_AUTO); // Int_IsrConnect(CN_INT_LINE_CAN2_SCE,CAN_ISR_Handler); // Int_SettoAsynSignal(CN_INT_LINE_CAN2_SCE); // Int_ClearLine(CN_INT_LINE_CAN2_SCE); // Int_RestoreAsynLine(CN_INT_LINE_CAN2_SCE); // } }
// ============================================================================= // 功能: 初始化UART对应的中断线,并初始化中断入口函数 // 参数:SerialNo,串口号 // 返回: 无 // ============================================================================= static void __UART_IntInit(u32 SerialNo) { u8 IntLine; if(SerialNo == CN_UART0) IntLine = CN_INT_LINE_UART0_RX_TX; else if(SerialNo == CN_UART1) IntLine = CN_INT_LINE_UART1_RX_TX; else if(SerialNo == CN_UART2) IntLine = CN_INT_LINE_UART2_RX_TX; else if(SerialNo == CN_UART3) IntLine = CN_INT_LINE_UART3_RX_TX; else if(SerialNo == CN_UART4) IntLine = CN_INT_LINE_UART4_RX_TX; else if(SerialNo == CN_UART5) IntLine = CN_INT_LINE_UART5_RX_TX; else return; if(true == Int_Register(IntLine)) { Int_IsrConnect(IntLine,UART_ISR); Int_SetClearType(IntLine,CN_INT_CLEAR_AUTO); Int_SettoAsynSignal(IntLine); Int_ClearLine(IntLine); Int_RestoreAsynLine(IntLine); } }
// ============================================================================= // 功能: SPI中断配置函数 // 参数: IntLine,中断线 // 返回: 无 // ============================================================================= static void __SPI_IntConfig(u8 IntLine) { //中断线的初始化 Int_Register(IntLine); Int_SetClearType(IntLine,CN_INT_CLEAR_AUTO); Int_IsrConnect(IntLine,SPI_ISR); Int_SettoAsynSignal(IntLine); Int_ClearLine(IntLine); Int_RestoreAsynLine(IntLine); }
//----初始化uart对应的中断----------------------------------------------------- //功能: 初始化uart对应的中断线,并初始化中断入口函数 //参数:SerialNo,串口号 //返回: 无 //----------------------------------------------------------------------------- void __UART_IntInit(u32 SerialNo) { uint32_t int_line; if(SerialNo == CN_UART0) int_line = CN_INT_LINE_UART0; else if(SerialNo == CN_UART1) int_line = CN_INT_LINE_UART1; else if(SerialNo == CN_USART0) int_line = CN_INT_LINE_USART0; else int_line = CN_INT_LINE_USART1; Int_SetClearType(int_line,CN_INT_CLEAR_PRE); Int_IsrConnect(int_line,UART_ISR); Int_SettoAsynSignal(int_line); Int_ClearLine(int_line); Int_RestoreAsynLine(int_line); }
// ============================================================================= // 函数功能:__P1020PicTimer_Alloc // 分配定时器 // 输入参数:cycle,定时器周期 // timerisr,定时器的中断处理函数 // 输出参数: // 返回值 :分配的定时器句柄,NULL则分配不成功 // 说明 : // ============================================================================= ptu32_t __P1020PicTimer_Alloc(u32 cycle,fnTimerIsr timerisr) { u8 timerno; u8 irqline; struct tagP1020PicTimerHandle *timer; ptu32_t timerhandle; //原子操作,防止资源竞争 atom_low_t timeratom; timeratom = Int_LowAtomStart(); //寻找空闲的timer timerno = __P1020PicTimer_GetFirstZeroBit(gs_dwP1020PicTimerBitmap); if(timerno < CN_P1020PICTIMER_NUM)//还有空闲的,则设置标志位 { gs_dwP1020PicTimerBitmap = gs_dwP1020PicTimerBitmap | (CN_P1020PICTIMER_BITMAP_MSK<< timerno); Int_LowAtomEnd(timeratom); //原子操作完毕 } else//没有的话直接返回就可以了,用不着再啰嗦了 { Int_LowAtomEnd(timeratom); //原子操作完毕 return NULL; } irqline = sgHaltimerIrq[timerno]; timer = &stgP1020TimerHandle[timerno]; timer->cycle = cycle; timer->timerno = timerno; timer->irqline = irqline; timer->timerstate = CN_TIMER_ENUSE; //好了,中断号和定时器号码都有了,该干嘛就干嘛了。 //先设置好定时器周期 __P1020PicTimer_PauseCount(timer); __P1020PicTimer_SetCycle(timer,cycle); //设置定时器中断,先结束掉该中断所有的关联相关内容 Int_CutLine(irqline); Int_IsrDisConnect(irqline); Int_EvttDisConnect(irqline); Int_SettoAsynSignal(irqline); Int_SetClearType(irqline,CN_INT_CLEAR_PRE); Int_IsrConnect(irqline, timerisr); timerhandle = (ptu32_t)timer; return timerhandle; }