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

📄 s1d13806.c

📁 最新版IAR FOR ARM(EWARM)5.11中的代码例子
💻 C
📖 第 1 页 / 共 4 页
字号:
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTICR_0 = ( char ) s1d13806_display_desc.RegDesc->crticr0 ;	/* CRT/TV Ink/Cursor Red Color 0 */
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTICB_1 = ( char ) s1d13806_display_desc.RegDesc->crticb1 ;	/* CRT/TV Ink/Cursor Blue Color 1 */
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTICG_1 = ( char ) s1d13806_display_desc.RegDesc->crticg1 ;	/* CRT/TV Ink/Cursor Green Color 1 */
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTICR_1 = ( char ) s1d13806_display_desc.RegDesc->crticr1 ;	/* CRT/TV Ink/Cursor Red Color 1 */
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTICFT = ( char ) 0x00 ;	/* CRT/TV Ink/Cursor FIFO High Treshold */

	//* Set the 2D acceleration (BitBLT) registers to a known state
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTC = ( short ) 0x0000 ;	/* BitBLT CR */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTRCCE = ( char ) 0x00 ;	/* BitBLT ROP Code/Color Expansion */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTO = ( char ) 0x00 ;		/* BitBLT Operation */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTSSA_0 = ( char ) 0x00 ;	/* BitBLT Source Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTSSA_1 = ( char ) 0x00 ;	/* BitBLT Source Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTSSA_2 = ( char ) 0x00 ;	/* BitBLT Source Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTDSA_0 = ( char ) 0x00 ;	/* BitBLT Destination Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTDSA_1 = ( char ) 0x00 ;	/* BitBLT Destination Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTDSA_2 = ( char ) 0x00 ;	/* BitBLT Destination Start Address */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTMAO = ( short ) 0x0000 ;/* BitBLT Memory Address Offset */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTW = ( short ) 0x0000 ;	/* BitBLT Width */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTH = ( short ) 0x0000 ;	/* BitBLT Height */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTBC = ( short ) 0x0000 ;	/* BitBLT Background Color */
	s1d13806_base->S1D13806_OnChipReg.OCR_BBLTFC = ( short ) 0x0000 ;	/* BitBLT Foreground Color */

	//* Program the look-up table to a known state
	s1d13806_base->S1D13806_OnChipReg.OCR_LUTM = ( char ) s1d13806_display_desc.RegDesc->lutm ;	/* Look-Up Table Mode */

	s1d13806_base->S1D13806_OnChipReg.OCR_LUTBA = ( char ) 0x00 ;		/* Look-Up Table Address */
  const char * pLUT = Lut_list[lut_def];
  //* Fill LUT
	for (idx = 0; idx < 256; idx++)
	{
		for (rgb = 0; rgb < 3; rgb++)
		{
			s1d13806_base->S1D13806_OnChipReg.OCR_LUTD = *pLUT++;
		}
	}

	//* Turn off power save mode
	s1d13806_base->S1D13806_OnChipReg.OCR_PSC = ( char ) s1d13806_display_desc.RegDesc->psc ;	/* Power Save Configuration */

	//* Disable the watchdog timer
	s1d13806_base->S1D13806_OnChipReg.OCR_WDT = ( char ) 0x00 ;		/* CPU to Memory Access Watchdog Timer */

	//* Enable the display
	s1d13806_base->S1D13806_OnChipReg.OCR_DM = ( char ) s1d13806_display_desc.RegDesc->dm ;	/* Display Mode */

	//* Clear display memory by filling 1.25 MB Display Memory with 0
	for ( display_mem += S1D13806_DISP_MEM_SIZE ; (int)display_mem >= (int)s1d13806_disp_mem_base;)
	{
		*display_mem-- = 0x00 ;
	}
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_S1D13806_16bpp_print_string
//* \brief Send a string to Video Graphic Controller
//*----------------------------------------------------------------------------
void AT91F_S1D13806_16bpp_print_string ( AT91PS_S1D13806_Desc s1d13806_base, char *buff )
{
int   i, j, k ;
int   hdw, vdw, hnbp, vnbp, nb_char, pixel;
int   disp_mem_base, lcd_start_address, crt_start_address ;
char  *display_mem ;
char  *disp_src , *disp_dest ;

  hdw = ( int ) s1d13806_display_desc.DisplayDefDesc->hdw ;
  vdw = ( int ) s1d13806_display_desc.DisplayDefDesc->vdw ;
  pixel = ( int ) s1d13806_display_desc.DisplayDefDesc->pixel ;
  hnbp = s1d13806_display_desc.CharDefDesc->hnbp ;
  vnbp = s1d13806_display_desc.CharDefDesc->vnbp ;
  disp_mem_base = s1d13806_display_desc.s1d13806_disp_mem_base_add ;
  nb_char = s1d13806_display_desc.DataDesc->Present_nb_char_on_line ;
  display_mem = s1d13806_display_desc.DataDesc->Present_display_mem_ptr ;
  lcd_start_address = s1d13806_display_desc.DataDesc->Present_lcd_start_address ;
  crt_start_address = s1d13806_display_desc.DataDesc->Present_crt_start_address ;

	s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_2 = ( char ) ( lcd_start_address >> 16 ) ;
	s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_1 = ( char ) ( lcd_start_address >> 8 ) ;
	s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_0 = ( char ) lcd_start_address ;
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_2 = ( char ) ( crt_start_address >> 16 ) ;
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_1 = ( char ) ( crt_start_address >> 8 ) ;
	s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_0 = ( char ) crt_start_address ;

  for ( i = 0 ; buff[i] != 0 ; i++ )
  {
		switch ( buff[i] )
		{
  	case '\n' :
		  display_mem = ( char * ) ( (int ) display_mem + ( int ) ( hdw * pixel * vnbp ) ) ;
			display_mem = ( char * ) ( ( int ) display_mem + hnbp ) ;
			nb_char++ ;
			break ;
		case '\r' :
			display_mem = ( char * ) ( ( ( ( ( ( int ) display_mem - disp_mem_base ) )
									/( ( int ) ( hdw * pixel ) )  ) * ( ( int ) ( hdw * pixel ) ) )
									+ ( ( int ) ( disp_mem_base ) ) ) ;
			nb_char = 0 ;
			break ;
		case '\t' :
			display_mem = ( char * ) ( ( int ) display_mem + ( int ) ( 4 * hnbp * pixel ) ) ;
			nb_char += 4 ;
			break ;
		default :
			for ( j = 0 ; j < vnbp ; j++ )
			{
				for ( k = 0 ; k < ( int ) 8 ; k++, display_mem++ )
				{
					if ( ( ( ( s1d13806_CharSet16[ ( ( int ) ( ( ( ( int ) buff[i] ) * vnbp ) + j ) ) ] ) << k ) & 0x80 ) )
						*display_mem = 0xFF ;
					else
						*display_mem = 0x00 ;
				}
				display_mem = ( char * ) ( ( int ) display_mem - hnbp ) ;
				display_mem = ( char * ) ( ( int ) display_mem + ( int ) ( hdw * pixel ) ) ;
			}
			display_mem = ( char * ) ( ( int ) display_mem + hnbp ) ;
			display_mem = ( char * ) ( ( int ) display_mem - ( int ) ( hdw * pixel * vnbp ) ) ;
			nb_char++ ;
			break ;
	  }
	  if ( ( nb_char * hnbp ) >= ( ( int ) ( hdw * pixel ) ) )
	  {
		  display_mem = ( char * ) ( ( int ) display_mem + ( int ) ( hdw * pixel * ( vnbp - 1 ) ) ) ;
		  nb_char = 0 ;
	  }
	  if ( ( ( int ) display_mem - disp_mem_base )  >= ( ( int ) ( hdw * (vdw-1) * pixel ) ) )
	  {
		  if ( ( ( int ) display_mem - disp_mem_base )  >= ( ( int ) ( hdw * (vdw-1) * pixel * 2 ) ) )
		  {
  			disp_dest = ( char * ) disp_mem_base ;
  			disp_src = ( char * ) ( ( ( int ) disp_dest ) + ( ( int ) ( hdw * vdw * pixel ) ) ) ;
  			for ( j = 0 ; j < ( ( int ) ( hdw * vdw * pixel ) ) ; ++j)
  				*disp_dest++ = *disp_src++ ;
  			display_mem = ( char * ) ( ( int ) display_mem - ( int ) ( hdw * vdw * pixel ) ) ;
  			lcd_start_address = ( int ) ( ( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_2 ) << 16 ) |
  										( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_1 ) << 8 ) |
  										( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_0 ) ) ;
  			crt_start_address = ( int ) ( ( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_2 ) << 16 ) |
  										( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_1 ) << 8 ) |
  										( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_0 ) ) ;
  			lcd_start_address = ( int ) ( hdw * vdw * pixel ) / sizeof(int);
  			crt_start_address = ( int ) ( hdw * vdw * pixel ) / sizeof(int);
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_2 = ( char ) ( lcd_start_address >> 16 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_1 = ( char ) ( lcd_start_address >> 8 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_0 = ( char ) lcd_start_address ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_2 = ( char ) ( crt_start_address >> 16 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_1 = ( char ) ( crt_start_address >> 8 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_0 = ( char ) crt_start_address ;
  		}
  		if ( nb_char == 0 )
  		{
  			disp_src = ( char * ) display_mem ;
  			//* Clear following line of display memory by filling with 0
  			for ( j = 0 ; j < ( int ) ( hdw * pixel * vnbp ) ; j++ )
  			{
  				*disp_src = 0x00 ;
  				disp_src++ ;
  			}
  			lcd_start_address = ( int ) ( ( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_2 ) << 16 ) |
  										( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_1 ) << 8 ) |
  										( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_0 ) ) ;
  			crt_start_address = ( int ) ( ( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_2 ) << 16 ) |
  										( ( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_1 ) << 8 ) |
  										( ( int ) s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_0 ) ) ;
  			lcd_start_address += ( int ) ( hdw * vnbp * pixel ) / sizeof(int);
  			crt_start_address += ( int ) ( hdw * vnbp * pixel ) / sizeof(int);
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_2 = ( char ) ( lcd_start_address >> 16 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_1 = ( char ) ( lcd_start_address >> 8 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_LCDDBA_0 = ( char ) lcd_start_address ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_2 = ( char ) ( crt_start_address >> 16 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_1 = ( char ) ( crt_start_address >> 8 ) ;
  			s1d13806_base->S1D13806_OnChipReg.OCR_CRTDBA_0 = ( char ) crt_start_address ;
  		}
  	}
  }
  s1d13806_display_desc.DataDesc->Present_nb_char_on_line = nb_char ;
  s1d13806_display_desc.DataDesc->Present_display_mem_ptr = display_mem ;
  s1d13806_display_desc.DataDesc->Present_lcd_start_address = lcd_start_address ;
  s1d13806_display_desc.DataDesc->Present_crt_start_address = crt_start_address ;
}

int AT91F_S1D13806_GetVdw(void)
{
  return (display_def_desc.vdw);
}

int AT91F_S1D13806_GetHdw(void)
{
  return (display_def_desc.hdw);
}

int AT91F_S1D13806_GePixelSize(void)
{
  return (display_def_desc.pixel);
}

void ShowBmp (const GUI_BITMAP *bmp)
{
int idx,idy;
  // load picture
  short * dst = (short*)(s1d13806_display_desc.DataDesc->Present_crt_start_address + s1d13806_display_desc.s1d13806_disp_mem_base_add);
  short * src = (short*) bmp->pData;
  for (idy = 0; idy <  bmp->YSize ; ++idy)
  {
    for(idx = 0; idx < bmp->XSize ; idx += sizeof(short))
    {
      *dst++ = *src++;
    }
    while(idx < s1d13806_display_desc.DisplayDefDesc->hdw)
    {
      *dst++ = 0;
      idx += sizeof(short);
    }
  }
  while(idy++ < s1d13806_display_desc.DisplayDefDesc->vdw)
  {
    for(idx = 0; idx < s1d13806_display_desc.DisplayDefDesc->hdw; idx += sizeof(short))
    {
      *dst++ = 0;
    }
  }
  s1d13806_display_desc.DataDesc->Present_display_mem_ptr = (char*)dst -
   (s1d13806_display_desc.DisplayDefDesc->hdw *
    s1d13806_display_desc.DisplayDefDesc->pixel *
    s1d13806_display_desc.CharDefDesc->vnbp * 3 );
}

⌨️ 快捷键说明

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