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

📄 doublebuffering.c

📁 adc 3208 上面实现图片旋转的实例
💻 C
📖 第 1 页 / 共 2 页
字号:
           int Offset_t, int Size_t){    unsigned short reg_front = memw[0x3000080];    unsigned short reg_rear;    unsigned short next_front = (reg_front+1)%2048; memw[0x03800000 + reg_front*64 + 0x00]= mode; //0x4708;  memw[0x03800000 + reg_front*64 + 0x02]=ScrX1; //200; //128; //32;  //DstX1 memw[0x03800000 + reg_front*64 + 0x04]=ScrY1; //; //128; //32;  //DstY1 memw[0x03800000 + reg_front*64 + 0x06]=ScrX2; //128*5+; //DstX2 memw[0x03800000 + reg_front*64 + 0x08]=ScrY2; //; //DstY2  memw[0x03800000 + reg_front*64 + 0x0a]= (Tx1 <<9)& 0x0ffff; //0;  //256; //SrcX memw[0x03800000 + reg_front*64 + 0x0c]= (Tx1 >>7)& 0x1f;//(Tx1 >>16)& 0x1f;  //SrcX memw[0x03800000 + reg_front*64 + 0x0e]= (Ty1 <<9)& 0x0ffff;//0;  //256; //SrcY memw[0x03800000 + reg_front*64 + 0x10]= (Ty1 >>7)& 0x1f;//(Ty1>>16)&0x1f;//0;  //SrcY  memw[0x03800000 + reg_front*64 + 0x12]=A & 0x0ffff;//512; //A memw[0x03800000 + reg_front*64 + 0x14]=(A>>16)&0x1f;;//0;   //A memw[0x03800000 + reg_front*64 + 0x16]=B & 0x0ffff;   //B memw[0x03800000 + reg_front*64 + 0x18]=(B>>16)&0x1f;//0;   //B memw[0x03800000 + reg_front*64 + 0x1a]=C & 0x0ffff;   //C memw[0x03800000 + reg_front*64 + 0x1c]=(C>>16)&0x1f;//0;   //C memw[0x03800000 + reg_front*64 + 0x1e]=D & 0x0ffff; //D memw[0x03800000 + reg_front*64 + 0x20]=(D>>16)&0x1f;//0;   //D memw[0x03800000 + reg_front*64 + 0x22]=SrcAlphaColor & 0x0FFFF; memw[0x03800000 + reg_front*64 + 0x24]=((SrcBlendFunc &0x3F)<<8)|((SrcAlphaColor &0x0FF0000)>>16); memw[0x03800000 + reg_front*64 + 0x26]=DestAlphaColor & 0x0FFFF; memw[0x03800000 + reg_front*64 + 0x28]=((DestBlendFunc &0x3F)<<8)|((DestAlphaColor &0x0FF0000)>>16);// memw[0x03800000 + reg_front*64 + 0x2a]=ShageColor & 0x0ffff;// memw[0x03800000 + reg_front*64 + 0x2c]=(ShadeColor & 0x0ff0000)>>16; memw[0x03800000 + reg_front*64 + 0x34]= Offset_t >>7; //(0x48000>>7);//bit map offset memw[0x03800000 + reg_front*64 + 0x38]= Size_t; //0x00a4;    // command queue	while( 1 )	{	reg_rear = memw[0x03000082];	if( next_front != reg_rear ) break;        }    // front pointer	memw[0x3000080] = next_front;}////////////////////////////////////////////////////////////////////////////////void Write_Packet_com(int mode, int ScrX1, int ScrY1, int ScrX2, int ScrY2,                       int Tx1, int Ty1, int A, int B, int C, int D,                       int Transparency_Color_RGB, int Offset_t, int Size_t){    unsigned short reg_front = memw[0x3000080];    unsigned short reg_rear;    unsigned short next_front = (reg_front+1)%2048; memw[0x03800000 + reg_front*64 + 0x00]= mode; //0x4708;  memw[0x03800000 + reg_front*64 + 0x02]=ScrX1; //200; //128; //32;  //DstX1 memw[0x03800000 + reg_front*64 + 0x04]=ScrY1; //; //128; //32;  //DstY1 memw[0x03800000 + reg_front*64 + 0x06]=ScrX2; //128*5+; //DstX2 memw[0x03800000 + reg_front*64 + 0x08]=ScrY2; //; //DstY2  memw[0x03800000 + reg_front*64 + 0x0a]= (Tx1 <<9)& 0x0ffff; //0;  //256; //SrcX memw[0x03800000 + reg_front*64 + 0x0c]= (Tx1 >>7)& 0x1f;//(Tx1 >>16)& 0x1f;  //SrcX memw[0x03800000 + reg_front*64 + 0x0e]= (Ty1 <<9)& 0x0ffff;//0;  //256; //SrcY memw[0x03800000 + reg_front*64 + 0x10]= (Ty1 >>7)& 0x1f;//(Ty1>>16)&0x1f;//0;  //SrcY  memw[0x03800000 + reg_front*64 + 0x12]=A & 0x0ffff;//512; //A memw[0x03800000 + reg_front*64 + 0x14]=(A>>16)&0x1f;;//0;   //A memw[0x03800000 + reg_front*64 + 0x16]=B & 0x0ffff;   //B memw[0x03800000 + reg_front*64 + 0x18]=(B>>16)&0x1f;//0;   //B memw[0x03800000 + reg_front*64 + 0x1a]=C & 0x0ffff;   //C memw[0x03800000 + reg_front*64 + 0x1c]=(C>>16)&0x1f;//0;   //C memw[0x03800000 + reg_front*64 + 0x1e]=D & 0x0ffff; //D memw[0x03800000 + reg_front*64 + 0x20]=(D>>16)&0x1f;//0;   //D memw[0x03800000 + reg_front*64 + 0x2e]=Transparency_Color_RGB&0x0fcf8;    //0x0fc00; //transparency memw[0x03800000 + reg_front*64 + 0x30]=(Transparency_Color_RGB>>16)&0x0f8;//0x00; memw[0x03800000 + reg_front*64 + 0x34]= Offset_t >>7; //(0x48000>>7);//bit map offset memw[0x03800000 + reg_front*64 + 0x38]= Size_t; //0x00a4;    // command queue	while( 1 )	{	reg_rear = memw[0x03000082];	if( next_front != reg_rear ) break;        }    // front pointer	memw[0x3000080] = next_front;}////////////////////////////////////////////////////////////////////////////////void Write_Packet_rotate(int mode, int ScrX1, int ScrY1, int ScrX2, int ScrY2,                       int Tx1, int Ty1, int A, int B, int C, int D,                       int Transparency_Color_RGB, int Offset_t, int Size_t){    unsigned short reg_front = memw[0x3000080];    unsigned short reg_rear;    unsigned short next_front = (reg_front+1)%2048; memw[0x03800000 + reg_front*64 + 0x00]= mode; //0x4708;  memw[0x03800000 + reg_front*64 + 0x02]=ScrX1; //200; //128; //32;  //DstX1 memw[0x03800000 + reg_front*64 + 0x04]=ScrY1; //; //128; //32;  //DstY1 memw[0x03800000 + reg_front*64 + 0x06]=ScrX2; //128*5+; //DstX2 memw[0x03800000 + reg_front*64 + 0x08]=ScrY2; //; //DstY2  memw[0x03800000 + reg_front*64 + 0x0a]= Tx1 & 0x0ffff; //0;  //256; //SrcX memw[0x03800000 + reg_front*64 + 0x0c]= (Tx1 >>16)& 0x1f;//(Tx1 >>16)& 0x1f;  //SrcX memw[0x03800000 + reg_front*64 + 0x0e]= Ty1 & 0x0ffff;//0;  //256; //SrcY memw[0x03800000 + reg_front*64 + 0x10]= (Ty1>>16)&0x1f;//(Ty1>>16)&0x1f;//0;  //SrcY  memw[0x03800000 + reg_front*64 + 0x12]=A & 0x0ffff;//512; //A memw[0x03800000 + reg_front*64 + 0x14]=(A>>16)&0x1f;;//0;   //A memw[0x03800000 + reg_front*64 + 0x16]=B & 0x0ffff;   //B memw[0x03800000 + reg_front*64 + 0x18]=(B>>16)&0x1f;//0;   //B memw[0x03800000 + reg_front*64 + 0x1a]=C & 0x0ffff;   //C memw[0x03800000 + reg_front*64 + 0x1c]=(C>>16)&0x1f;//0;   //C memw[0x03800000 + reg_front*64 + 0x1e]=D & 0x0ffff; //D memw[0x03800000 + reg_front*64 + 0x20]=(D>>16)&0x1f;//0;   //D memw[0x03800000 + reg_front*64 + 0x2e]=Transparency_Color_RGB&0x0fcf8;    //0x0fc00; //transparency memw[0x03800000 + reg_front*64 + 0x30]=(Transparency_Color_RGB>>16)&0x0f8;//0x00; memw[0x03800000 + reg_front*64 + 0x34]= Offset_t >>7; //(0x48000>>7);//bit map offset memw[0x03800000 + reg_front*64 + 0x38]= Size_t; //0x00a4;    // command queue	while( 1 )	{	reg_rear = memw[0x03000082];	if( next_front != reg_rear ) break;        }    // front pointer	memw[0x3000080] = next_front;}void Display_BMP_1(void)//0x00a4:128*128,0x009b:64*64;0x009c:128*64,0x00b7:1024*512,0xb6:512*512,0xad:256*256,//128*256:0x0ac,256*512:0x0b5{ //new  copy bmp16 from flash to texture://void Copyb16_from_flash_to_texture(word *begin_flash, word *begin_texture, //          int columns, int lines, int columns_apply(2^n), int lines_apply(2^n))	Copy_all_pic_to_Tmem();//	Draw_my_pic(unsigned short dispmode, int x, int y, My_Pic *p_mypic, //                        unsigned int Trans_color);//	Draw_my_pic(COMM_MODE, &Gnd, 0); //ground pic//	Draw_my_pic(TRANS_MODE, &mouse, 0xffffff); //mouse//	Draw_my_pic(COMM_MODE, &girl, 0); //girl	Draw_my_pic(COMM_MODE, &_pic_[0], 0);//button1	//Write_Packet_com(0x4708,300,400,357,441,0,0,512,0,0,(512),0,\	//		0x50000+0x0f0000+0x1300+0x9600, 0x9b); 	Flip_zy();	Draw_my_pic(COMM_MODE, &_pic_[1], 0);//button2	Flip_zy();}void New_move1(void){    int i=0;    int j=100;    int key_num=-1;//key number when mouse changes,-1:no key pressed    int Key_Num=-1;//Key Number when key presses,-1:no key pressed    unsigned int time_ofkey=0;//time when key pressed,0:no key    unsigned int time_last=0;//time used for 1 sec timer    char has_change=0; //if has change,no matter what change, process graphic	char bank_switch =0;//1	char not_pressed =1;//key not pressed	char total_time =35;//total bet time 35s
	char Game_start =0;//1:start, 0:not start
	short Corn_money =0;//inserted corn
	short lunpan_num=0;    	int blend_rate[11] = {0,20,40,60,80,100,80,60,40,20};		Copy_all_pic_to_Tmem();//if total PIC size <4M or 6M// Draw_my_pic(unsigned short dispmode,My_Pic *p_mypic,unsigned int Trans_color);//	Draw_my_pic(COMM_MODE, &Gnd, 0); //ground pic	PushCommand( WritePacket_Clear );  //clear screen	Flip_zy();//	Draw_my_pic(COMM_MODE, &Gnd, 0); //ground pic	PushCommand( WritePacket_Clear );  //clear screen	Flip_zy(); while(j) {  if((_TIMER_VAR - time_last)>=1)//every 0.1s  {	has_change =1;    time_last = _TIMER_VAR;  }  if(has_change)  {  //every time when has_change should do bank switch      	PushCommand( WritePacket_Clear );  //clear screen	Draw_my_pic(COMM_MODE, &_pic_[0], 0); //ground pic//Draw_my_pic(unsigned short dispmode,My_Pic *p_mypic,unsigned int Trans_color);//    Draw_my_pic_blend(BLEND_MODE, &_pic_[1], blend_rate[i]);           Draw_my_pic_rotate(0x4728,&_pic_[1]);           rotate_angle +=0.2;//	Draw_my_pic(COMM_MODE, &girl, 0);   delay(4); // try different 3,10,20..   Flip_zy();   has_change =0;//end of this change  }//end of if }//end of while}void dgFlashLatch( U8 flash ){	_LATCH_ADDR = ((U16)flash)*2;}void error_trap(U8 error_num){	Error_Num = error_num;#ifdef _ADDTEST_//output some message by UART0#endif	while(1);}/////////////////////////////////////////////////////// main and cache/////////////////////////////////////////////////////#define __CACHE_INVALIDATE_SET(VALUE) asm( "CACHE_INVALIDATE_SET: "); asm( "push %R0");	 asm( "ldi  %0   , %%R0" : : "i" (VALUE) );	asm( "mvtc  0   , %CR5"); asm( "pop  %R0");		  #define __CACHE_INVALIDATE_CHECK() asm( "CACHE_INVALIDATE_CHECK:");	asm( "mvfc  0  , %CR6"); asm( "and  %R0, 0x00100000, %R0");	asm( "jnz   CACHE_INVALIDATE_CHECK"); #define __CACHE_MODE_SET(VALUE)	asm( "CACHE_MODE_SET: "); asm( "push %R0"); asm( "ldi  %0   , %%R0" : : "i" (VALUE) ); asm( "mvtc  0   , %CR3"); asm( "pop  %R0");#define __CACHE_ACTIVE_SET(VALUE) asm( "CACHE_ACTIVE_SET: "); asm( "push %R0"); asm( "ldi  %0   , %%R0" : : "i" (VALUE) ); asm( "mvtc  0   , %CR7"); asm( "pop  %R0");		  /**************************************************/// CACHE MASTER COMMAND REGISTER/**************************************************/#     define __CACHE_UNIT_DISABLE          ( 0 << 11 )#     define __CACHE_UNIT_ENABLE           ( 1 << 11 )#     define __CACHE_UNIT_NORMAL           ( 0 << 0 )#     define __CACHE_UNIT_DELAY            ( 1 << 0 )/**************************************************/// CACHE INVALIDATE REGISTER/**************************************************/#     define __CACHE_INVALIDATE_DISABLE   ( 0 << 0 )#     define __CACHE_INVALIDATE_ENABLE    ( 1 << 0 )		  /**************************************************/// CACHE INVALIDATE REGISTER/**************************************************/#     define __CACHE_WRITE_THROUGH        ( 0 << 6 )#     define __CACHE_WRITE_BACK           ( 1 << 6 )int main( void ){    int j,i;	U8  flash;				flash = 0;    dgFlashLatch(flash);	asm("CACHE_CONFIGURATION_SET:");__CACHE_INVALIDATE_SET(__CACHE_INVALIDATE_ENABLE)__CACHE_INVALIDATE_CHECK()__CACHE_MODE_SET(__CACHE_WRITE_BACK)//__CACHE_MODE_SET(__CACHE_WRITE_THROUGH)__CACHE_ACTIVE_SET(__CACHE_UNIT_ENABLE  | //                   __CACHE_UNIT_NORMAL   )  // process read_hit & miss at one cpuclk                    __CACHE_UNIT_DELAY   )     // process read_hit & miss at two cpuclk	// FMEM/TMEM - memory controller reset	VR0_memory_controller_reset();		// set screen mode 640*480	CRT_320x240_noninterlace();		// Rendering engine reset	InitRenderingEngine_zy();		// select Render target => back-buffer	// for double buffering...		 *(volatile unsigned short*)(0x300008c) = 0x0006; // dither mode : disable,render target : back-buffer    	if( SndInit() == vgFALSE )	{		error_trap(9);;//error	}	vgSndSetPlayFrequency( 100000000.f, 44100.f); //86000000.f  44100.f );	vgSndPlaySound();	VR0SndInitMemory( SOUND_MEMORY_BANK_MUSIC, 0x03e00000, 2*1024*1024);	VR0SndInitMemory( SOUND_MEMORY_BANK_WAV  , 0x03e00000, 2*1024*1024);/*    if(vgSndSetWav(fm_easy,0x091000,22050.f, 50, 0x41, &wav )== vgFALSE)//16bit back ground music    	error_trap(10);    if(vgSndSetWav(chat ,0x5e00, 11025.f, 127, 0x40, &wav1 )== vgFALSE)//16bit back ground music    	error_trap(11);    if(vgSndSetWav(ding ,0x9dbe, 22050.f, 127, 0x40, &wav2)== vgFALSE)//16bit back ground music    	error_trap(13);    	if(vgSndPlayWav( &wav )== vgFALSE)    	error_trap(20);*/	/*	if(vgSndPlayWav( &wav1 )== vgFALSE)  //chat snd    	error_trap(21);	if(vgSndPlayWav( &wav2 )== vgFALSE)  //ding snd    	error_trap(22);*/	    init_all_pic_address();    init_struct();//initial all My_pic struct//    init_key_range();        UartConfig1();    timer_int_enable(); // open timer1 interrupt test	while(1)	{//	    Display_BMP_1(); //used for disp every pic for test		New_move1();		delay(3000);	}	}

⌨️ 快捷键说明

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