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

📄 testmainbak.c

📁 有关于USB的一些主机端驱动
💻 C
字号:
#include "omap30_l3.h"
#include "imagelib.h"

//short Mailbox1IntPending;
//UWORD16 Data_ARM2DSP1, Data_ARM2DSP1B;

short quantize_output[64];
extern short fdct_data[64];
#pragma DATA_SECTION(inter_buffer, "opbuffer")
short inter_buffer[80];  //inter_buffer for functions IMG_fdct_8x8() and IMG_idct_8x8() 
#define	cen 80;

short Data_ARM2DSP1;
short Data_ARM2DSP1B;
short Mailbox1IntPending = 0;
ioport int* ioport_pointer = 0;

unsigned short src_buffer_1[80];
unsigned short src_buffer_2[80];
unsigned short src_buffer_3[80];
unsigned short src_buffer_4[80];//add by cxz
unsigned short dst_buffer_1[160];
unsigned short dst_buffer_2[160];
unsigned short YUVbuffer[176*3];
short yuv_rgb[4] = {453, -88, -183, 359};

volatile short buffer_readable = 0;
volatile short buffer_release  = 0;

short testtest();
extern void SdramRead(unsigned long src_addr, unsigned long dst_addr, 
				short el_cnt, short fr_cnt, 
				short src_el_ind, short src_fr_ind);
extern void SdramWrite(unsigned long src_addr, 
				unsigned long dst_addr, 
				short el_cnt, 
				short fr_cnt, 
				short el_ind, 
				short fr_ind,
				short channel);
void GetYUV(unsigned short* dst, unsigned short* src);
void color565(unsigned short* dst, unsigned short* src);

interrupt void Mailbox1_ISR();

interrupt void Mailbox1_ISR()
{
	Mailbox_Read(ARM2DSP1, &Data_ARM2DSP1, &Data_ARM2DSP1B);
	buffer_readable = Data_ARM2DSP1;
}

void InitIntVectorTable(void) 
{
  // Relocate the Interrupt Vector Table to SARAM31
  DSPINT_MoveIVT();
  
  // Create an entry for Mailbox1_ISR() in the Interrupt Vector Table
  DSPINT_AddEntryToIVT(MAILBOX1_INT, (UWORD32) &Mailbox1_ISR);
}

extern void	IIC_AIC23(void );	

        
void main()
{
	 short i,j,k,h;
	unsigned short *src_add, *dst_add;
	unsigned short *src_buf_1, *src_buf_2,*src_buf_3, *dst_buf_1, *dst_buf_2,*src_buf_4,*dst_b_1,*dst_b_2; 
	unsigned short *temp;
	unsigned long camera_buffer;
    
    unsigned short data;
    unsigned short dr, dg, db;
   
	//------------------------------------------------------------
	// Basic initialization of LEAD3 hardware
	//------------------------------------------------------------
	// Disable Watchdog Timer
	DSPWDG_Disable();

	/********************* Mailbox Test *************************/
	//------------------------------------------------------------
	//  Initialize the Interrupt Vector Table                    -
	//------------------------------------------------------------
	// Disable maskable interrupts
	DSPINT_DisableGlobalIT();
  
	// Initialize the Interrupt Vector Table
	InitIntVectorTable();
  
	// Unmask ARM Mailbox1 interrupt and enable maskable interrupts
	DSPINT_EnableOneIT(MAILBOX1_INT);
	DSPINT_EnableGlobalIT();

//	copy from xue zhen codec project ================================
	IIC_AIC23();	
//	copy from xue zhen codec project ================================
	
	//send a mailbox to ARM
	Mailbox_Write(DSP2ARM1, 1, 1);
#if 0
	
	//wait any mailboxes from ARM
//	while(!Mailbox1IntPending);
	/*****************End of Mailbox Test ***********************/
	
	/************************DMA Test ***************************/
	SdramRead(0x200000+16, (unsigned long)fdct_data, 8, 8, 1, 240);
	/********************End of DMA Test ************************/
	
	/****************** DCT with HWA Test ***********************/
	for(i=0;i<64;i++)
		fdct_data[i] = i<<2;
		
	//fdct using HWA
	IMG_fdct_8x8(fdct_data, inter_buffer);
	
	for(i=0;i<64;i++)
		fdct_data[i] = fdct_data[i]<<3;
	
	//idct using HWA
	IMG_idct_8x8(fdct_data, inter_buffer);
	/***************** End of DCT with HWA Test *****************/
#endif	

	/******************** LCD and Camera Test *******************/
	ioport_pointer[0x0E00] = 8;
	ioport_pointer[0x0E01] = 0;
	ioport_pointer[0x0E02] = 0;

	memset(dst_buffer_1, 0xFFFF, 160);
	memset(dst_buffer_2, 0xFFFF, 160);
	
	src_buf_1 = src_buffer_1;
	src_buf_2 = src_buffer_2;
	src_buf_3 = src_buffer_3;//add by cxz
	src_buf_4 = src_buffer_4;//add by cxz
	dst_buf_1 = dst_buffer_1;
	dst_b_1   = dst_buffer_1;
	dst_buf_2 = dst_buffer_2;
	dst_b_2 = dst_buffer_2;

	camera_buffer = 0x280000;
	while(1)
	{
		while(!buffer_readable);
		if(buffer_readable&1)
			camera_buffer = 0x280000;
		else
			camera_buffer = 0x2A0000;
		src_add = (unsigned short*)camera_buffer;
		dst_add = (unsigned short*)(0x200000+48+240*88);
		
		
		SdramRead((unsigned long)src_add, (unsigned long)src_buf_1, 80, 1, 1, 320);
		src_add = (unsigned short*)((unsigned long)src_add + 80);
		SdramRead((unsigned long)src_add, (unsigned long)src_buf_2, 80, 1, 1, 320);
		src_add = (unsigned short*)((unsigned long)src_add + 80);
	    SdramRead((unsigned long)src_add, (unsigned long)src_buf_3, 80, 1, 1, 320);
		for(j=0;j<60;j++)
		{
			src_add = (unsigned short*)((unsigned long)src_add + 80);
			SdramRead((unsigned long)src_add, (unsigned long)src_buf_4, 80, 1, 1, 320);
			
			dst_b_1   = dst_buffer_1;
			for(k=0;k<80;k++)
			  {
			
			     dr=(unsigned short)((*(src_buf_2+k)>>8 )&0xff);
			     dg=(unsigned short)((((*(src_buf_2+k)>>0)&0xff)+((*(src_buf_2+k+1)>>0)&0xff)+((*(src_buf_1+k)>>8)&0xff)+((*(src_buf_3+k)>>8)&0xff))/4);
			     db=(unsigned short)((((*(src_buf_1+k)>>0)&0xff)+((*(src_buf_1+k+1)>>0)&0xff)+((*(src_buf_3+k)>>0)&0xff)+((*(src_buf_3+k+1)>>0)&0xff))/4);
			     data = ((dr & 0xf8) << 8) ;
		         data |= ((dg & 0xFC) <<3) ;
		         data |= ((db & 0xf8) >> 3) ;
		        *dst_b_1++ = (data<<8)|((data>>8)&0xFF);
		         dr=(unsigned short)((((*(src_buf_2+k)>>8)&0xff)+((*(src_buf_2+k+1)>>8)&0xff))/2);
		         dg=(unsigned short)((*(src_buf_2+k+1)>>0)&0xff);
		         db=(unsigned short)((((*(src_buf_1+k+1)>>0)&0xff)+((*(src_buf_3+k+1)>>0)&0xff))/2);
				 data = ((dr & 0xf8) << 8) ;
		         data |= ((dg & 0xFC) <<3) ;
		         data |= ((db & 0xf8) >> 3) ;
		        *dst_b_1++ = (data<<8)|((data>>8)&0xFF);
		      }  
		      
		     
		        SdramWrite((unsigned long)dst_buf_1, (unsigned long)dst_add, 160, 1, 1, 320, 0);
				dst_add = (unsigned short*)((unsigned long)dst_add + 240);
		        
		        temp=src_buf_1;
		        src_buf_1=src_buf_2;
		        src_buf_2=src_buf_3;
		        src_buf_3=src_buf_4;
		        src_buf_4=temp;
		        src_add = (unsigned short*)((unsigned long)src_add + 80);
		    	SdramRead((unsigned long)src_add, (unsigned long)src_buf_4, 80, 1, 1, 320);
		    	
		    	dst_b_2 = dst_buffer_2;
		  for(h=0;h<80;h++)
			  { 
			  
			    dr=(unsigned short)((((*(src_buf_1+h)>>8)&0xff)+((*(src_buf_3+h)>>8)&0xff))/2);
		        dg=(unsigned short)((*(src_buf_2+h)>>8)&0xff);
		        db=(unsigned short)(((*(src_buf_2+h)>>0)&0xff)+((*(src_buf_2+h+1)>>0)&0xff));
		        data = ((dr & 0xf8) << 8) ;
		        data |= ((dg & 0xFC) <<3) ;
		        data |= ((db & 0xf8) >> 3) ;
		        *dst_b_2++ = (data<<8)|((data>>8)&0xFF);
		        dr=(unsigned short)((((*(src_buf_1+h)>>8)&0xff)+((*(src_buf_1+h+1)>>8)&0xff)+((*(src_buf_3+h)>>8)&0xff)+((*(src_buf_3+h+1)>>8)&0xff))/4);
		        dg=(unsigned short)((((*(src_buf_2+h)>>8)&0xff)+((*(src_buf_2+h+1)>>8)&0xff)+((*(src_buf_1+h+1)>>0)&0xff)+((*(src_buf_3+h+1)>>0)&0xff))/4);
		        db=(unsigned short)((*(src_buf_2+h+1)>>0)&0xff);  
		        data = ((dr & 0xf8) << 8) ;
		        data |= ((dg & 0xFC) <<3) ;
		        data |= ((db & 0xf8) >> 3) ;
		        *dst_b_2++ = (data<<8)|((data>>8)&0xFF); 
		       }
		       
		        SdramWrite((unsigned long)dst_buf_2, (unsigned long)dst_add, 160, 1, 1, 320, 0);
				dst_add = (unsigned short*)((unsigned long)dst_add + 240);              
		        
		       
		        temp=src_buf_1;
		        src_buf_1=src_buf_2;
		        src_buf_2=src_buf_3;
		        src_buf_3=src_buf_4;
		        src_buf_4=temp; 
		       
			
			//GetYUV(YUVbuffer, src_buf_1);
			//if(i) 
			//{
			//	SdramWrite((unsigned long)dst_buf_2, (unsigned long)dst_add, 176, 1, 1, 240, 0);
			//	dst_add = (unsigned short*)((unsigned long)dst_add + 240);
			//}
			//color565(dst_buf_1, YUVbuffer);
			
			//temp=src_buf_1;src_buf_1=src_buf_2;src_buf_2=temp;
			//temp=dst_buf_1;dst_buf_1=dst_buf_2;dst_buf_2=temp;		
		}
		//SdramWrite((unsigned long)dst_buf_2, (unsigned long)dst_add, 176, 1, 1, 240, 0);
			
		Mailbox_Write(DSP2ARM1, 3, 1); 
	}
	/*************** end of LCD and Camera Test *****************/

	return;	
	
}

void GetYUV(unsigned short* dst, unsigned short* src)
{
	short i;
	unsigned short *dst_cb, *dst_cr;
	
	dst_cb = dst + 176;
	dst_cr = dst_cb + 176;
	
	for(i=0;i<88;i++)
	{
		*(dst) = ((*(src+1))>>8)&0xFF;
		*(dst+1) = ((*src)>>8)&0xFF;
		*(dst_cb) = *(dst_cb+1) = (*(src)>>0)&0xFF;
		*(dst_cr) = *(dst_cr+1) = (*(src+1)>>0)&0xFF;
		dst += 2;
		dst_cb += 2;
		dst_cr += 2;
		src += 2;
	}
	
	return;
}
void color565(unsigned short* dst, unsigned short* src)
{
	short i;
	unsigned short data;
	long m_data;
	unsigned short dr, dg, db;
	short dy, du, dv;
	unsigned short *src_cb, *src_cr;
	
	src_cb = src + 176;
	src_cr = src_cb + 176;
	
	for(i=0;i<176;i++)
	{
		/*
		_YUV2RGB_COEF:
			.word	453	;Cb-B
			.word 	-88 ;Cb-G
			.word 	-183;Cr-G
			.word 	359 ;Cr-R
		*/
		dy = (short)(*src++);
		du = (short)(*src_cb++) - 128;
		dv = (short)(*src_cr++) - 128;
		
		m_data = ((long)dy<<8) + du*yuv_rgb[0];
		m_data >>= 8;
		m_data = m_data>240?240:m_data;
		m_data = m_data<16?16:m_data;
		db = (unsigned short)(m_data&0xFF);
		
		m_data = ((long)dy<<8) + du*yuv_rgb[1] + dv*yuv_rgb[2];
		m_data >>= 8;
		m_data = m_data>240?240:m_data;
		m_data = m_data<16?16:m_data;
		dg = (unsigned short)(m_data&0xFF);
		
		m_data = ((long)dy<<8) + dv*yuv_rgb[3];
		m_data >>= 8;
		m_data = m_data>240?240:m_data;
		m_data = m_data<16?16:m_data;
		dr = (unsigned short)(m_data&0xFF);
		
		data = ((dr & 0xf8) << 8) ;
		data |= ((dg & 0xFC) <<3) ;
		data |= ((db & 0xf8) >> 3) ;
		*dst++ = (data<<8)|((data>>8)&0xFF);
	}
	
	return;
}

⌨️ 快捷键说明

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