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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? c2312.c

?? flash programer driver
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
      if( (ucVal2&CMD(0x0040)) == (ucVal1&CMD(0x0040)) ) /* DQ6 == NO Toggle  */
         return Flash_Success;

      /* Step 7: Else return Flash_ToggleFailed */
      else {
         /* DQ6 == Toggle here means fail */
         eiErrorInfo.sprRetVal=FlashSpec_ToggleFailed;
         return Flash_SpecificError;
      } /* EndInf */
   } /* EndWhile */    
   return Flash_OperationTimeOut; /*if exit from while loop then time out exceeded */
} /* EndFunction FlashDataToggle */





/*****************************************************************************************
Function:   ReturnType FlashDoubleProgram( udword udAddrOff, uCPUBusType ucVal1, 
                                           uCPUBusType ucVal2 )
Arguments:
   udAddrOff is an address offset into pair to be programmed 
   ucValue1 is the value to be programmed at the first address offset of pair
   ucValue2 is the value to be programmed the second address offset of pair
Return Value: 
   The function returns the following conditions: 
      Flash_Success                  
      Flash_AddressInvalid           
      Flash_BlockProtected           
      Flash_ProgramFailed

Description: 
   This function is used to program two uCPUBusType value into two addresses which differ
   only for the bit A0 (LSB). It uses double-word program command. It does not
   erase the flash first and no error is returned in case of double programming. 
   Once the program command has completed the function checks the Status 
   Register for errors. The function returns Flash_Success if the addresses
   have successfully been programmed. 
   Note: 1) VPP must be set to VPPH. (Other limitations are indicated in the data sheet).
          2) This procedure is available both in 16-bit and 8-bit mode.
     
Pseudo Code:
   Step 1: Check the offset range is valid
   Step 2: Check that the block(s) to be programmed are not protected
   Step 3: Program the data
   Step 4: Follow Data Toggle Flow Chart until Program/Erase Controller has 
           completed
   Step 5: Return to Read Mode (if an error occurred)
*******************************************************************************/
ReturnType FlashDoubleProgram( udword udAddrOff, uCPUBusType ucVal1, uCPUBusType ucVal2 ) {   
   uBlockType ublCurBlock;
   ReturnType rRetVal = Flash_Success; /* Return Value: Initially optimistic */ 
   udword udFirstAddrOff; /* first address offset */


   /* Step 1: Check that the offset and range are valid */   
   if( udAddrOff >= FLASH_SIZE )
      return Flash_AddressInvalid;

   /* compute the start block */
   for (ublCurBlock=0; ublCurBlock < NUM_BLOCKS-1;ublCurBlock++)
      if (udAddrOff < BlockOffset[ublCurBlock+1])
         break;

   /* Step 2: Check if the start block is protected */
   if (FlashCheckBlockProtection(ublCurBlock)== Flash_BlockProtected) {
      return Flash_BlockProtected;
   } /* EndIf */         


   udFirstAddrOff = udAddrOff & (~0x1); /* calculate first address offset*/

   /* Step 3: Program the data */ 
   FlashWrite( ConvAddr(0x555), (uCPUBusType)CMD(0x50) );/* Program Command */
   FlashWrite( udFirstAddrOff, ucVal1 );
   FlashWrite( udFirstAddrOff + 1, ucVal2 );


   /* Step 4: Follow Data Toggle Flow Chart until Program/Erase Controller
              has completed */
   /* See Data Toggle Flow Chart of the Data Sheet */
   if( FlashDataToggle(udFirstAddrOff) != Flash_Success) {

      /* Step 5: Return to Read Mode (if an error occurred) */
      FlashWrite( ANY_ADDR, (uCPUBusType)CMD(0x00F0) ); /* Use single instruction cycle method */
      return Flash_ProgramFailed ;
   } /* EndIf */    
   
   return Flash_Success;

} /* EndFunction FlashDoubleProgram */





/*******************************************************************************
Function:     void FlashEnterExtendedBlock (void);
Arguments:    None
Return Value: None

Description:  This function is used to send the Enter Extended block command to
   the device
Pseudo Code:
   Step 1:  Send the Enter Extended Block command to the device
*******************************************************************************/
void FlashEnterExtendedBlock( void ) {
   /* Step 1: Send the Unlock Bypass command */
   FlashWrite( ConvAddr(0x0555), (uCPUBusType)CMD(0x00AA) ); /* 1st Cycle */
   FlashWrite( ConvAddr(0x02AA), (uCPUBusType)CMD(0x0055) ); /* 2nd Cycle */
   FlashWrite( ConvAddr(0x0555), (uCPUBusType)CMD(0x0088) ); /* 3rd Cycle */
} /* EndFunction FlashEnterExtendedBlock */





#ifdef VERBOSE
/******************************************************************************* 
Function:     byte *FlashErrorStr( ReturnType rErrNum ); 
Arguments:    rErrNum is the error number returned from other Flash Routines 
Return Value: A pointer to a string with the error message 
Description:  This function is used to generate a text string describing the 
   error from the flash. Call with the return value from other flash routines. 
 
Pseudo Code: 
   Step 1: Return the correct string. 
*******************************************************************************/ 
byte *FlashErrorStr( ReturnType rErrNum ) { 

   switch(rErrNum) {
      case Flash_Success: 
         return "Flash - Success"; 
      case Flash_FunctionNotSupported: 
         return "Flash - Function not supported"; 
      case Flash_AddressInvalid: 
         return "Flash - Address is out of Range"; 
      case Flash_BlockEraseFailed: 
         return "Flash - Block Erase failed"; 
      case Flash_BlockNrInvalid: 
         return "Flash - Block Number is out of Range"; 
      case Flash_BlockProtected: 
         return "Flash - Block is protected"; 
      case Flash_BlockProtectFailed: 
         return "Flash - Block Protection failed"; 
      case Flash_BlockProtectionUnclear: 
         return "Flash - Block Protection Status is unclear"; 
      case Flash_BlockUnprotected: 
         return "Flash - Block is unprotected"; 
      case Flash_CfiFailed: 
         return "Flash - CFI Interface failed"; 
      case Flash_ChipEraseFailed: 
         return "Flash - Chip Erase failed"; 
      case Flash_ChipUnprotectFailed: 
         return "Flash - Chip Unprotect failed"; 
      case Flash_GroupProtectFailed: 
         return "Flash - Group Protect Failed"; 
      case Flash_NoInformationAvailable: 
         return "Flash - No Information Available"; 
      case Flash_OperationOngoing: 
         return "Flash - Operation ongoing"; 
      case Flash_OperationTimeOut: 
         return "Flash - Operation TimeOut"; 
      case Flash_ProgramFailed: 
         return "Flash - Program failed";
      case Flash_ResponseUnclear:
         return "Flash - Response unclear"; 
      case Flash_SpecificError:

         switch (eiErrorInfo.sprRetVal) {
            case FlashSpec_MpuTooSlow:
               return "Flash - Flash MPU too slow";
            case FlashSpec_TooManyBlocks:
               return "Flash - Too many Blocks";
            case FlashSpec_ToggleFailed:
               return "Flash - Toggle failed";
            default:
               return "Flash - Undefined Specific Error";
         } /* EndSwitch eiErrorInfo */

      case Flash_WrongType: 
         return "Flash - Wrong Type"; 
      default: 
         return "Flash - Undefined Error Value"; 
   } /* EndSwitch */ 
} /* EndFunction FlashErrorString */
#endif /* VERBOSE Definition */





/*******************************************************************************
Function:     void FlashExitExtendedBlock (void);
Arguments:    None
Return Value: None
Description:  This function is used to send the Exit Extended Block to the device
Pseudo Code:
   Step 1:  Send the Exit Extended Block command to the device
*******************************************************************************/
void FlashExitExtendedBlock( void ){
   /* Step 1: Send the Exit Extended Block command to the device */
   FlashWrite( ConvAddr(0x0555), (uCPUBusType)CMD(0x00AA) ); /* 1st Cycle */
   FlashWrite( ConvAddr(0x02AA), (uCPUBusType)CMD(0x0055) ); /* 2nd Cycle */
   FlashWrite( ConvAddr(0x0555), (uCPUBusType)CMD(0x0090) ); /* 3rd Cycle */
   FlashWrite( ANY_ADDR, (uCPUBusType)CMD(0x0000) );/* 4th Cycle */
} /* EndFunction FlashExitExtendedBlock */  





/******************************************************************************* 
Function: ReturnType FlashGroupProtect( uBlockType ublBlockNr ) 
Arguments:
   ublBlockNr holds a block number in the group to protect 
Description:
   This function protects a group in the flash chip using
   the In-System Protection procedure as described in the data sheet.

NOTE : This procedure required a high voltage  level on Reset/Blocks Temporary 
       Unprotect pin !RP, else the function will return Flash_BlockProtectFailed.
       For more datails see flow-chart in the Datasheet.

Return Value: The function returns the following conditions: 
   Flash_Success
   Flash_BlockNrInvalid
   Flash_BlockProtectFailed

Pseudo Code:
   Step 1: Check for invalid block
   Step 2: Set-up phase
   Step 3: Protect phase
   Step 4: Verify phase
   Step 5: if verified return Flash_Success
   Step 6:if not verified and if attempts number is < 25, repeat from step 2,
   	  else return Flash_GroupProtectFailed 
*******************************************************************************/
ReturnType  FlashGroupProtect( uBlockType ublBlockNr) {
   word wAttempt= 0;
   uCPUBusType ucReadData;

   /* Step 1: Check for invalid block. */
   if( ublBlockNr >= NUM_BLOCKS ) /* Check specified blocks <= NUM_BLOCKS */
      return Flash_BlockNrInvalid;   

   /* Step 2: set-up phase */
   FlashWrite( (BlockOffset[ublBlockNr] | ShAddr(0x00000002)), CMD(0x0060) );

   do {
      /* Step 3: protect phase */
      FlashWrite( (BlockOffset[ublBlockNr] | ShAddr(0x00000002)), CMD(0x0060) );
      FlashPause(100);

      /* Step 4: verify phase */
      FlashWrite( (BlockOffset[ublBlockNr] | ShAddr(0x00000002)), CMD(0x0040) );
      FlashPause(4);
      ucReadData = FlashRead( BlockOffset[ublBlockNr] | ShAddr(0x00000002) );

      /* Step 5: if verified return Flash_Success */
      if ( ucReadData == CMD(0x0001) ){
         FlashWrite( ANY_ADDR, (uCPUBusType)CMD(0x00F0) ); /* Use single instruction cycle method */
         return Flash_Success;
      } /* EndIf */
   } while (++wAttempt < 25);

   /* Step 6: if not verified and if attempts number is < 25, repeat step from step 2,
              else return Flash_GroupProtectFailed  */  
   FlashWrite( ANY_ADDR, (uCPUBusType)CMD(0x00F0) ); /* Use single instruction cycle method */  
   return Flash_GroupProtectFailed;

} /* EndFunction FlashGroupProtect */





/*******************************************************************************
Function:ReturnType FlashMultipleBlockErase(uBlockType ublNumBlocks,uBlockType 
                    *ublpBlock,ReturnType *rpResults)
Arguments:   ublNumBlocks holds the number of blocks in the array ubBlock
   ublpBlocks is an array containing the blocks to be erased.
   rpResults is an array that it holds the results of every single block 
   erase.
   Every elements of rpResults will be filled with below values:
      Flash_Success
      Flash_BlockEraseFailed               
      Flash_BlockProtected
   If a time-out occurs because the MPU is too slow then the function returns 
   Flash_MpuTooSlow 

Return Value: The function returns the following conditions:
   Flash_Success            
   Flash_BlockEraseFailed
   Flash_BlockNrInvalid
   Flash_OperationTimeOut
   Flash_SpecificError      : if a no standard error occour.In this case the 
      field sprRetVal of the global variable eiErrorInfo will be filled 
      with Flash_MpuTooSlow when any blocks are not erased because DQ3 
      the MPU is too slow.


Description: This function erases up to ublNumBlocks in the flash. The blocks
   can be listed in any order. The function does not return until the blocks are
   erased. If any blocks are protected or invalid none of the blocks are erased, 
   in this casse the function return Flash_BlockEraseFailed. 
   During the Erase Cycle the Data Toggle Flow Chart of the Data Sheet is
   followed. The polling bit, DQ7, is not used.

Pseudo Code:
   Step 1:  Check for invalid block  
   Step 2:  Check if some blocks are protected
   Step 3:  Write Block Erase command
   Step 4:  Check for time-out blocks 
   Step 5:  Wait for the timer bit to be set.
   Step 6:  Follow Data Toggle Flow Chart until Program/Erase Controller has 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线视频| 777欧美精品| 成人性生交大片免费看中文 | 五月天激情综合网| 亚洲精品国久久99热| 亚洲欧美日韩在线| 国产精品美女久久久久久久| 国产精品日产欧美久久久久| 国产精品久久久久aaaa樱花| 亚洲色图在线看| 亚洲国产一区视频| 日韩在线a电影| 蜜臀精品一区二区三区在线观看| 日韩va欧美va亚洲va久久| 日本欧美在线看| 国产美女主播视频一区| jiyouzz国产精品久久| 91视频在线观看免费| 欧美日韩精品久久久| 91精品中文字幕一区二区三区| 日韩精品中文字幕在线不卡尤物| 欧美精品色一区二区三区| 欧美成人一级视频| 26uuu欧美| 亚洲精品日韩专区silk| 亚洲成a人片在线不卡一二三区| 一区二区三区不卡视频 | 久久综合九色综合久久久精品综合| 精品国产伦一区二区三区观看方式 | 久久国产麻豆精品| 国产一区二区福利视频| aaa欧美大片| 91精品国产手机| 精品播放一区二区| 一区二区三区日韩在线观看| 热久久久久久久| eeuss鲁片一区二区三区在线看| 欧美在线观看18| 久久综合网色—综合色88| 亚洲狠狠丁香婷婷综合久久久| 日韩高清不卡一区二区三区| 国产91露脸合集magnet | 免费人成在线不卡| 99国产精品久久久久| 日韩一级黄色大片| 亚洲精品写真福利| 国产精品一卡二| 欧美日韩一区三区| 亚洲欧洲国产专区| 韩国欧美国产一区| 欧美精品日韩一本| 国产精品传媒入口麻豆| 精品一区二区三区在线播放视频| 91浏览器入口在线观看| 国产欧美在线观看一区| 手机精品视频在线观看| 99国产精品99久久久久久| 精品少妇一区二区三区日产乱码 | www.欧美.com| 久久久亚洲综合| 免费成人av在线播放| 欧美在线你懂的| **欧美大码日韩| 国产成人精品网址| 久久综合久久鬼色| 久久国产精品第一页| 欧美日韩一区中文字幕| 亚洲精品一二三区| 国产成人亚洲综合a∨婷婷图片| 欧美精品在欧美一区二区少妇| 亚洲免费视频中文字幕| 91视频免费观看| 亚洲黄色av一区| 欧美三级一区二区| 天堂成人免费av电影一区| 色女孩综合影院| 亚洲大片在线观看| 制服丝袜中文字幕亚洲| 美脚の诱脚舐め脚责91| 日韩片之四级片| 国产成人综合网| 国产精品毛片高清在线完整版| 成人高清免费在线播放| 亚洲欧美一区二区不卡| 欧美影院午夜播放| 精品中文av资源站在线观看| 2024国产精品| 99视频精品免费视频| 亚洲综合一区二区三区| 91麻豆精品国产91久久久久| 狠狠色综合播放一区二区| 久久久精品欧美丰满| 大陆成人av片| 亚洲综合在线观看视频| 欧美mv和日韩mv国产网站| 成人激情午夜影院| 亚洲大片免费看| 日韩女优视频免费观看| 日韩精品成人一区二区三区| 成人综合婷婷国产精品久久免费| 欧美一级国产精品| 蜜臀91精品一区二区三区| 国产午夜精品一区二区三区视频| 久久精品999| 中文字幕综合网| 欧美日产在线观看| 综合精品久久久| 不卡av在线网| 欧美主播一区二区三区| 韩国一区二区三区| 26uuu亚洲| 91浏览器在线视频| 亚洲日本在线看| 日韩欧美成人午夜| 韩国av一区二区三区四区| 中文字幕日韩一区二区| 在线一区二区三区四区五区| 精品一区二区三区免费播放 | 久久国产麻豆精品| 亚洲色图在线视频| 日本免费新一区视频| 精品国产青草久久久久福利| 日本色综合中文字幕| 久久嫩草精品久久久精品一| 成人激情小说乱人伦| 欧美国产精品中文字幕| 色综合久久88色综合天天| 久久伊人蜜桃av一区二区| 白白色 亚洲乱淫| 国产美女在线观看一区| 国产精品国产三级国产普通话蜜臀| 91一区二区在线观看| 五月婷婷欧美视频| 欧美图片一区二区三区| 精品无人码麻豆乱码1区2区 | 日韩一卡二卡三卡| 国产精品一线二线三线| 日本不卡123| 国产精品婷婷午夜在线观看| 精品国内二区三区| 色婷婷亚洲一区二区三区| 99久久99久久久精品齐齐| 亚洲成a人v欧美综合天堂| 一区二区三区产品免费精品久久75| 欧美精品在线视频| 欧美午夜视频网站| 国产一二三精品| 国产乱人伦精品一区二区在线观看 | 国产精品久久精品日日| 欧美视频中文一区二区三区在线观看| 中文一区二区在线观看| 欧美日韩国产在线播放网站| 日本色综合中文字幕| 国产精品久久久久一区二区三区共 | 亚洲黄网站在线观看| 高清日韩电视剧大全免费| 亚洲第一会所有码转帖| 午夜精品一区二区三区免费视频| 久久精品欧美一区二区三区不卡 | 欧美浪妇xxxx高跟鞋交| 99九九99九九九视频精品| 色婷婷亚洲综合| 成人免费高清在线观看| 99久久国产免费看| 成人午夜在线播放| 成人黄色大片在线观看| 久久精品国产亚洲高清剧情介绍| 久久66热re国产| 亚洲成人www| 另类人妖一区二区av| 午夜精品久久久久久久久久| 日韩电影免费一区| 亚洲国产精品一区二区久久恐怖片| 视频一区欧美精品| 亚洲一区在线看| 久久99久久精品| 热久久一区二区| 蜜桃一区二区三区四区| 国产日韩欧美精品在线| 久久精品欧美日韩| 717成人午夜免费福利电影| 欧美综合视频在线观看| 欧美在线观看视频在线| 99国产精品一区| 99re亚洲国产精品| 99久久er热在这里只有精品15| 日本韩国视频一区二区| 91久久香蕉国产日韩欧美9色| 欧美一区二区观看视频| 欧美美女网站色| 国产精品三级久久久久三级| 国产欧美日韩不卡免费| 亚洲国产成人精品视频| 一区av在线播放| 精品一区精品二区高清| 2欧美一区二区三区在线观看视频| 中国av一区二区三区| 亚洲国产高清在线| 中文字幕亚洲视频| 激情综合亚洲精品|