亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vportcap.c

?? DM642上用的TH8200采集芯片的配套驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
                }
                else if(! chan->mergeFlds) {
                    chan->viops[i].frame.iFrm.y2 = 
                      chan->viops[i].frame.iFrm.y1
                        + chan->numLinesFld1*chan->yPitch;
                    chan->viops[i].frame.iFrm.cb2 = 
                      chan->viops[i].frame.iFrm.cb1
                        + (chan->numLinesFld1*chan->cPitch);
                    chan->viops[i].frame.iFrm.cr2 = 
                      chan->viops[i].frame.iFrm.cr1
                        + (chan->numLinesFld1*chan->cPitch);
                }else {
                    chan->viops[i].frame.iFrm.y2 = 
                      chan->viops[i].frame.iFrm.y1 + chan->yPitch;
                    chan->viops[i].frame.iFrm.cb2 = 
                      chan->viops[i].frame.iFrm.cb1 + chan->cPitch;
                    chan->viops[i].frame.iFrm.cr2 = 
                      chan->viops[i].frame.iFrm.cr1 + chan->cPitch;            
                }    
            }
        }
        for(i = ! chan->mergeFlds + 1; i < chan->numFrms; i ++) {
            /* don't put the first 2 viop into the queue */
            QUE_enqueue(&chan->qIn, (QUE_Handle)&chan->viops[i]);
        }    
        chan->curViop = &chan->viops[0];
        chan->nextViop = &chan->viops[1]; 
        for(i = 0; i < 3; i ++) {
            Int optFld1 = EDMA_OPT_RMK(
                params->edmaPri,
                EDMA_OPT_ESIZE_32BIT,
                EDMA_OPT_2DS_NO,
                EDMA_OPT_SUM_NONE,
                EDMA_OPT_2DD_YES,
                EDMA_OPT_DUM_INC,
                EDMA_OPT_TCINT_NO,
                EDMA_OPT_TCC_OF(chan->tcc[i] & 0x0f), 
                EDMA_OPT_TCCM_OF(chan->tcc[i] >> 4),
                EDMA_OPT_ATCINT_NO,    
                EDMA_OPT_ATCC_DEFAULT,
                EDMA_OPT_PDTS_DISABLE,
                EDMA_OPT_PDTD_DISABLE,
                EDMA_OPT_LINK_YES,
                EDMA_OPT_FS_NO
            );
    
            Int optFld2 = EDMA_OPT_RMK(
                params->edmaPri,
                EDMA_OPT_ESIZE_32BIT,
                EDMA_OPT_2DS_NO,
                EDMA_OPT_SUM_NONE,
                EDMA_OPT_2DD_YES,
                EDMA_OPT_DUM_INC,
                EDMA_OPT_TCINT_YES,
                EDMA_OPT_TCC_OF(chan->tcc[i] & 0x0f), 
                EDMA_OPT_TCCM_OF(chan->tcc[i] >> 4),
                EDMA_OPT_ATCINT_NO,    
                EDMA_OPT_ATCC_DEFAULT,
                EDMA_OPT_PDTS_DISABLE,
                EDMA_OPT_PDTD_DISABLE,
                EDMA_OPT_LINK_YES,
                EDMA_OPT_FS_NO
            );
            EDMA_disableChannel(chan->hEdma[i]);
            EDMA_intClear(chan->tcc[i]);
            EDMA_clearChannel(chan->hEdma[i]);
            thrld = (i == 0) ? chan->yThrld : chan->cThrld; 
        
            cfgEdma.src = EDMA_SRC_RMK(chan->edmaAddr[i]);
            if(chan->mergeFlds) {
                /* to merge the two fields together */
                /* EDMA is configured to transfer only field 1 initially */
                /* line pitch is twice the line size */
                /* this requires that the threlhold is the same as line size */
                cfgEdma.cnt = 
                  EDMA_CNT_RMK((chan->numEventsFld1) - 1, (thrld << 1));
                cfgEdma.idx = EDMA_IDX_RMK(thrld << 4, 0);
    
                /* hard code the field 1 & 2 of the first  */
                /* frame buffer as current and reload buffers */
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[2 * i + 1]);
                cfgEdma.opt = optFld1;
                cfgEdma.dst = 
                  EDMA_DST_RMK(*((Int *)(&chan->viops[0].frame.iFrm.y1) + i));
                EDMA_config(chan->hEdma[i], &cfgEdma);
                EDMA_config(chan->hRld[2 * i], &cfgEdma); 

                cfgEdma.opt = optFld2;
                cfgEdma.cnt = 
                  EDMA_CNT_RMK((chan->numEvents-chan->numEventsFld1) - 1, 
                   (thrld << 1));
                cfgEdma.dst = 
                  EDMA_DST_RMK(*((Int *)(&chan->viops[0].frame.iFrm.y2) + i));
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[2 * i]);
                EDMA_config(chan->hRld[2 * i + 1], &cfgEdma); 
                
            }else {/* if fields are not merged, configure EDMA to transfer */
                   /* for both field1 and field 2                          */
                   /* the line pitch is just the line size                 */
                cfgEdma.opt = optFld2;
                cfgEdma.cnt = EDMA_CNT_RMK((chan->numEvents) - 1, (thrld << 1));
                cfgEdma.idx = EDMA_IDX_RMK(thrld << 3, 0);
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[i]);
                /* hard code the first and second frame buffer as current  */
                /* and reload buffers */
                cfgEdma.dst = EDMA_DST_RMK(
                    *((Int *)(&chan->viops[0].frame.iFrm.y1) + i));
                EDMA_config(chan->hEdma[i], &cfgEdma);
                cfgEdma.dst = EDMA_DST_RMK(
                    *((Int *)(&chan->viops[1].frame.iFrm.y1) + i));
                EDMA_config(chan->hRld[i], &cfgEdma);
            }
        }
        /* enable EDMA channel */
        EDMA_intHook(chan->tcc[0], captureEdmaISR);       
        /*
         * The EDMA interrupt dispatcher will be called by the
         * BIOS HWI interrupt dispatcher.
         */
        IRQ_map(IRQ_EVT_EDMAINT, params->irqId);
        HWI_dispatchPlug(params->irqId, (Fxn)EDMA_intDispatcher, -1, NULL);
        
        EDMA_intClear(chan->tcc[0]);
        EDMA_intEnable(chan->tcc[0]);
        for(i = 0; i < _VPORT_NUM_EDMA_CHANS; i ++) {
            EDMA_clearChannel(chan->hEdma[i]);
            EDMA_enableChannel(chan->hEdma[i]);
        }    
        chan->status |= _VPORT_READY;
        IRQ_enable(IRQ_EVT_EDMAINT);
        
    }   
    return IOM_COMPLETED;

}

/*
 *  ======== _covrRecover ========
 *  force recover from FIFO over-run
 */
static Int _covrRecover(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj* )chanp;
    PortObj* port = &portObjs[chan->portNum];
    volatile Int *base = (volatile Int *)port->base;
    volatile Int *cbase = (volatile Int *)chan->base;    
    volatile Int i;                                            
    
    
    /* disable over-run interrupt */
    base[_VP_VPIE_OFFSET] &= ~(_VP_VPIE_COVRA_MASK<<(chan->chanNum*16));
    /* block capture events */
    cbase[_VP_VCACTL_OFFSETA] |= _VP_VCACTL_BLKCAP_MASK;

    /* Disable the edmas before settings them up */
    EDMA_intDisable(chan->tcc[0]);
    for(i = 0; i < 3; i ++) {
        EDMA_disableChannel(chan->hEdma[i]);
        EDMA_clearChannel(chan->hEdma[i]);
    }
    /* set up DMA parameters again */
    EDMA_RSETH(chan->hEdma[0], DST, chan->curViop->frame.iFrm.y1);
    EDMA_RSETH(chan->hEdma[1], DST, chan->curViop->frame.iFrm.cb1);
    EDMA_RSETH(chan->hEdma[2], DST, chan->curViop->frame.iFrm.cr1);
    EDMA_RSETH(chan->hEdma[0], CNT, EDMA_CNT_RMK(chan->numEvents - 1, 
        (chan->yThrld << 1)));
    EDMA_RSETH(chan->hEdma[1], CNT, EDMA_CNT_RMK(chan->numEvents - 1, 
        (chan->cThrld << 1)));
    EDMA_RSETH(chan->hEdma[2], CNT, EDMA_CNT_RMK(chan->numEvents - 1, 
        (chan->cThrld<<1)));

    /* enable the edma events again before settings them up */
    EDMA_intEnable(chan->tcc[0]);
    for(i = 0;i < 3;i ++) {
        EDMA_enableChannel(chan->hEdma[i]);
    }
    /* delay */
    for(i = 0; i < 100000; i ++);

    /* clear any pending over-run interrupt */
    if(chan->chanNum == 0) {
        base[_VP_VPIS_OFFSET] |= _VP_VPIS_COVRA_MASK;
    }else {
        base[_VP_VPIS_OFFSET] |= _VP_VPIS_COVRB_MASK;
    }    
    /* enable event generation */
    cbase[_VP_VCACTL_OFFSETA] &= ~(_VP_VCACTL_BLKCAP_MASK);

    /* enable over-run interrupt */
    base[_VP_VPIE_OFFSET] |= _VP_VPIE_COVRA_MASK << (chan->chanNum * 16);

    return IOM_COMPLETED;
}


/*
 *  ======== _setVIntCb ========
 *  setup video port interrupt call-back
 */
static Int _setVIntCb(Ptr chanp, Ptr args)
{      
    _VPORT_ChanObj* chan = (_VPORT_ChanObj* )chanp;
    PortObj* port = &portObjs[chan->portNum];
    volatile Int *base = (volatile Int *)port->base;
    volatile Int *cBase = (volatile Int *)chan->base;
    VPORT_VIntCbParams* vIntCbParams = (void *)args;
    Uint16 mask = vIntCbParams->vIntMask;
    Uns vif2 = 0, vInt2 = 0, vif1 = 0, vInt1 = 0, fscl2 = 0;
    
    
    /* check to see if vertical interrupt is enabled */
    if(mask &= VPORT_INT_VINT1) {
        vif1 = 1;
        vInt1 = vIntCbParams->vIntLine;
    }
    if(mask &= VPORT_INT_VINT2) {
        vif2 = 1;
        vInt2 = vIntCbParams->vIntLine;    
    }
    fscl2 = vif2 & (~ vif1);
    /* setup vertical interrupt */
    cBase[_VP_VCAVINT_OFFSETA] = VP_VCAVINT_RMK(vif2,fscl2, 
        vInt2, vif1, vInt1);
    
    if(chan->chanNum == 1) {
        mask <<= 16;    /* channel B */
    }
    chan->vIntMask = mask;
    if(mask) {
        mask |= 1; /* turn on video port interrupt */
        IRQ_map(IRQ_EVT_VINT0 + chan->portNum, vIntCbParams->irqId);    
        HWI_dispatchPlug(vIntCbParams->irqId, (Fxn)captureISR, -1, NULL);
        IRQ_disable(IRQ_EVT_VINT0 + chan->portNum);
        IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
    }
    base[_VP_VPIE_OFFSET] |= mask;  /* register write */    
    chan->vIntFxn = vIntCbParams->vIntCbFxn;    
    chan->vIntCbArg = vIntCbParams->cbArg;
    return IOM_COMPLETED;   
}      

/*
 *  ======== _startVPCapture ========
 *  start video port capture operation
 */
static Int _startVPCapture(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj* )chanp;
    PortObj* port = &portObjs[chan->portNum];
    volatile Int *base = (volatile Int *)port->base;
    volatile Int *cbase = (volatile Int *)chan->base;    
    volatile Int i;

    /* enable channel */
    cbase[_VP_VCACTL_OFFSETA] |= VP_VCACTL_VCEN_ENABLE << _VP_VCACTL_VCEN_SHIFT;

    /* wait for port to sync up */  
    TSK_sleep(100);
    //for(i = 0; i < 100000; i ++);
    
    
    /* clear the block capture event mask bit to enable */
    /* generating capture events                        */
    cbase[_VP_VCACTL_OFFSETA] &= ~ (_VP_VCACTL_BLKCAP_MASK);

    /* enable interrupt generation in video port level */
    base[_VP_VPIE_OFFSET] |= VP_VPIE_VIE_ENABLE << _VP_VPIE_VIE_SHIFT;
    base[_VP_VPIS_OFFSET] |= 0XFFFFFFFF;
    
    /* clear any pending video port interrupt */
    IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
    /* enable corresponding video port interrupt in chip-level*/
    IRQ_enable(IRQ_EVT_VINT0 + chan->portNum);
    
    return IOM_COMPLETED;
}

/*
 *  ======== _stopVPCapture ========
 *  stop video port capture operation
 */
static Int _stopVPCapture(Ptr chanp)
{
    _VPORT_ChanObj* chan = (_VPORT_ChanObj* )chanp;
    PortObj* port = &portObjs[chan->portNum];
    volatile Int *cbase = (volatile Int *)chan->base;    
    volatile Int *base = (volatile Int *)port->base;

    /* block events generation */
    cbase[_VP_VCACTL_OFFSETA] &= (_VP_VCACTL_BLKCAP_MASK);

    /* disable channel */
    cbase[_VP_VCACTL_OFFSETA] &= 
        ~ (VP_VCACTL_VCEN_ENABLE << _VP_VCACTL_VCEN_SHIFT);

    /* disable interrupt generation in video port level */
    base[_VP_VPIE_OFFSET] &= ~ (VP_VPIE_VIE_ENABLE << _VP_VPIE_VIE_SHIFT);
    base[_VP_VPIS_OFFSET] |= 0XFFFFFFFF;
    
    /* disble corresponding video port interrupt in chip-level*/
    IRQ_disable(IRQ_EVT_VINT0 + chan->portNum);

    /* clear any pending video port interrupt */
    IRQ_clear(IRQ_EVT_VINT0 + chan->portNum);
    
    EDMA_intDisable(chan->tcc[0]);
    EDMA_intClear(chan->tcc[0]);

    return IOM_COMPLETED;
}



/*
 *  ======== captureISR ========
 */
static void captureISR(Int portNum)
{
    volatile Int *base =  
        (volatile Int *)portObjs[portNum].base;
    Int vpis = base[_VP_VPIS_OFFSET];
    Int mask = vpis;
    _VPORT_ChanObj* chanObjs = portObjs[portNum].chanObj;
        
    if(vpis & chanObjs[0].vIntMask && chanObjs[0].vIntFxn != INV) {
        chanObjs[0].vIntFxn(chanObjs[0].vIntCbArg, vpis);
        mask &=  chanObjs[0].vIntMask;
    }else if(vpis & chanObjs[1].vIntMask && chanObjs[1].vIntFxn != INV) {
        chanObjs[1].vIntFxn(chanObjs[1].vIntCbArg, (vpis >> 16));
        mask &=  chanObjs[1].vIntMask;
    }
    /* clear interrupts that has been handled */
    base[_VP_VPIS_OFFSET] |= mask;
}







?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网站最新地址| 亚洲综合色丁香婷婷六月图片| 视频一区在线播放| 在线成人午夜影院| 日韩福利电影在线观看| 日韩一级视频免费观看在线| 国产自产高清不卡| 国产无遮挡一区二区三区毛片日本| 国模娜娜一区二区三区| 欧美激情一区二区三区四区| 国产精品99久久久久久久vr| 亚洲日本在线a| 欧美日韩在线亚洲一区蜜芽| 人人超碰91尤物精品国产| 欧美成人乱码一区二区三区| 国产乱子轮精品视频| 自拍偷自拍亚洲精品播放| 欧美剧在线免费观看网站 | 天堂一区二区在线| 日韩视频一区二区三区在线播放 | 国产精品久久综合| 欧洲一区在线电影| 国产综合久久久久久鬼色| 18成人在线观看| 678五月天丁香亚洲综合网| 国产美女精品一区二区三区| 亚洲精品国产一区二区三区四区在线 | 亚洲一区二区欧美激情| 欧美成人一级视频| a4yy欧美一区二区三区| 日韩精品一二三| 国产精品高潮呻吟| 欧美一级日韩免费不卡| 成人不卡免费av| 亚洲成av人片在线观看无码| 国产三级欧美三级| 欧美乱妇15p| 成人动漫中文字幕| 乱一区二区av| 亚洲综合一区二区精品导航| 久久新电视剧免费观看| 欧洲色大大久久| 国产精品1024| 美女网站色91| 亚洲综合免费观看高清完整版在线| 欧美精品一区二区三| 欧美日韩美女一区二区| 成人少妇影院yyyy| 久久99久久久久| 亚洲成av人片一区二区| 亚洲国产精品国自产拍av| 欧美一区二区三区免费观看视频 | 国产99久久久精品| 日本不卡不码高清免费观看| 亚洲欧美日韩小说| 久久久国产综合精品女国产盗摄| 欧美日韩国产高清一区二区三区 | 91精品在线免费| 99在线热播精品免费| 精品一区二区三区在线视频| 午夜视频在线观看一区| 亚洲三级视频在线观看| 国产校园另类小说区| 欧美成人r级一区二区三区| 欧美日韩一级黄| 一本色道久久加勒比精品 | 日韩一区二区精品葵司在线| 欧美三级中文字| 色狠狠桃花综合| 99精品在线免费| 99久久夜色精品国产网站| 成人午夜激情影院| 高清国产一区二区| 高清不卡一区二区在线| 国产成人在线免费| 国产精品 日产精品 欧美精品| 国内精品免费**视频| 久久99国产精品久久99| 美女脱光内衣内裤视频久久网站| 欧美96一区二区免费视频| 天天操天天干天天综合网| 午夜欧美2019年伦理| 日本不卡高清视频| 精品一区二区综合| 国内偷窥港台综合视频在线播放| 久久99久久99| 国产99久久久国产精品潘金 | 一区二区三区欧美亚洲| 一区二区三区四区五区视频在线观看| 亚洲品质自拍视频| 亚洲一区二区欧美日韩| 欧美aaa在线| 国产精品一级在线| 成人黄色免费短视频| 色哟哟一区二区在线观看| 欧美性感一类影片在线播放| 欧美美女一区二区| 精品久久一区二区三区| 国产精品视频线看| 一区二区三区日韩精品视频| 日本在线不卡视频一二三区| 国产精品69久久久久水密桃| jvid福利写真一区二区三区| 在线观看免费一区| 欧美一级xxx| 欧美激情资源网| 一区二区三区四区激情| 日本不卡一区二区| 国产经典欧美精品| 欧美专区日韩专区| 精品久久一二三区| 国产精品久久久久久久裸模| 亚洲国产综合视频在线观看| 免费在线看成人av| 北条麻妃国产九九精品视频| 欧美日韩美少妇| 中文字幕第一区第二区| 亚洲一区二区三区四区五区中文| 精品一区免费av| 91久久精品日日躁夜夜躁欧美| 欧美一区二区黄| 亚洲欧美日韩小说| 黄页网站大全一区二区| 在线看一区二区| 欧美精品一区二区三区一线天视频 | 精品理论电影在线| 亚洲一区二区三区中文字幕在线| 经典三级一区二区| 欧美日韩精品一区视频| 国产欧美日韩另类视频免费观看| 亚洲综合一区二区| 粉嫩13p一区二区三区| 日韩欧美国产一二三区| 亚洲精品一卡二卡| 成人丝袜高跟foot| 精品国产伦理网| 偷拍一区二区三区四区| 91麻豆福利精品推荐| 久久久高清一区二区三区| 三级成人在线视频| 91蜜桃网址入口| 国产精品丝袜黑色高跟| 久久国产生活片100| 欧美三级电影在线观看| 中文字幕五月欧美| 国产成人在线观看| 日韩精品一区在线观看| 午夜精品久久久久久久久久久| 99久久99久久精品免费观看| 久久综合久久综合亚洲| 久久99九九99精品| 日韩视频在线永久播放| 日韩高清在线一区| 欧美午夜精品一区| 一区二区激情小说| 99re8在线精品视频免费播放| 久久天天做天天爱综合色| 免费欧美在线视频| 91精品福利在线一区二区三区| 一区二区三区日韩欧美| 91久久国产综合久久| 亚洲综合视频网| 欧美色电影在线| 亚洲综合一二区| 欧美伊人精品成人久久综合97| 亚洲图片你懂的| 91色九色蝌蚪| 一区二区三区欧美视频| 欧美在线999| 一级女性全黄久久生活片免费| 色综合天天做天天爱| 一区二区在线看| 欧洲精品在线观看| 亚洲午夜电影在线观看| 制服丝袜成人动漫| 蜜桃视频一区二区| 久久久久久综合| 粉嫩一区二区三区性色av| 国产精品视频麻豆| 色8久久人人97超碰香蕉987| 亚洲成人综合在线| 日韩美女视频在线| 国产91丝袜在线播放九色| 国产精品传媒入口麻豆| 在线免费不卡电影| 另类小说色综合网站| 久久久久久久久久久久久女国产乱| 国产精品 欧美精品| 亚洲色图都市小说| 欧美三级蜜桃2在线观看| 久久精品国产精品亚洲精品| 久久女同精品一区二区| 成人sese在线| 亚洲va国产va欧美va观看| 日韩一级黄色大片| 99久久久国产精品| 天天综合天天综合色| 久久久久国产精品麻豆| 在线免费观看一区| 国产综合久久久久久鬼色 |