亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? common.c

?? STR711 IAP底層驅動程序
?? C
字號:
/******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
* File Name          : common.c
* Author             : MCD Application Team
* Date First Issued  : 10/25/2004
* Description        : This file provides all the common functions.
********************************************************************************
* History:
*  02/01/2006 : IAP Version 2.0
*  11/24/2004 : IAP Version 1.0
********************************************************************************
THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH
SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN
IN CONNECTION WITH THEIR PRODUCTS.
********************************************************************************/

#include "common.h"

s32 gimagesize = 0;
typedef void (*pointer)(void );
pointer jump_function;
/*******************************************************************************
* Function Name  : Int2Str
* Description    : Convert an Integer to a srting
* Input 1        : The string
* Input 2        : The intger to be converted
* Return         : None
*******************************************************************************/
void Int2Str(char* str,s32 intnum)
{
  u32 i,Div=1000000000,j=0,Status=0;
  for(i=0;i<10;i++)
  {
    str[j++]=(intnum/Div) + 48;
    intnum= intnum%Div;
    Div/=10;
    if ((str[j-1]=='0')&(Status==0))
      j=0;
    else
      Status++;
  }
}
/*******************************************************************************
* Function Name  : Str2Int
* Description    : Convert a srting to an integer
* Input 1        : The string to be converted
* Input 2        : The intger value
* Return         : 1 -- Correct
                 : 0 -- Error
*******************************************************************************/
u32 Str2Int(char *inputstr,s32 *intnum)
{
	u32 i,res;
	u32 val = 0;

	if (inputstr[0] == '0' && (inputstr[1] == 'x'||inputstr[1] == 'X'))
	{	
		if (inputstr[2] == '\0')
		{
			return 0;
		}
		for (i=2;i<11;i++)
		{
			if (inputstr[i] == '\0')
			{
				*intnum = val;
				res = 1; /* return 1; */
				break;
			}
			if (ISVALIDHEX(inputstr[i]))
			{
				val = (val << 4) + CONVERTHEX(inputstr[i]);
			}	
			else
			{
				/* return 0; Invalid input */
				res = 0;
				break;
			}	
		}	
		
		if (i>=11) res = 0;	/* over 8 digit hex --invalid */
	}
	else /* max 10-digit decimal input */
	{
		for (i=0;i<11;i++)
		{
			if (inputstr[i] == '\0')
			{
				*intnum = val;
				/* return 1; */
				res =1;
				break;
			}
			else if ((inputstr[i] == 'k' ||inputstr[i] == 'K') && (i>0))
			{
				val = val << 10;
				*intnum = val;
				res = 1;
				break;
			}
			else if ((inputstr[i] == 'm' ||inputstr[i] == 'M') && (i>0))
			{	
				
				val = val << 20;
				*intnum = val;
				res = 1;
				break;
			}
			else if (ISVALIDDEC(inputstr[i]))
				val = val*10 + CONVERTDEC(inputstr[i]);
			else
			{
				/* return 0; Invalid input */
				res = 0;
				break;
			}	
		}
		if (i>=11) res = 0; /* Over 10 digit decimal --invalid */
	}
	
	return res;
}
/*******************************************************************************
* Function Name  : GetIntegerInput
* Description    : Get an integer from the HyperTerminal
* Input          : The inetger
* Return         : 1 -- Correct
                 : 0 -- Error
*******************************************************************************/
u32 GetIntegerInput(s32 * num)
{
	char inputstr[16];

	while(1)
	{
		GetInputString(inputstr);
		if (inputstr[0] == '\0') continue;
		
		if ((inputstr[0] == 'a'||inputstr[0] == 'A')&& inputstr[1] == '\0')		
		{	
			SerialPutString("User Cancelled \r\n");
			return 0;
		}	
		
		if (Str2Int(inputstr,num) ==0)	
			SerialPutString("Error, Input again: \r\n");
		else return 1;	
	}
}

/*******************************************************************************
* Function Name  : SerialKeyPressed
* Description    : Test to see if a key has been pressed on the HyperTerminal
* Input          : The key pressed
* Return         : 1 -- Correct
                 : 0 -- Error
*******************************************************************************/
u32 SerialKeyPressed(char *key)
{
   	if (UART0->SR & UART_RxBufFull)
   	{
   		*key = (char)UART0->RxBUFR;
   		return 1;
   	}
   	else
   		return 0;
}
/*******************************************************************************
* Function Name  : GetKey
* Description    : Get a key from the HyperTerminal
* Input          : None
* Return         : The Key Pressed
*******************************************************************************/
u8 GetKey(void)
{
  u8 key;
  /* First clear Rx buffer */
  UART_FifoReset(UART0,UART_RxFIFO);
	
  /* Then, waiting for user input */
  while (1)
  {
    if (SerialKeyPressed((char*)&key)) break;
  }
  return key;
}

/*******************************************************************************
* Function Name  : SerialPutChar
* Description    : Print a character on the HyperTerminal
* Input          : The character to be printed
* Return         : None
*******************************************************************************/
void SerialPutChar(char c)
{
  UART_ByteSend(UART0,(u8*)&c);
}

/*******************************************************************************
* Function Name  : SerialPutString
* Description    : Print a string on the HyperTerminal
* Input          : The string to be printed
* Return         : None
*******************************************************************************/
void SerialPutString(char *s)
{
  while (*s != '\0')
  {
  SerialPutChar(*s);
  s ++;
  }
}

/*******************************************************************************
* Function Name  : GetInputString	
* Description    : Get Input string from the HyperTerminal
* Input          : The input string
* Return         : None
*******************************************************************************/
void GetInputString (char * buffP)
{
  u32 bytes_read = 0;
  char c;
  do
   {
   c = GetKey();
   if (c == '\r')   	
     break;
   if (c == '\b')	/* Backspace */
     {
     if (bytes_read > 0)
       {
       SerialPutString("\b \b");
       bytes_read --;
       }
  continue;
   }
  if (bytes_read >= CMD_STRING_SIZE )
    {
    SerialPutString("Command string size overflow\r\n");
    bytes_read = 0;
    continue;
    }
  if (c >= 0x20 && c<= 0x7E)
    {
    buffP[bytes_read++] = c;
    SerialPutChar(c);
    }	
    	
  }
  while (1);
  SerialPutString("\n\r");
  buffP[bytes_read] = '\0';
}

/*******************************************************************************
* Function Name  : FLASH_SectorMask
* Description    : Calculate the sectors mask
* Input          : The image size
* Return         : The sectors mask
*******************************************************************************/

u32 FLASH_SectorMask(vu32 Size)
{
#if 1  /*been modified : erase from secoter 2 : 0x40004000 */
  if (Size <= 0x2000)  // place in sec#2 (8k) --> 0000,0100  --> 0x4
    return 0x4;
  if (Size <= 0x4000)  // place in sec#2,3 (16k)--> 0000,1100 --> 0x0c
    return 0xC;
  
  if (Size <= 0xC000)  // place in sec#2,3,4 (48k) --> 0001,1100 --> 0x1c
    return 0x1C;
  if (Size <= 0x1C000)  // place in sec#2,3,4,5 (112k)--> 0011,1100 --> 0x3c
    return 0x3C;
  if (Size <= 0x2C000)  // place in sec#2,3,4,5,6 (176k)--> 0111,1100  --> 0x7c
    return 0x7C;
  if (Size <= 0x3C000)  // place in sec@2,3,4,5,6,7 (240)--> 1111,1100 --> 0xfc
    return 0xFC;
  return 0;
#endif
#if 0  /*erase from secoter 1 : 0x40002000 */
      if (Size <= 0x2000)
        return 0x2;
    if (Size <= 0x4000)
        return 0x6;
    if (Size <= 0x6000)
        return 0xE;
    if (Size <= 0xE000)
        return 0x1E;
    if (Size <= 0x1E000)
        return 0x3E;
    if (Size <= 0x2E000)
        return 0x7E;
    if (Size <= 0x3E000)
        return 0xFE;
    return 0;
#endif 
}

/*******************************************************************************
* Function Name  : Main_Menu	
* Description    : Display the  Main Menu on to HyperTerminal
* Input          : None
* Return         : None
*******************************************************************************/
void Main_Menu(void )
{
  u8 key;

  while(1)
  {
    SerialPutString("\r\n================== Main Menu ==================\r\n\n");
    SerialPutString("  Download Image To Internal Flash ---------- 1\r\n\n");
    SerialPutString("  Execute The New Program ------------------- 2\r\n\n");
    SerialPutString("===============================================\r\n\n");

    if ((PCU->BOOTCR&0x03)==2)
      SerialPutString("IAP remap to  RAM \r\n\n");
    if ((PCU->BOOTCR&0x03)==0)
      SerialPutString("IAP remap to Flash \r\n\n");

    key = GetKey();
    if (key == 0x31)
    {
      SerialDownload();
    }
    else if (key == 0x32)
    {
      /* Restore the default RCCU configuration */
      RCCU_RCLKSourceConfig(RCCU_CLOCK2);
      /* Jump to the new program */

      jump_function =(pointer) 0x40004000 ;
      jump_function();
    }
   else if (key == 0x33) 
    {
      /* Restore the default RCCU configuration */
      RCCU_RCLKSourceConfig(RCCU_CLOCK2);
      /* Jump to the new program */

      jump_function =(pointer) 0x40006000 ;
      jump_function();
    }
    

    else
    {
      SerialPutString("Invalid Number ! ==> The number should be either 1 or 2\r\n");
    }
  }
}
/*******************(C)COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品在线观看| 麻豆视频一区二区| 中文字幕一区二| 国产欧美精品区一区二区三区| 欧美第一区第二区| 欧美tickle裸体挠脚心vk| 日韩三级在线观看| 欧美成人精精品一区二区频| 精品久久国产97色综合| 精品国产乱码久久久久久影片| 精品播放一区二区| 久久综合一区二区| 国产精品欧美精品| 中文字幕在线观看一区二区| ●精品国产综合乱码久久久久| 中文字幕在线不卡视频| 亚洲三级视频在线观看| 亚洲精品午夜久久久| 午夜精品久久久久久久99水蜜桃| 午夜久久久久久久久| 久久er99热精品一区二区| 精品一二三四区| 成人一区二区三区| 久久综合国产精品| 国产一区二区三区蝌蚪| 成人免费高清在线观看| 懂色av一区二区三区免费看| 99国内精品久久| 欧美视频完全免费看| 日韩一区二区麻豆国产| 国产欧美一区二区在线| 亚洲免费资源在线播放| 日韩va亚洲va欧美va久久| 精品一区二区三区视频在线观看| 国产精品一二三四| 一本色道久久综合亚洲91| 欧美色倩网站大全免费| 久久久精品黄色| 一区二区免费看| 久久9热精品视频| 成人av综合在线| 91精品久久久久久久99蜜桃| 久久久久久亚洲综合影院红桃 | 欧美激情中文不卡| 洋洋成人永久网站入口| 麻豆91精品91久久久的内涵| 成人精品在线视频观看| 欧美一级搡bbbb搡bbbb| 国产精品久久一级| 午夜视频在线观看一区二区三区| 精品在线一区二区三区| 91在线看国产| 欧美精品一区二区三区蜜臀 | 欧美日韩久久久| 国产亚洲一区字幕| 亚洲午夜视频在线| 成人午夜精品一区二区三区| 精品视频一区二区三区免费| 久久九九久久九九| 日韩精品乱码av一区二区| 成人一区二区三区在线观看| 在线综合+亚洲+欧美中文字幕| 国产精品对白交换视频| 日本欧美韩国一区三区| 91在线观看视频| 2024国产精品视频| 亚洲1区2区3区视频| 成人黄色在线视频| 精品国产百合女同互慰| 一区二区三区加勒比av| 粉嫩av一区二区三区| 欧美高清性hdvideosex| 国产精品成人一区二区三区夜夜夜| 蜜臀国产一区二区三区在线播放| 91国产精品成人| 国产精品美女久久久久av爽李琼| 免费在线观看成人| 欧美精品一卡二卡| 亚洲主播在线播放| av一二三不卡影片| 久久久久国产免费免费| 日韩va亚洲va欧美va久久| 91激情在线视频| 亚洲视频中文字幕| 福利电影一区二区三区| 久久影院午夜论| 美日韩一级片在线观看| 欧美日韩亚洲另类| 亚洲一卡二卡三卡四卡五卡| 91丨九色丨国产丨porny| 国产亚洲欧洲997久久综合| 日本成人在线不卡视频| 欧美军同video69gay| 亚洲激情欧美激情| 色猫猫国产区一区二在线视频| 国产精品拍天天在线| 国产传媒欧美日韩成人| 久久久精品免费网站| 国产主播一区二区| 久久亚洲精品国产精品紫薇| 轻轻草成人在线| 欧美一区二区久久| 日韩高清不卡一区| 91精品久久久久久久99蜜桃| 五月天视频一区| 欧美一区二区日韩一区二区| 日韩福利视频网| 日韩女优av电影| 国产一区二区三区四区在线观看| 精品国产一区二区三区四区四 | 7777精品伊人久久久大香线蕉完整版| 亚洲午夜久久久| 精品视频一区二区三区免费| 亚洲国产cao| 欧美一区二区三区日韩视频| 美女免费视频一区| 欧美精品一区视频| 成人午夜av电影| 国产麻豆日韩欧美久久| 国产日韩欧美精品综合| 成人精品电影在线观看| 亚洲美女视频在线观看| 欧美日韩一区二区三区高清| 天天综合色天天| 26uuu亚洲综合色欧美| 成人精品小蝌蚪| 一区二区免费在线| 日韩三级免费观看| 国产福利电影一区二区三区| 国产精品情趣视频| 欧美三级中文字幕| 韩国av一区二区| 中文字幕中文字幕在线一区| 在线亚洲免费视频| 欧美aaaaaa午夜精品| 国产婷婷色一区二区三区 | 国产欧美精品一区| 色视频欧美一区二区三区| 亚洲国产精品人人做人人爽| 日韩一区二区在线观看视频| 成人一区二区在线观看| 亚洲国产你懂的| 久久久久久亚洲综合| 欧美在线综合视频| 国产一区二区三区美女| 一区二区三区四区精品在线视频| 日韩一级大片在线| 不卡影院免费观看| 首页国产欧美久久| 欧美激情一区二区三区不卡| 欧美性猛交一区二区三区精品 | 日韩一级黄色片| 成人免费视频视频| 蜜桃免费网站一区二区三区| 国产精品免费视频网站| 日韩一级高清毛片| 一本一本大道香蕉久在线精品 | 欧美日韩一区不卡| 国产成人av自拍| 日韩中文字幕不卡| 中文字幕在线不卡国产视频| 日韩午夜激情av| 91高清视频免费看| 国产成人午夜精品5599| 香蕉av福利精品导航| 国产精品国产a| 欧美成人官网二区| 欧美伊人久久大香线蕉综合69| 韩国精品久久久| 亚洲成人资源在线| 最近中文字幕一区二区三区| 欧美不卡一区二区| 精品视频在线看| 91一区在线观看| 国产精品18久久久久久vr| 日韩不卡一二三区| 亚洲国产一区在线观看| 国产精品传媒入口麻豆| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩电影一区| 色噜噜狠狠一区二区三区果冻| 国产在线不卡视频| 日本午夜一本久久久综合| 一区二区三区在线视频观看 | 亚洲精品高清在线| 国产亚洲综合色| 26uuu亚洲| 欧美zozo另类异族| 欧美一级黄色大片| 欧美老肥妇做.爰bbww视频| 日本丶国产丶欧美色综合| www.爱久久.com| 高清不卡一区二区| 国产乱码一区二区三区| 精品在线播放免费| 麻豆成人久久精品二区三区小说| 日韩国产一二三区| 午夜影院久久久| 亚洲va欧美va国产va天堂影院| 一区二区三区不卡视频在线观看|