Exemple #1
0
// =============================================================================
// 函数功能:__P1020PicTimer_EnInt
//          使能定时器中断
// 输入参数:timer,待操作的定时器
// 输出参数:
// 返回值  :true成功false失败
// 说明    :
// =============================================================================
bool_t  __P1020PicTimer_EnInt(struct tagP1020PicTimerHandle  *timer)
{
    if(timer->timerstate & CN_TIMER_ENUSE)
    {
        timer->timerstate = (timer->timerstate)| (CN_TIMER_ENINT);
        return Int_ContactLine(timer->irqline);
    }
    else
    {
        return false;
    }
}
Exemple #2
0
//----直接允许实时中断线-------------------------------------------------------
//功能:本函数是int_disable_real_line()的姊妹函数,调用本函数使中断线的使能计数
//      器归零,并接通中断线
//参数:ufl_line
//返回:无
//------------------------------------------------------------------------------
bool_t Int_EnableRealLine(ufast_t ufl_line)
{
    if( (ufl_line > CN_INT_LINE_LAST)
            || (tg_pIntLineTable[ufl_line] == NULL) )
        return false;
    if(tg_pIntLineTable[ufl_line]->int_type == CN_ASYN_SIGNAL)
        return false;

    tg_pIntLineTable[ufl_line]->en_counter = 0;
    tg_int_global.enable_bitmap[ufl_line/CN_CPU_BITS]
                |= 1<<(ufl_line % CN_CPU_BITS);
    Int_ContactLine(ufl_line);
    return true;
}
Exemple #3
0
//----恢复保存的异步信号中断线状态---------------------------------------------
//功能:本函数是int_save_line()的姊妹函数,调用本函数使禁止次数减少,调
//      用一次int_save_line是禁止次数增加。
//      当次数减至0时激活中断线,否则简单减1
//参数:ufl_line
//返回:无
//注: 本函数不允许在实时中断ISR中调用,若调用直接返回false。
//-----------------------------------------------------------------------------
bool_t Int_RestoreAsynLine(ufast_t ufl_line)
{
    if( (ufl_line > CN_INT_LINE_LAST)
            || (tg_pIntLineTable[ufl_line] == NULL)
            || (tg_int_global.nest_real != 0) )
        return false;
    if(tg_pIntLineTable[ufl_line]->int_type == CN_REAL)
        return false;
    if(tg_pIntLineTable[ufl_line]->en_counter != 0)
        tg_pIntLineTable[ufl_line]->en_counter--;
    if(tg_pIntLineTable[ufl_line]->en_counter==0)
    {
        tg_int_global.enable_bitmap[ufl_line/CN_CPU_BITS]
                |= 1<<(ufl_line % CN_CPU_BITS);
        Int_ContactLine(ufl_line);
    }
    return true;
}