📄 icetek-dm642-pci.c
字号:
#include "ICETEK-DM642-PCI.h"
//工作变量
#pragma DATA_SECTION(nMemTemp, ".INTPROCBUFF");
#pragma DATA_ALIGN(nMemTemp,128);
unsigned char nMemTemp[720];
#pragma DATA_SECTION(cLines, ".INTPROCBUFF");
#pragma DATA_ALIGN(cLines,128);
unsigned char cLines[MWIDTH*3];
int mi,mj,m_nWork1;
unsigned int m_nWork,*pWork,m_nOffset1,m_nOffset2,m_nOffset3;
unsigned char *pImg1,*pImg2,*pImg3;
unsigned char x1,x2,x3,x4,x5,x6,x7,x8,x9;
#pragma DATA_SECTION(cBuffer, ".INTPROCBUFF");
#pragma DATA_ALIGN(cBuffer,128);
unsigned char cBuffer[9],cWork;
void ICETEKDM642PCIBoardInit()
{
m_nOffset1=0;
m_nOffset2=MWIDTH;
m_nOffset3=MWIDTH*2;
for ( mi=0;mi<MWIDTH*2;mi++ )
cLines[mi]=0;
}
#pragma CODE_SECTION(ICETEKDM642PCIMedianFilter,".text1")
void ICETEKDM642PCIMedianFilter()
{
unsigned int m_nID;
m_nID=DAT_copy(nMemTemp,cLines+m_nOffset3,MWIDTH);
pImg1=cLines; pImg1+=m_nOffset1;
pImg2=cLines; pImg2+=m_nOffset2;
pImg3=cLines; pImg3+=m_nOffset3;
x1=(*pImg1); pImg1++; x2=(*pImg1); pImg1++;
x4=(*pImg2); pImg2++; x5=(*pImg2); pImg2++;
x7=(*pImg3); pImg3++; x8=(*pImg3); pImg3++;
for ( mi=2;mi<MWIDTH;mi++,pImg1++,pImg2++,pImg3++ )
{
x3=(*pImg1); x6=(*pImg2); x9=(*pImg3);
nMemTemp[mi]=GetMiddleValue();
x1=x2; x2=x3;
x4=x5; x5=x6;
x7=x8; x8=x9;
}
nMemTemp[mi]=0;
m_nWork=m_nOffset1; m_nOffset1=m_nOffset2;
m_nOffset2=m_nOffset3; m_nOffset3=m_nWork;
}
#pragma CODE_SECTION(GetMiddleValue,".text1")
unsigned char GetMiddleValue()
{
int i,j;
cBuffer[0]=x1; cBuffer[1]=x2; cBuffer[2]=x3;
cBuffer[3]=x4; cBuffer[4]=x5; cBuffer[5]=x6;
cBuffer[6]=x7; cBuffer[7]=x8; cBuffer[8]=x9;
for ( i=0;i<8;i++ )
for ( j=i;j<9;j++ )
if ( cBuffer[i]>cBuffer[j] )
{
cWork=cBuffer[i];
cBuffer[i]=cBuffer[j];
cBuffer[j]=cWork;
}
return cBuffer[5];
}
void mInitVPort()
{
unsigned long int ii;
/* Unlock PERCFG through PCFGLOCK */
*((unsigned long *)0x1b3f018) = 0x10c0010c;
/* Enable VP0-VP2, I2C and McASP0 in PERCFG */
*((unsigned long *)0x1b3f000) = 0x78;
/* Read back PERCFG */
ii = *((unsigned long *)0x1b3f000);
/* Wait at least 128 CPU cycles */
EVMDM642_wait(128);
*((unsigned long *)0x1c400c0)=0x8000; //reset vport0
*((unsigned long *)0x1c440c0)=0x8000; //reset vport1
EVMDM642_wait(256);
*((unsigned long *)0x1c400c0)=0x00001; //enable double chn
*((unsigned long *)0x1c440c0)=0x00001; //enable double chn
EVMDM642_wait(256);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -