📄 graph.c
字号:
//编译下载程序
//在程序中软件断点处加软件断点
//打开WATCH窗口,加入变量bCapture
//选择view->graph->image...
// [color space]=RGB
// [interleaved data sources]=No
// [start address - r source]=0x80500000
// [start address - g source]=0x80510000
// [start address - b source]=0x80520000
// [lines per display]=144
// [pixels per line]=180
// [Bytes packing to fit 32bit]=yes
// [image origin]=Top Left
//运行程序
//需要转换时在watch窗口中修改bCapture值为非零值
//程序停在断点处时观察图像
#include "graph.h"
#include "mtv.h"
#include "dtv.h"
#define ICETEK6711ALED (*(unsigned int *)0x90202018)
#define ICETEK6711ASW (*(unsigned int *)0x90202014)
cregister unsigned int IER,IFR,CSR,ICR,ISTP;
void initInterrupt(void);
#define DMA1_DEST_CTRL *(int *)0x1840058
#define DMA1_PRIMARY_CTRL *(int *)0x1840040
#define DMA1_SECONDDARY_CTRL *(int *)0x1840048
#define DMA1_SRC_CTRL *(int *)0x1840050
#define DMA1_TRANS_CTRL *(int *)0x1840060
#define MTVFPGA_PGM 0xa030010c
#define FPAG_DATA 0xa0300114
#define SYS_STATE 0xa0300020
#define I2C_REG 0xa0300004
#define SYSRREG 0xA020000c
#define UART_BASE_ADDR 0xa0300000
#define OFFSET 4
#define RBR 0xa0300000
#define THR 0xa0300000
#define IIER 0xa0300004
#define IIR 0xa0300008
#define FCR 0xa0300008
#define LCR 0xa030000c
#define MCR 0xa0300010
#define LSR 0xa0300014
#define MSR 0xa0300018
#define SCR 0xa030001c
#define DLL 0xa0300000
#define DLM 0xa0300004
#define VIDEO_READBUFFER 0xa01a0000
#define VIDEO_WRITEBUFFER 0xa01c0000
#define HOST_WRITEADD_SET 0xa01e0600
#define HOST_READADD_SET 0xa01e0610
#define HOST_WRITEADD_CLR 0xa01e0700
#define HOST_READADD_CLR 0xa01e0710
#define TST_SRC 0x80001000
#define VOCTR 0x0a020003c
#define VICTR 0x0a010003c
#define VOUTCTR 0x0a020003c
#define VINCTR 0x0a010003c
#define VOUTMASK 0x07fffffff
#define VOUTENABLE 0x80000000
#define DSPWBMASK 0x0ffffcfff
#define DSPWB0 0x0000
#define DSPWB1 0x1000
#define DSPWB2 0x2000
#define DSPWB3 0x3000
#define VOBMASK 0x0ffffcfff
#define VOB0 0x00
#define VOB1 0x10
#define VOB2 0x20
#define VOB3 0x30
#define TVMASK 0x0fffffffd
#define TVENABLE 2
#define TRANSPARENCEMASK 0x0fffffffe
#define TRANSPARENCE 1
#define VINMASK 0x07fffffff
#define VINENABLE 0x80000000
#define DSPRMASK 0x0fffcffff
#define DSPRB0 0x00000
#define DSPRB1 0x10000
#define DSPRB2 0x20000
#define DSPRB3 0x30000
#define VIMASK 0x0fffffcff
#define VIB0 0x000
#define VIB1 0x100
#define VIB2 0x200
#define VIB3 0x300
#define DMATARGETADDRESS 0x80040000
#define SCREENWIDTH 720
#define SCREENHEIGHT 576
#define BUFFERHEIGHT 620
#define SCREENWIDTHWORD 180
#define BUFFERWIDTH 768
#define BUFFERWIDTHWORD 192
#define REVERSERANGEX 48
#define REVERSERANGEY 144
#define HISTOGRAMSTEP 32
#define HISTOGRAMHIGH 128
#define HISTOGRAMPOSITIONX 32
#define HISTOGRAMPOSITIONY 500
#define GRAYRANGEX 30
#define GRAYRANGEY 144
#define GRAYWINDOWRANGEX 30
#define GRAYWINDOWRANGEY 144
#define HISTOENHANCERANGEX 30
#define HISTOENHANCERANGEY 144
#define FUNCTIONNUMBER 5
#define FUNCREVERSE 0
#define FUNCHISTOGRAM 1
#define FUNCGRAY 2
#define FUNCGRAYWINDOW 3
#define FUNCYUV 4
#define DISPCTR 0x0a01ffffc
#define DISPRDR 0x0a01e0610
#define DISPWER 0x0a01e0600
#define DISPADD 0x0a01c0000
#define CACHECFG (*(unsigned int *)0x01840000)
#define L1PFBAR (*(unsigned int *)0x01844020)
#define L1DFBAR (*(unsigned int *)0x01844030)
#define SIGNSOURCEADDRESS 0x00000400
#define SIGNTARGETADDRESS 0x00000500
#define BMPHEADADDRESS 0x80300000
#define RGBDATAADDRESS 0x80300038
#define RGBDATAADDRESS1 0x80400000
#define RGBDATAADDRESS2 0x80500000
#define RGBDATAADDRESS3 0x80510000
#define RGBDATAADDRESS4 0x80520000
void InitDSP();
void InitIDKM();
void VideoProcess();
void ReadVideo();
void WriteImage();
void ConvertToRGB();
unsigned int uCtrlVideoIn[2],uCtrlVideoOut[2];
unsigned int *pVideoInCtrlRegister,*pVideoOutCtrlRegister;
int nInStatus,nOutStatus,nVideoReady,nReadingVideo;
int nXH;
unsigned int nPositionX,nPositionY,dx,dy,nTimeCount,nShow;
unsigned char *pScreenBuffer;
float fHisto[256];
unsigned int *pW,*pW2,*pSignSource,*pSignTarget;
unsigned int uW,uW1,uW2;
int nI,nJ,nK,x0,y0,x1,y1;
float fW;
unsigned char cW,*pW1;
unsigned int uSign[32],lut[256],uLed;
unsigned int uImgAddress[2],uImgAddress1[2],uImgAddress2[2],uImgAddress3[2],uImgAdd;
int bColor,nProcessingImage,bCapture;
int main()
{
InitDSP(); // 初始化DSP片内寄存器和emif接口参数
ICETEK6711ALED=0; // 指示灯熄灭
ICETEK6711ALED=0x10000000; // 点亮指示灯D10
uImgAddress[0]=0x80040000; uImgAddress1[0]=0x8007fc00; // 两个供切换的缓冲区,一个从 0x80040000开始一个从0x80140000开始
uImgAddress[1]=0x80140000; uImgAddress1[1]=0x8017fc00;
uImgAddress2[0]=0x800acc00; uImgAddress3[0]=0x800e2c00;
uImgAddress2[1]=0x801acc00; uImgAddress3[1]=0x801e2c00;
uImgAdd=0; bColor=1;
pSignSource=(unsigned int *)SIGNSOURCEADDRESS;
pSignTarget=(unsigned int *)SIGNTARGETADDRESS;
(*pSignSource)=1; (*pSignTarget)=0;
// 初始化IDK-M背板
for ( nXH=0;nXH<2;nXH++ )
{
InitIDKM();
DelayMSEC(50);
ICETEK6711ALED=( nXH==0 )?0x20000000:0x40000000; // 设置指示灯状态
}
CSR=0x100;
IER=1;
ICR=0xffff;
for ( nXH=0;nXH<32;nXH++ ) uSign[31-nXH]=(1<<nXH);
pVideoInCtrlRegister=(unsigned int *)VINCTR;
pVideoOutCtrlRegister=(unsigned int *)VOUTCTR;
nInStatus=nOutStatus=0;
nVideoReady=nReadingVideo=0;
bCapture=0;
ICETEK6711ALED=0x80000000;
uCtrlVideoOut[0]=0|VOUTENABLE|DSPWB0|VOB1; //初始状态:允许输出,dsp写bank2,视频输出bank3,不直通,不透明
uCtrlVideoIn[0]=0|VINENABLE|DSPRB1|VIB0; //初始状态:允许输入,dsp读bank1,视频输入bank0
uCtrlVideoOut[1]=0|VOUTENABLE|DSPWB1|VOB0; //允许输出,dsp写bank3,视频输出bank2,不直通,不透明
uCtrlVideoIn[1]=0|VINENABLE|DSPRB0|VIB1; //允许输入,dsp读bank0,视频输入bank1
(*pVideoInCtrlRegister)=uCtrlVideoIn[0]; // 视频输入控制寄存器赋初值
(*pVideoOutCtrlRegister)=uCtrlVideoOut[0]; // 视频输出控制寄存器赋初值
*(unsigned int *)EMIF_GCR = 0x3300; // 设置EMIF寄存器
*(unsigned int *)EMIF_SDCTRL = 0x14424000;
*(unsigned int *)EMIF_SDRP = 0x61a;
*(unsigned int *)EMIF_SDEXT= 0x54529;
*(unsigned int *)EMIF_CE0 = 0x30;
*(unsigned int *)EMIF_CE1 = CE1_32;
*(unsigned int *)EMIF_CE2 = 0x00800421;
*(unsigned int *)EMIF_CE3 = CE3_32;
Init_DTVFPGA(0); // 清除输出缓冲区(IDK-M板)
*(unsigned int *)MTV_WDMA_ADD = 0x0000ffff; //(IDK-M板)各寄存器赋初值
*(unsigned int *)MTV_WDMA_PARAM = 0x0000ff00;
*(unsigned int *)MTV_RDMA_ADD = 0x0000ffff;
*(unsigned int *)MTV_RDMA_PARAM = 0x00001808;
*(unsigned int *)DTV_WDMA_ADD = 0x0005ffff;
*(unsigned int *)DTV_WDMA_PARAM = 0x00001808;
*(unsigned int *)DTV_RDMA_ADD = 0x0000fff0;
*(unsigned int *)DTV_RDMA_PARAM = 0x00001808;
nPositionX=nPositionY=0;
dx=dy=1;
pScreenBuffer=(unsigned char*)uImgAddress[1-uImgAdd];
nShow=0;
nProcessingImage=0;
initInterrupt(); //中断初始化,开INT4中断
uLed=0;
ICETEK6711ALED=uLed;
while ( 1 )
{
VideoProcess(); // 图像处理
}
}
void VideoProcess()
{
if ( nVideoReady ) // 图像准备好?
{
nProcessingImage=1; // 正在处理标志
ReadVideo(); // 读取当前图像
if ( bCapture ) // 需要转换否?
{
*(unsigned int *)EMIF_CE2 =0x0ffffff23; // SDRAM降速
ConvertToRGB(); // 将当前视频图像转换成RGB格式存储
bCapture=0; // 加软件断点
}
else
{
DelayMSEC(20);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -