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

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

?? vportcap.c

?? 基于TMS320DM642實現的視頻采集程序。
?? C
?? 第 1 頁 / 共 3 頁
字號:
                      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;            
                }    
                if(i > 1) {
                    /* don't put the first 2 viop into the queue */
                    QUE_enqueue(&chan->qIn, (QUE_Handle)&chan->viops[i]);
                }

            }
        }    
        CACHE_clean(CACHE_L2ALL, 0, 0);
        chan->curViop = &chan->viops[0];
        chan->nextViop = &chan->viops[1]; 
        for(i = 0; i < _VPORT_NUM_EDMA_CHANS; 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(0), 
                EDMA_OPT_TCCM_OF(0),
                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 optFld2a = 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,
                (i == 0 ? EDMA_OPT_TCINT_YES:EDMA_OPT_TCINT_NO),
                EDMA_OPT_TCC_OF(i == 0 ? chan->tcc[0] & 0x0f : 0), 
                EDMA_OPT_TCCM_OF(i == 0 ? chan->tcc[0] >> 4 : 0),
                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 optFld2b = 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,
                (i == 0 ? EDMA_OPT_TCINT_YES:EDMA_OPT_TCINT_NO),
                EDMA_OPT_TCC_OF(i == 0 ? chan->tcc[1] & 0x0f : 0), 
                EDMA_OPT_TCCM_OF(i == 0 ? chan->tcc[1] >> 4 : 0),
                EDMA_OPT_ATCINT_NO,    
                EDMA_OPT_ATCC_DEFAULT,
                EDMA_OPT_PDTS_DISABLE,
                EDMA_OPT_PDTD_DISABLE,
                EDMA_OPT_LINK_YES,
                EDMA_OPT_FS_NO
            );

            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 */
                
                /* first field */
                cfgEdma.cnt = 
                  EDMA_CNT_RMK((chan->numEventsFld1) - 1, (thrld << 1));
                cfgEdma.idx = EDMA_IDX_RMK(thrld << 4, 0);
    
                /* hard code the first two frames as current and reload buffers */                
                /* first field */
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * 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[4 * i], &cfgEdma); 
                cfgEdma.dst = 
                  EDMA_DST_RMK(*((Int *)(&chan->viops[1].frame.iFrm.y1) + i));
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i + 3]);
                EDMA_config(chan->hRld[4 * i + 2], &cfgEdma);

                /* second field */
                cfgEdma.opt = optFld2a;
                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[4 * i + 2]);
                EDMA_config(chan->hRld[4 * i + 1], &cfgEdma); 
                cfgEdma.opt = optFld2b;
                cfgEdma.dst = 
                  EDMA_DST_RMK(*((Int *)(&chan->viops[1].frame.iFrm.y2) + i));
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i]);
                EDMA_config(chan->hRld[4 * i + 3], &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 = optFld2a;
                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[4 * i + 2]);
                /* 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);
                EDMA_config(chan->hRld[4 * i], &cfgEdma);

                cfgEdma.opt = optFld2b;
                cfgEdma.rld = EDMA_RLD_RMK(0, chan->hRld[4 * i]);
                cfgEdma.dst = EDMA_DST_RMK(
                    *((Int *)(&chan->viops[1].frame.iFrm.y1) + i));
                EDMA_config(chan->hRld[4 * i + 2], &cfgEdma);
            }
        }
        chan->nextEDMARlds = 1;        
        /* enable EDMA channel */
        /*
         * 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_intHook(chan->tcc[0], captureEdmaISR);       
        EDMA_intEnable(chan->tcc[0]);
        EDMA_intClear(chan->tcc[1]);
        EDMA_intHook(chan->tcc[1], captureEdmaISR);       
        EDMA_intEnable(chan->tcc[1]);
        for(i = 0; i < _VPORT_NUM_EDMA_CHANS; i ++) {
            EDMA_disableChannel(chan->hEdma[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;    
    Int numEvents;
    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]);
    EDMA_intDisable(chan->tcc[1]);
    for(i = 0; i < _VPORT_NUM_EDMA_CHANS; i ++) {
        EDMA_disableChannel(chan->hEdma[i]);
        EDMA_clearChannel(chan->hEdma[i]);
    }
    if(chan->mergeFlds) {
        numEvents = chan->numEventsFld1;        
    } else {
        numEvents = chan->numEvents;
    }

    /* 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(numEvents - 1, 
        (chan->yThrld << 1)));
    EDMA_RSETH(chan->hEdma[1], CNT, EDMA_CNT_RMK(numEvents - 1, 
        (chan->cThrld << 1)));
    EDMA_RSETH(chan->hEdma[2], CNT, EDMA_CNT_RMK(numEvents - 1, 
        (chan->cThrld<<1)));

    /* enable the edma events again before settings them up */
    EDMA_intEnable(chan->tcc[0]);
    EDMA_intEnable(chan->tcc[1]);
    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;
    Int 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;   
}      
static void _delay(Int delayTime)
{
    asm("loop1: BDEC loop1, A4");
    asm(" NOP 5");

}

/*
 *  ======== _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;    

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

    _delay(20000000);
    /* 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]);

    EDMA_intDisable(chan->tcc[1]);
    EDMA_intClear(chan->tcc[1]);

    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精品在线观看入口| 亚洲国产视频在线| 欧美日韩aaa| 美女看a上一区| 久久精品日韩一区二区三区| 成人免费视频caoporn| 亚洲欧美一区二区在线观看| 在线观看中文字幕不卡| 午夜精品久久久久久久蜜桃app| 日韩欧美中文字幕精品| 国产激情视频一区二区在线观看 | 亚洲一区二区三区精品在线| 欧美日韩成人一区| 久久99精品久久久久久动态图| 国产日韩影视精品| 91在线播放网址| 奇米影视一区二区三区| 欧美精品一区男女天堂| 99精品偷自拍| 裸体歌舞表演一区二区| 国产精品素人一区二区| 在线观看区一区二| 国内精品在线播放| 亚洲柠檬福利资源导航| 精品国产伦一区二区三区免费| 91香蕉视频黄| 精品一区中文字幕| 一区二区三区免费网站| 精品久久久久久久久久久院品网| 91免费国产视频网站| 日韩激情一二三区| 国产精品色哟哟| 欧美久久久久久久久中文字幕| 国产一区二区三区香蕉 | 欧美日韩精品二区第二页| 国产精品亚洲成人| 天天色图综合网| 国产精品久久久久四虎| 欧美成人免费网站| 欧美亚洲综合久久| 风间由美一区二区三区在线观看 | 久久99蜜桃精品| 最新成人av在线| 久久精品人人做人人综合| 欧美日韩久久一区| voyeur盗摄精品| 国产老妇另类xxxxx| 青青青伊人色综合久久| 亚洲一区精品在线| 亚洲人一二三区| 久久久久久久久久久黄色| 欧美日韩黄色影视| 91极品视觉盛宴| av激情综合网| 夫妻av一区二区| 国产精品69毛片高清亚洲| 美女高潮久久久| 日本最新不卡在线| 亚洲一二三专区| 亚洲精品免费在线| 国产精品国产馆在线真实露脸| 久久亚洲一区二区三区四区| 日韩一区二区视频| 欧美精品乱人伦久久久久久| 欧美私模裸体表演在线观看| 91国偷自产一区二区三区观看| 99这里只有精品| av男人天堂一区| 92精品国产成人观看免费| 99久久er热在这里只有精品15 | 国模套图日韩精品一区二区| 美腿丝袜亚洲三区| 喷水一区二区三区| 蜜臀av一区二区三区| 丝袜美腿一区二区三区| 亚洲福利国产精品| 亚洲成a人在线观看| 午夜电影一区二区三区| 亚洲www啪成人一区二区麻豆| 亚洲成人动漫av| 日韩av网站在线观看| 久久国产精品99久久人人澡| 精品一区二区三区免费毛片爱| 久99久精品视频免费观看| 精品一区二区三区在线播放| 国产在线精品免费av| 国产福利精品一区二区| 99免费精品在线观看| 色综合一个色综合亚洲| 欧美日韩一区二区不卡| 日韩欧美亚洲国产另类| 国产欧美精品区一区二区三区| 亚洲欧洲三级电影| 一区二区三区在线高清| 日韩影视精彩在线| 国产精品亚洲一区二区三区妖精| 成人看片黄a免费看在线| 91网站在线观看视频| 欧美日韩电影一区| 久久婷婷色综合| 亚洲男同1069视频| 日韩中文字幕av电影| 粉嫩嫩av羞羞动漫久久久 | 国产精品理伦片| 亚洲福利一区二区三区| 极品美女销魂一区二区三区| 波多野结衣欧美| 欧美日韩免费电影| 久久午夜电影网| 亚洲自拍偷拍综合| 精品在线观看视频| 色婷婷久久久久swag精品| 日韩欧美一区电影| 国产精品久久一级| 全国精品久久少妇| av影院午夜一区| 欧美一区二区三区思思人| 中文字幕第一页久久| 午夜精品一区二区三区免费视频| 国产一区 二区| 欧美优质美女网站| 久久精品一区二区三区av| 亚洲大片在线观看| 国产成人自拍网| 在线播放欧美女士性生活| 久久久亚洲国产美女国产盗摄| 亚洲精品免费在线播放| 激情六月婷婷久久| 欧美日韩国产高清一区二区| 欧美激情在线一区二区| 青青草国产精品97视觉盛宴 | 日韩av在线发布| 97久久精品人人做人人爽| 精品欧美一区二区久久| 一区二区三区成人在线视频| 粉嫩蜜臀av国产精品网站| 欧美一级理论片| 亚洲国产欧美另类丝袜| 成人国产精品视频| 精品国产乱码久久久久久图片| 亚洲国产毛片aaaaa无费看 | 99久久精品国产精品久久| 2023国产精华国产精品| 丝袜亚洲另类丝袜在线| 色综合久久久久| 亚洲少妇30p| 成av人片一区二区| 日本一区二区三区在线不卡| 激情综合五月婷婷| 日韩网站在线看片你懂的| 午夜av一区二区三区| 日本韩国欧美在线| 亚洲欧洲成人自拍| 不卡一二三区首页| 欧美激情综合在线| 国产98色在线|日韩| 久久久久免费观看| 激情五月婷婷综合网| 精品久久久网站| 精品一区二区国语对白| 日韩精品一区在线| 激情五月婷婷综合网| 亚洲精品在线免费观看视频| 麻豆成人在线观看| 日韩欧美中文一区二区| 看电影不卡的网站| 精品成人一区二区| 加勒比av一区二区| 久久久久一区二区三区四区| 国产精品一区二区男女羞羞无遮挡 | 亚洲欧美国产77777| 91免费观看视频在线| 一区二区三区精品视频在线| 欧美性猛片xxxx免费看久爱| 亚洲18影院在线观看| 69p69国产精品| 精品一区二区三区日韩| 久久久高清一区二区三区| 国产精品羞羞答答xxdd| 欧美国产精品一区| 91亚洲永久精品| 亚洲福中文字幕伊人影院| 欧美一区二区三区在线观看视频| 韩国欧美国产1区| 国产午夜精品一区二区三区视频 | 欧美色图在线观看| 青青草97国产精品免费观看| 2019国产精品| 99re66热这里只有精品3直播 | 91在线无精精品入口| 一区二区久久久久久| 日韩小视频在线观看专区| 国产精品一区二区果冻传媒| 国产精品久久久久精k8 | 有码一区二区三区| 6080亚洲精品一区二区| 国产毛片一区二区| 一区二区日韩av|