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

📄 graph.c

📁 TMS320c6000系列DSP做图像处理的应用举例,图象颜色模式转换,从RGB到Y Cr Cb
💻 C
📖 第 1 页 / 共 2 页
字号:
//编译下载程序
//在程序中软件断点处加软件断点
//打开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 + -