📄 yuv.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 + -