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

📄 yuv.c

📁 一个用于TI DSP 6711的便于检测程序
💻 C
字号:
#include <c6x.h>
#include "flash.h"
#include "ICETEKYUV.h"

/* 图象锐化实验程序 */
void Sobel();

int main()
{
	register int i,j,ii;
	
	/********************* 初始化DSP ***********************/
	CSR=0x100;			/* 关中断 */
	IER=1;				/* 屏蔽除NMI中断以外的所有中断 */
	ICR=0xffff;			/* 清除中断标志位 */

	*(unsigned volatile int *)EMIF_GCR = 0x3300;    	/* EMIF 全局控制字 */
	*(unsigned volatile int *)EMIF_CE1 = CE1_32;    	/* EMIF CE1 control, 32位 */
	*(unsigned volatile int *)EMIF_SDCTRL = 0x07126000; 	/* EMIF SDRAM控制字 */
	*(unsigned volatile int *)EMIF_CE0 = 0x30;      	/* EMIF CE0控制字 */
	*(unsigned volatile int *)EMIF_SDRP = 0x61a;    	/* EMIF SDRM刷新周期 */
	*(unsigned volatile int *)EMIF_SDEXT= 0x54529;  	/* EMIF SDRM扩展 */
	/* Read space 	*/
	*(unsigned volatile int *)EMIF_CE2 = CE2_32_max;	/* EMIF CE2控制字 */
	/* Write space */	
	*(unsigned volatile int *)EMIF_CE3 = CE3_32;		/* EMIF CE3控制字 */
	delay_msec(ms_period/2);
	for(i=0;i<0xff;i++)
	{
		start_i2c();
		stop_i2c();
		delay_msec(5);
	}	    
	Init_7190();
	for(j=0;j<0x5;j++)	for(ii=0;ii<0x5;ii++);
	Init_7111();
	/******************* DSP初始化完毕 ********************/
	while ( 1 )					
     {	
		througth();	//直通显示方式
		capture();	//摄入新的帧至RAM,直通显示方式
		display();	//显示RAM中的图象
		througth();	//直通显示方式,为对数据进行操作必须设置直通显示方式
		Sobel();	//边缘检测,用Sobel边缘检测算子对图象进行边缘检测运算
		display();	//显示处理后的图像
		for(i=0;i<0x7fffff;i++) for ( j=0;j<32;j++);	//延时再重做 
	}
}		

void Sobel()
{
	int i,j,k,nWr1,nWr2,c[9],cu,cd,cm;
	unsigned int *pVideo,*pImage,*pU,*pM,*pD;
	unsigned int uWr1,uWr2;
	
	pVideo=(unsigned int *)VIDEO_START;
	pImage=(unsigned int *)0x80100000;
	pU=pVideo; pM=pU+512; pD=pM+512;
	for ( i=0;i<574;i++ )   //行576
	{  
		uWr1=*pU; uWr1>>=8; c[0]=(uWr1&0x0ff); uWr1>>=16; c[1]=(uWr1&0x0ff);
		uWr1=*pM; uWr1>>=8; c[3]=(uWr1&0x0ff); uWr1>>=16; c[4]=(uWr1&0x0ff);
		uWr1=*pD; uWr1>>=8; c[6]=(uWr1&0x0ff); uWr1>>=16; c[7]=(uWr1&0x0ff);
		for ( j=0;j<360-1;j++ )   //列720点,360个32bit,
		{
			pU++; pM++; pD++;
			uWr1=*pU; uWr1>>=8; c[2]=(uWr1&0x0ff); uWr1>>=16; cu=(uWr1&0x0ff);
			uWr1=*pM; uWr1>>=8; c[5]=(uWr1&0x0ff); uWr1>>=16; cm=(uWr1&0x0ff);
			uWr1=*pD; uWr1>>=8; c[8]=(uWr1&0x0ff); uWr1>>=16; cd=(uWr1&0x0ff);
			nWr1=c[6]+c[7]+c[7]+c[8]-c[0]-c[1]-c[1]-c[2];	// Sobel水平边缘算子
			nWr2=c[2]+c[5]+c[5]+c[8]-c[0]-c[3]-c[3]-c[6];	// Sobel垂直边缘算子
			if ( nWr1<nWr2 )	nWr1=nWr2;
			if ( nWr1<0 )	nWr1=0;
			else if ( nWr1>255 )	nWr1=255;
			uWr1=nWr1; uWr1&=0x0ff; uWr1<<=24;
			uWr2=0x800080; uWr2|=uWr1;
			for ( k=0;k<2;k++ )
			{
				c[k]=c[k+1]; c[k+3]=c[k+4]; c[k+6]=c[k+7];
			}
			c[2]=cu; c[5]=cm; c[8]=cd;
			nWr1=c[6]+c[7]+c[7]+c[8]-c[0]-c[1]-c[1]-c[2];	// Sobel水平边缘算子
			nWr2=c[2]+c[5]+c[5]+c[8]-c[0]-c[3]-c[3]-c[6];	// Sobel垂直边缘算子
			if ( nWr1<nWr2 )	nWr1=nWr2;
			if ( nWr1<0 )	nWr1=0;
			else if ( nWr1>255 )	nWr1=255;
			uWr1=nWr1; uWr1&=0x0ff; uWr1<<=8;
			uWr2|=uWr1;
			(*pImage)=uWr2; pImage++;
			for ( k=0;k<2;k++ )
			{
				c[k]=c[k+1]; c[k+3]=c[k+4]; c[k+6]=c[k+7];
			}
		}
		pVideo+=512; pU=pVideo; pM=pU+512; pD=pM+512;
	}
	pVideo=(unsigned int *)VIDEO_START;
	pImage=(unsigned int *)0x80100000;
	for ( i=0,pU=pVideo+512;i<574;i++,pU+=512 )
	{
		for ( j=0,pM=pU;j<359;j++,pM++,pImage++ )
			(*pM)=(*pImage);
	}
}

⌨️ 快捷键说明

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