⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 target.c

📁 用DSP(TMSDM642GDK)实现运动目标检测的C程序
💻 C
字号:
#include <std.h>
#include <tsk.h>   
#include <sem.h>    
#include <gio.h>  
 
#include <csl_dat.h>
#include <csl_cache.h> 


#include <fvid.h>  
#include <edc.h>  
#include <vport.h>
#include <vportcap.h>  
#include <vportdis.h>  
#include <saa7104.h>
#include <tvp5150a.h>  
  
#include <math.h>
#include <dm643.h>

#include "colorbar.h"
#include "DM643_vcapparams.h"
#include "DM643_vdisparams.h"
#include "C:\ti\myprojects\fanse3\videocfg.h"       
#include <sem.h>  

/* heap IDs defined in the BIOS configuration file */
extern Int EXTERNALHEAP; 
#pragma DATA_ALIGN(YArray, 8);
#pragma DATA_ALIGN(CbArray, 8);
#pragma DATA_ALIGN(CrArray, 8);
static unsigned char  YArray[704 * 600];
static unsigned char  YArray2[704 * 600];
static unsigned char  YArray3[704 * 600];
static unsigned char  CbArray[704 * 300];
//static unsigned char  CbArray2[704 * 300];
//static unsigned char  CbArray3[704 * 300];
static unsigned char  CrArray[704 * 300];
//static unsigned char  CrArray2[704 * 300];
//static unsigned char  CrArray3[704 * 300];


/* PAL_DISPLAY_ONLY : only display colorbar. */
/* PAL : capture and display video in PAL. */ 
/* NTSC : capture and display video in NTSC. */

/*
 * ======== main ========
 */
main()
{    
    /******************************************************/
    /* open CSL DAT module for fast copy                  */
    /******************************************************/
    CSL_init();                                             
    CACHE_clean(CACHE_L2ALL, 0, 0);
    CACHE_setL2Mode(CACHE_256KCACHE);       
    CACHE_enableCaching(CACHE_EMIFA_CE00);
    CACHE_enableCaching(CACHE_EMIFA_CE01);
    DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);  
    // powerdownSAA7104(1);		
}

/*
 * ======== tskVideoLoopback ========
 * video loopback function.
 */
void tskVideoInput()
{

    int             status;
    FVID_Handle  capChan;
    FVID_Frame *capFrameBuf;
    int frame=0;
    char *outBuf[3];
    char *inBuf[3];
   

    unsigned int id;
    unsigned int i;

    DM643_vCapParamsChan.segId = EXTERNALHEAP;
    DM643_vCapParamsTVP5150A.hI2C = DM643_I2C_hI2C;

    capChan = FVID_create("/VP2CAPTURE/A/0",
        IOM_INPUT, &status, (Ptr)&DM643_vCapParamsChan, NULL);

    FVID_control(capChan, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&DM643_vCapParamsTVP5150A);


    FVID_control(capChan, VPORT_CMD_START, NULL);


/* handle video capture, scaling and re-format */

    FVID_alloc(capChan, &capFrameBuf);


    while(1)
    {
        frame++;


        inBuf[0]  = capFrameBuf->frame.iFrm.y1;
        inBuf[1]  = capFrameBuf->frame.iFrm.cb1;
        inBuf[2]  = capFrameBuf->frame.iFrm.cr1;

        outBuf[0] =  (char *)YArray;
        outBuf[1] =  (char *)CbArray;
        outBuf[2] =  (char *)CrArray;

    FVID_exchange(capChan, &capFrameBuf);

    for( i = 0; i < 480; i++)
    {
        id = DAT_copy(inBuf[0] + (i * 720), outBuf[0] + (i * 720), 720);
        DAT_wait(id);
    }

    for( i = 0; i < (480 >> 1); i++)
    {
        id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
        DAT_wait(id);
    }

    for( i = 0; i < (480 >> 1); i++)
    {
        id = DAT_copy(inBuf[2] + (i * 360),  outBuf[2] + (i * 360), 360);
        DAT_wait(id);
    }
        // Calculate how long it takes to capture one frame
        FVID_exchange(capChan, &capFrameBuf);
        
        inBuf[0]  = capFrameBuf->frame.iFrm.y1;
        inBuf[1]  = capFrameBuf->frame.iFrm.cb1;
        inBuf[2]  = capFrameBuf->frame.iFrm.cr1;

        outBuf[0] =  (char *)YArray2;
        //outBuf[1] =  (char *)CbArray2;
        //outBuf[2] =  (char *)CrArray2;

    
    for( i = 0; i < 480; i++)
    {
        id = DAT_copy(inBuf[0] + (i * 720), outBuf[0] + (i * 720), 720);
        DAT_wait(id);
    }
    /*for( i = 0; i < (480 >> 1); i++)
    {
        id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
        DAT_wait(id);
    }

    for( i = 0; i < (480 >> 1); i++)
    {
        id = DAT_copy(inBuf[2] + (i * 360),  outBuf[2] + (i * 360), 360);
        DAT_wait(id);
    }*/

  
        SEM_post(&sem0);
        SEM_pend(&sem2, SYS_FOREVER);
    }
}

void tskProcess()
{
    //int i;
    //void *inBuf[3];
    //void *outBuf[3];
    int framenum=0;
    int i;
    int j;
    
    while(1)
    {
        framenum++;
        SEM_pend(&sem0, SYS_FOREVER);
   
    for( i=0; i<720*480; i++ )
	{
		//YArray3[i] = abs(YArray2[i] - YArray[i]);
		
		*(YArray3+i)=abs(*(YArray2+i)-*(YArray+i));
	}
	/*for( i=0; i<720*240; i++ )
	{
	    CbArray3[i] = abs(CbArray2[i] - CbArray[i]);
		
	}
	for( i=0; i<720*240; i++ )
	{
	    CrArray3[i] = abs(CrArray2[i] - CrArray[i]);
		
	}*/
	
	for(j=0;j<720 * 480;j++)
	{
	    *(YArray+j)=*(YArray3+j);
	} 
	for(j=0;j<704 * 240;j++)
	{
	    //CbArray[j]=CbArray3[j];
	    *(CbArray+j)=128;
	} 
	for(j=0;j<704 * 240;j++)
	{
	    //CrArray[j]=CrArray3[j];
	    *(CrArray+j)=128;
	} 
	      
	    CACHE_wbAllL2(CACHE_WAIT);
        CACHE_clean(CACHE_L2ALL, 0, 0);
        SEM_post(&sem1);    
    }
}

void tskVideoOutput()
{

    int             status;
    FVID_Handle  disChan;
    FVID_Frame *disFrameBuf;
    char *inBuf[3], *outBuf[3];
    unsigned int id;
    unsigned int i;

    DM643_vDisParamsChan.segId = EXTERNALHEAP;

    DM643_vDisParamsSAA7104.hI2C = DM643_I2C_hI2C;

    disChan = FVID_create("/VP1DISPLAY", IOM_OUTPUT,
        &status, (Ptr)&DM643_vDisParamsChan, NULL);

    FVID_control(disChan, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&DM643_vDisParamsSAA7104);


    FVID_control(disChan, VPORT_CMD_START, NULL);

/* handle video capture, scaling and re-format */


    FVID_alloc(disChan, &disFrameBuf);

    while(1)
    {
        SEM_pend(&sem1, SYS_FOREVER);

        inBuf[0] = (char *)YArray;
        inBuf[1] = (char *)CbArray;
        inBuf[2] = (char *)CrArray;

        outBuf[0] =  disFrameBuf->frame.iFrm.y1;
        outBuf[1] =  disFrameBuf->frame.iFrm.cb1;
        outBuf[2] =  disFrameBuf->frame.iFrm.cr1;

    for( i = 0; i < 480; i++)
    {
        id = DAT_copy(inBuf[0] + (i * 720),outBuf[0] + (i * 720), 720);
        DAT_wait(id);
    }

    for( i = 0; i < (480>> 1); i++)
    {
        id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
        DAT_wait(id);
    }

    for( i = 0; i < (480>> 1); i++)
    {
        id = DAT_copy(inBuf[2] + (i * 360), outBuf[2] + (i * 360), 360);
        DAT_wait(id);
    }


        SEM_post(&sem2);

        FVID_exchange(disChan, &disFrameBuf);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -