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

📄 testmain.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];
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};
short rgb_0rgb[3] = {336, -42, -38};
short rgb_1rgb[3] = {-23, 308, -29};
short rgb_2rgb[3] = {5, -259, 510};


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,ii,tem;
	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,*buf_temp; 
	unsigned short *temp;
	unsigned long camera_buffer;
    
    unsigned short data;
    unsigned short dr,dr1,dg,dg1,db,db1;
    long mdata;
    
    long y = 70;//88
    long x = 38;//32
    
	//------------------------------------------------------------
	// 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;
	src_buf_4 = src_buffer_4;
	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+16+240*y+x);
		
		
		SdramRead((unsigned long)src_add, (unsigned long)src_buf_1, 80, 1, 1, 320);
		buf_temp=src_buf_1;
		for(ii=0;ii<40;ii++)
		  {  
		    tem=*(buf_temp+2*ii);
		    *(buf_temp+2*ii)=*(buf_temp+2*ii+1);
		    *(buf_temp+2*ii+1)=tem;
		   }
		

		   
		src_add = (unsigned short*)((unsigned long)src_add + 80);
		SdramRead((unsigned long)src_add, (unsigned long)src_buf_2, 80, 1, 1, 320);
	    buf_temp=src_buf_2;
		for(ii=0;ii<40;ii++)
		  {  
		    tem=*(buf_temp+2*ii);
		    *(buf_temp+2*ii)=*(buf_temp+2*ii+1);
		    *(buf_temp+2*ii+1)=tem;
		   }		
		

		  
		src_add = (unsigned short*)((unsigned long)src_add + 80);
	    SdramRead((unsigned long)src_add, (unsigned long)src_buf_3, 80, 1, 1, 320);
		buf_temp=src_buf_3;
		for(ii=0;ii<40;ii++)
		  {  
		    tem=*(buf_temp+2*ii);
		    *(buf_temp+2*ii)=*(buf_temp+2*ii+1);
		    *(buf_temp+2*ii+1)=tem;
		   }	    
	    
		        
		        
		for(j=0;j<90;j++)
		{
			src_add = (unsigned short*)((unsigned long)src_add + 80);
			SdramRead((unsigned long)src_add, (unsigned long)src_buf_4, 80, 1, 1, 320);
		   buf_temp=src_buf_4;
	   	for(ii=0;ii<40;ii++)
		  {  
		    tem=*(buf_temp+2*ii);
		    *(buf_temp+2*ii)=*(buf_temp+2*ii+1);
		    *(buf_temp+2*ii+1)=tem;
		   }
		   

			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);
			     
			     /* rgb correct 
			     mdata=rgb_0rgb[0]*dr-rgb_0rgb[1]*dg-rgb_0rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dr1=(unsigned short)(mdata&0xFF);
			     mdata=-rgb_1rgb[0]*dr+rgb_1rgb[1]*dg-rgb_1rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
	             mdata = mdata<16?16:mdata;
			     dg1=(unsigned short)(mdata&0xFF);
			     mdata=rgb_2rgb[0]*dr-rgb_2rgb[1]*dg+rgb_2rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     db1=(unsigned short)(mdata&0xFF);
			     */
			     data = ((dr & 0xf8) << 8) ;
		         data |= ((dg & 0xFC) <<3) ;
		         data |= ((db1 & 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);
				 
				 /* rgb correct
				 mdata=rgb_0rgb[0]*dr-rgb_0rgb[1]*dg-rgb_0rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dr1=(unsigned short)(mdata&0xFF);
			     mdata=-rgb_1rgb[0]*dr+rgb_1rgb[1]*dg-rgb_1rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dg1=(unsigned short)(mdata&0xFF);
			     mdata=rgb_2rgb[0]*dr-rgb_2rgb[1]*dg+rgb_2rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     db1=(unsigned short)(mdata&0xFF);
			     */
				 data = ((dr & 0xf8) << 8) ;
		         data |= ((dg & 0xFC) <<3) ;
		         data |= ((db & 0xf8) >> 3) ;
		        *dst_b_1++ = (data<<8)|((data>>8)&0xFF);
		      }  
		      
		     
		    // for(k=0;k<160;k++)
		     //   {
		     //      *dst_b_1++ =0xffff;
		    //    }
		      
		     
		        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);
		        buf_temp=src_buf_4;
		for(ii=0;ii<40;ii++)
		  {  
		    tem=*(buf_temp+2*ii);
		    *(buf_temp+2*ii)=*(buf_temp+2*ii+1);
		    *(buf_temp+2*ii+1)=tem;
		   }		    	
		    	
		    	
		    	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));
		         /* rgb correct
		         mdata=rgb_0rgb[0]*dr-rgb_0rgb[1]*dg-rgb_0rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dr1=(unsigned short)(mdata&0xFF);
			     mdata=-rgb_1rgb[0]*dr+rgb_1rgb[1]*dg-rgb_1rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dg1=(unsigned short)(mdata&0xFF);
			     mdata=rgb_2rgb[0]*dr-rgb_2rgb[1]*dg+rgb_2rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     db1=(unsigned short)(mdata&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);  
		        
		         /* rgb correct
		           mdata=rgb_0rgb[0]*dr-rgb_0rgb[1]*dg-rgb_0rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dr1=(unsigned short)(mdata&0xFF);
			     mdata=-rgb_1rgb[0]*dr+rgb_1rgb[1]*dg-rgb_1rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     dg1=(unsigned short)(mdata&0xFF);
			     mdata=rgb_2rgb[0]*dr-rgb_2rgb[1]*dg+rgb_2rgb[2]*db;
			     mdata>>=8;
			     mdata = mdata>240?240:mdata;
		         mdata = mdata<16?16:mdata;
			     db1=(unsigned short)(mdata&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; 
		       
			
	      }
		
			
		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 + -