📄 testmainbak.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 + -