コード例 #1
0
ファイル: cpu_peri_can.c プロジェクト: djyos/djyos
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);
//	}

}
コード例 #2
0
ファイル: cpu_peri_uart.c プロジェクト: djyos/djyos
// =============================================================================
// 功能: 初始化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);
    }
}
コード例 #3
0
ファイル: cpu_peri_spi.c プロジェクト: djyos/djyos
// =============================================================================
// 功能: 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);
}
コード例 #4
0
ファイル: cpu_peri_uart.c プロジェクト: jiankangshiye/DJYOS
//----初始化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);
}
コード例 #5
0
ファイル: pic_timer.c プロジェクト: jiankangshiye/DJYOS
// =============================================================================
// 函数功能:__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;
}