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

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

?? bsldemo.c

?? Application of Bootstrap Loader in MSP430 With Flash Hardware and Software Proposal
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************
*
* Copyright (C) 1999-2000 Texas Instruments, Inc.
* Author: Volker Rzehak
*
*----------------------------------------------------------------
* All software and related documentation is provided "AS IS" and 
* without warranty or support of any kind and Texas Instruments 
* expressly disclaims all other warranties, express or implied, 
* including, but not limited to, the implied warranties of 
* merchantability and fitness for a particular purpose. Under no 
* circumstances shall Texas Instruments be liable for any 
* incidental, special or consequential damages that result from 
* the use or inability to use the software or related 
* documentation, even if Texas Instruments has been advised of 
* the liability.
*
* Unless otherwise stated, software written and copyrighted by 
* Texas Instruments is distributed as "freeware". You may use 
* and modify this software without any charge or restriction. 
* You may distribute to others, as long as the original author 
* is acknowledged.
*
****************************************************************
* 
* Project: MSP430 Bootstrap Loader Demonstration Program
*
* File:    BSLDEMO.C
*
* Description:
*   This is the main program of the bootstrap loader 
*   demonstration. 
*   The main function holds the general sequence to access the
*   bootstrap loader and program/verify a file.
*   The parsing of the TI TXT file is done in a separate 
*   function.
*
*   A couple of parameters can be passed to the program to 
*   control its functions.  For a detailed description see the
*   appendix of the corresponding application note.
*
* History:
*   Version 1.00 (05/2000)
*   Version 1.10 (08/2000)
*     - Help screen added.
*     - Additional mass erase cycles added 
*       (Required for larger flash memories)
*       Defined with: #define ADD_MERASE_CYCLES 20
*     - Possibility to load a completely new BSL into RAM
*       (supposing there is enough RAM) - Mainly a test feature!
*     - A new workaround method to cope with the checksum bug 
*       established. Because this workaround is incompatbile with 
*       the former one the required TI TXT file is renamed to 
*       "PATCH.TXT".
*   Version 1.11 (09/2000)
*     - Added handling of frames with odd starting address
*       to BSLCOMM.C. (This is required for loaders with word
*       programming algorithm! > BSL-Version >= 1.30)
*     - Changed default number of data bytes within one frame
*       to 240 bytes (old: 64). Speeds up programming.
*     - Always read BSL version number (even if new one is loaded
*       into RAM.
*     - Fixed setting of warning flag in conjunction with loading
*       a new BSL into RAM.
*     - Added a byte counter to the programTIText function.
*     - Number of mass erase cycles can be changed via command 
*       line option (-m)
*   Version 1.12 (09/2000)
*     - Minor fixes and cosmetics.
*     
****************************************************************/

#include <string.h>
#include <stdio.h>
#include <windows.h>

#include "bslcomm.h"

/*---------------------------------------------------------------
 * Defines:
 *---------------------------------------------------------------
 */

/* This definition includes code to load a new BSL into RAM:
 * NOTE: Can only be used with devices with sufficient RAM!
 * The program flow is changed slightly compared to a version
 * without "NEW_BSL" defined.
 * The definition also defines the filename of the TI-TXT file
 * with the new BSL code.
 */
#define NEW_BSL

/* The "WORKAROUND" definition includes code for a workaround 
 * required by the first version(s) of the bootstrap loader.
 */
#define WORKAROUND

/* If "DEBUG" is defined, all checked and programmed blocks are 
 * logged on the screen.
 */
//#define DEBUG

/* Additional mass erase cylces required for (some) F149 devices.
 * If ADD_MERASE_CYCLES is not defined only one mass erase
 * cycle is executed. 
 * Remove #define for fixed F149 or F11xx devices.
 */
#define ADD_MERASE_CYCLES  20

/* Error: verification failed:       */
#define ERR_VERIFY_FAILED      98
/* Error: erase check failed:        */
#define ERR_ERASE_CHECK_FAILED 97
/* Error: unable to open input file: */
#define ERR_FILE_OPEN          96

/* Mask: program data:   */
#define ACTION_PROGRAM 0x01
/* Mask: verify data:    */
#define ACTION_VERIFY  0x02
/* Mask: erase check:    */
#define ACTION_ERASE_CHECK 0x04
/* Mask: transmit password:  */
/* Note: Should not be used in conjunction with any other action! */
#define ACTION_PASSWD      0x08

/*---------------------------------------------------------------
 * Global Variables:
 *---------------------------------------------------------------
 */

char *programName=    "MSP430 Bootstrap Loader Demonstration Program";
char *programVersion= "Version 1.12";

/* Max. bytes sent within one frame if parsing a TI TXT file.
 * ( >= 16 and == n*16 and <= MAX_DATA_BYTES!)
 */
int maxData= 240;

/* Buffers used to store data transmitted to and received from BSL: */
BYTE blkin [MAX_DATA_BYTES]; /* Receive buffer  */
BYTE blkout[MAX_DATA_BYTES]; /* Transmit buffer */

#ifdef WORKAROUND
char *patchFile    = "PATCH.TXT";
#endif /* WORKAROUND */

BOOL patchRequired = FALSE;
BOOL patchLoaded   = FALSE;

WORD bslVer= 0;

char *newBSLFile= NULL;

struct toDoList
{
  unsigned MassErase : 1;
  unsigned EraseCheck: 1;
  unsigned Program   : 1;
  unsigned Verify    : 1;
  unsigned Reset     : 1;
  unsigned Wait      : 1; /* Wait for <Enter> at end of program */
                          /* (0: no; 1: yes):                   */  
  unsigned OnePass   : 1; /* Do EraseCheck, Program and Verify  */
                          /* in one pass (TI TXT file is read   */
                          /* only once)                         */
} toDo;

void *errData= NULL;
int byteCtr= 0;

/*---------------------------------------------------------------
 * Functions:
 *---------------------------------------------------------------
 */

int preparePatch()
{
  int error= ERR_NONE;

#ifdef WORKAROUND   
  if (patchLoaded)
  {
    /* Load PC with 0x0220. 
     * This will invoke the patched bootstrap loader subroutines.
     */
    error= bslTxRx(BSL_LOADPC,  /* Command: Load PC        */
                   0x0220,      /* Address to load into PC */
                   0,           /* No additional data!     */
                   NULL, blkin);
    if (error != ERR_NONE) return(error);
    BSLMemAccessWarning= 0; /* Error is removed within workaround code */
  }
#endif /* WORKAROUND */

  return(error);
}

void postPatch()
{
#ifdef WORKAROUND
  if (patchLoaded)
  {
    BSLMemAccessWarning= 1; /* Turn warning back on. */
  }
#endif /* WORKAROUND */
}

int verifyBlk(WORD addr, WORD len, unsigned action)
{
  int i= 0;
  int error= ERR_NONE;

  if ((action & (ACTION_VERIFY | ACTION_ERASE_CHECK)) != 0)
  {

#ifdef DEBUG
    printf("Check starting at %x, %i bytes... ", addr, len);
#endif /* DEBUG */

    error= preparePatch();
    if (error != ERR_NONE) return(error);

    error= bslTxRx(BSL_RXBLK, addr, len, NULL, blkin);

    postPatch();

#ifdef DEBUG
    printf("Error: %i\n", error);
#endif /* DEBUG */

    if (error != ERR_NONE) 
    { 
      return(error); /* Cancel, if read error */
    }
    else
    {
      for (i= 0; i < len; i++) 
      { 
        if ((action & ACTION_VERIFY) != 0)
        {
          /* Compare data in blkout and blkin: */
          if (blkin[i] != blkout[i]) 
          {
            printf("Verification failed at %x (%x, %x)\n", addr+i, blkin[i], blkout[i]);
            return(ERR_VERIFY_FAILED); /* Verify failed! */
          }
          continue;
        } 
        if ((action & ACTION_ERASE_CHECK) != 0)
        {
          /* Compare data in blkin with erase pattern: */
          if (blkin[i] != 0xff) 
          {
            printf("Erase Check failed at %x (%x)\n", addr+i, blkin[i]);
            return(ERR_ERASE_CHECK_FAILED); /* Erase Check failed! */
          }
          continue;
        } /* if ACTION_ERASE_CHECK */
      } /* for (i) */
    } /* else */
  } /* if ACTION_VERIFY | ACTION_ERASE_CHECK */

  return(error);
}

int programBlk(WORD addr, WORD len, unsigned action)
{
  int i= 0;
  int error= ERR_NONE;

  if ((action & ACTION_PASSWD) != 0)
  {
    return(bslTxRx(BSL_TXPWORD, /* Command: Transmit Password  */
                   addr,        /* Address of interupt vectors */
                   len,         /* Number of bytes             */
                   blkout, blkin));
  } /* if ACTION_PASSWD */

  /* Check, if specified range is erased: */
  error= verifyBlk(addr, len, action & ACTION_ERASE_CHECK);
  if (error != ERR_NONE)
  {
    return(error);
  }
  
  if ((action & ACTION_PROGRAM) != 0)
  {

#ifdef DEBUG
    printf("Program starting at %x, %i bytes... ", addr, len);
#endif /* DEBUG */

    error= preparePatch();
    if (error != ERR_NONE) return(error);

    /* Program block: */
    error= bslTxRx(BSL_TXBLK, addr, len, blkout, blkin); 

    postPatch();

#ifdef DEBUG
    printf("Error: %i\n", error);
#endif /* DEBUG */

    if (error != ERR_NONE)
    {
      return(error); /* Cancel, if error (ACTION_VERIFY is skipped!) */
    }
  } /* if ACTION_PROGRAM */

  /* Verify block: */
  error= verifyBlk(addr, len, action & ACTION_VERIFY);
  if (error != ERR_NONE)
  {
    return(error);
  }
  
  return(error);
} /* programBlk */


int programTIText (char *filename, unsigned action)
{ 
  int next= 1;
  int error= ERR_NONE;
  int linelen= 0;
  int linepos= 0;
  WORD dataframelen=0;
  WORD currentAddr;              
  char strdata[128];

  FILE* infile;

  byteCtr= 0;

  if ((infile = fopen(filename, "rb")) == 0)
  { 
    errData= filename;
    return(ERR_FILE_OPEN); 
  }

  /* Convert data for MSP430, TXT-File is parsed line by line: */
  for (next= 1; next>=1; )
  {
    /* Read one line: */
    if ((fgets(strdata, 127, infile) == 0) || 
        /* if End Of File                  or */
        (strdata[0] == 'q'))
        /* if q (last character in file)      */
    {   /* => send frame and quit             */
      if (dataframelen > 0) /* Data in frame? */
      { 
        error= programBlk(currentAddr, dataframelen, action);
        byteCtr+= dataframelen; /* Byte Counter */
        dataframelen=0; 
      }
      next=0;  /* Quit! */
      continue;
    }

    linelen= strlen(strdata);

    if (strdata[0] == '@')
       /* if @ => new address => send frame and set new addr. */
    { 
      if (dataframelen > 0)
      { 
        error= programBlk(currentAddr, dataframelen, action);
        byteCtr+= dataframelen; /* Byte Counter */
        dataframelen=0; 
      }
      sscanf(&strdata[1], "%lx\n", &currentAddr);
      continue; 
    }

    /* Transfer data in line into blkout: */
    for(linepos= 0; 
        linepos < linelen-3; linepos+= 3, dataframelen++)
    { 
      sscanf(&strdata[linepos], "%3x", &blkout[dataframelen]);
      /* (Max 16 bytes per line!) */
    }

    if (dataframelen > maxData-16)  
       /* if frame is getting full => send frame */
    { 
      error= programBlk(currentAddr, dataframelen, action);
      byteCtr+= dataframelen; /* Byte Counter */
      currentAddr+= dataframelen; 
      dataframelen=0;
    }

    if (error != ERR_NONE) 
    {
      next=0; /* Cancel loop, if any error */
    }
  }

  fclose(infile);

  return(error);
} /* programTIText */

int txPasswd(char* passwdFile)
{
  int i;

  if (passwdFile == NULL)
  {
    /* Send "standard" password to get access to protected functions. */
    printf("Transmit Password...\n");
    /* Fill blkout with 0xff 
     * (Flash is completely erased, the contents of all Flash cells is 0xff)
     */
    for (i= 0; i < 0x20; i++)
    { 
      blkout[i]= 0xff; 
    }
    return(bslTxRx(BSL_TXPWORD, /* Command: Transmit Password  */
                   0xffe0,      /* Address of interupt vectors */
                   0x0020,      /* Number of bytes             */
                   blkout, blkin));
  }
  else
  {
    /* Send TI TXT file holding interrupt vector data as password: */
    printf("Transmit password file \"%s\"...\n", passwdFile);
    return(programTIText(passwdFile, ACTION_PASSWD));
  }
} /* txPasswd */

int signOff(int error, BOOL passwd)
{
  if (toDo.Reset)
  {
    bslReset(0); /* Reset MSP430 and start user program. */
  }

  switch (error)
  {
    case ERR_NONE:
      printf("Programming completed!\n");
      break;
    case ERR_BSL_SYNC: 
      printf("ERROR: Syncronization failed!\n");
      printf("Device with boot loader connected?\n");
      break;
    case ERR_VERIFY_FAILED: 
      printf("ERROR: Verification failed!\n");
      break;
    case ERR_ERASE_CHECK_FAILED: 
      printf("ERROR: Erase check failed!\n");
      break;
    case ERR_FILE_OPEN: 
      printf("ERROR: Unable to open input file \"%s\"!\n", (char*)errData); 
      break;
    default: 
      if ((passwd) && (error == ERR_RX_NAK))
         /* If last command == transmit password && Error: */
        printf("ERROR: Password not accepted!\n");
      else
        printf("ERROR: Communication Error!\n");
  } /* switch */

  if (toDo.Wait)
  {
    printf("Press <ENTER> ...\n"); getchar();
  }

  comDone();   /* Release serial communication port.   */
  /* After having released the serial port,
   * the target is no longer supplied via this port!
   */
  if (error == ERR_NONE)
    return(0);
  else
    return(1);
} /* signOff */


void showHelp()
{
  char *help[]=
  {
    "BSLDEMO [-h] [-c{port}] [-p{file}] [-w] [-1] [-m{num}] [+ecpvrw] {file}",
    "",
    "The last parameter is required: file name of TI-TXT file to be programmed.",

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品最新网址| 亚洲一级二级在线| 亚洲主播在线播放| 蜜桃久久久久久| 99re亚洲国产精品| 精品久久久久久综合日本欧美| 国产精品久久久久久久岛一牛影视| 丝袜国产日韩另类美女| www.亚洲人| 精品国产一区二区三区久久久蜜月| 一区二区三区毛片| 波多野结衣在线一区| 精品国产91乱码一区二区三区 | 欧美一区二区三区影视| 中文字幕一区二区三区色视频| 美国av一区二区| 欧美三级电影一区| 国产精品麻豆视频| 国产精品一区专区| 欧美成人精品二区三区99精品| 亚洲123区在线观看| 91老司机福利 在线| 日韩理论片在线| 成人一区二区三区| 国产清纯白嫩初高生在线观看91| 麻豆传媒一区二区三区| 欧美一区日韩一区| 蜜臀久久99精品久久久久宅男| 欧美日韩免费观看一区二区三区| 一区二区三区 在线观看视频| aaa欧美日韩| 亚洲三级理论片| 91免费精品国自产拍在线不卡| 中文字幕不卡在线播放| 成人短视频下载| 中文字幕一区不卡| 色八戒一区二区三区| 亚洲制服丝袜在线| 在线成人免费视频| 久久国产尿小便嘘嘘尿| 精品盗摄一区二区三区| 国产白丝网站精品污在线入口 | 欧美日韩在线免费视频| 亚洲永久免费视频| 91麻豆精品国产91久久久资源速度 | 欧美性猛交xxxx黑人交| 久久青草欧美一区二区三区| 国产一区二区不卡| 国产精品不卡一区| 欧美日韩精品一区二区三区四区 | 欧美高清一级片在线| 性做久久久久久免费观看| 国产精一品亚洲二区在线视频| 精品人在线二区三区| 日韩精品乱码av一区二区| 欧美日韩国产成人在线免费| 肉色丝袜一区二区| 精品国产乱码久久久久久久| 国产精品一卡二卡| 亚洲女与黑人做爰| 欧美一区二区视频在线观看| 激情欧美一区二区三区在线观看| 国产亚洲一本大道中文在线| 色综合中文字幕| 美国十次综合导航| 亚洲欧美综合网| 91麻豆精品国产91久久久资源速度| 国产在线精品一区二区不卡了| 国产精品色哟哟| 91精品国产综合久久久久久漫画| 国产精品一区二区91| 一区二区三区四区在线免费观看| 91精品国产综合久久精品app| 国产精品自产自拍| 亚洲一区二区中文在线| 欧美va亚洲va| 欧美午夜精品一区| 国产精品一区二区在线看| 亚洲最大成人网4388xx| 国产网站一区二区| 91精品国产综合久久精品麻豆| aaa亚洲精品| 狠狠色丁香久久婷婷综合_中 | 成人h动漫精品一区二| 亚欧色一区w666天堂| 中文字幕视频一区二区三区久| 日韩一区二区中文字幕| 日本精品免费观看高清观看| 国产成人综合亚洲91猫咪| 日韩在线一区二区三区| 亚洲精品国产a久久久久久| 久久久精品tv| 精品国产一区二区三区不卡| 欧美日韩国产精品成人| 91碰在线视频| 成人av片在线观看| 国产成人免费av在线| 麻豆视频一区二区| 丝瓜av网站精品一区二区| 亚洲男同性恋视频| 一色桃子久久精品亚洲| 国产午夜精品一区二区| 久久婷婷国产综合精品青草| 91精品久久久久久久99蜜桃 | 国产精品资源在线看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品一区二区免费| 午夜精品免费在线| 亚洲图片自拍偷拍| 亚洲一区二区三区四区不卡| 亚洲欧美日韩久久| 最近中文字幕一区二区三区| 中文字幕一区二区在线观看| 欧美国产亚洲另类动漫| 中文无字幕一区二区三区| 日本一区二区三区在线观看| 国产视频一区不卡| 中文字幕不卡在线| 亚洲蜜臀av乱码久久精品| 亚洲欧美日韩久久| 亚洲国产中文字幕| 奇米亚洲午夜久久精品| 毛片av一区二区三区| 国模大尺度一区二区三区| 激情综合色综合久久综合| 激情综合色播五月| 懂色一区二区三区免费观看| 成人a区在线观看| 在线观看视频91| 欧美日本一区二区在线观看| 欧美一区二区三区啪啪| 欧美va日韩va| 国产精品视频免费| 亚洲激情校园春色| 午夜精品一区在线观看| 精品一区二区三区日韩| 风间由美一区二区三区在线观看| 91在线你懂得| 欧美精选午夜久久久乱码6080| 欧美成人性战久久| 最新不卡av在线| 日日夜夜精品免费视频| 国产精品一区二区91| 色老头久久综合| 欧美v亚洲v综合ⅴ国产v| 久久久久久久久久久黄色| 最新成人av在线| 蜜臀av一区二区| voyeur盗摄精品| 欧美精品日韩综合在线| 国产精品日韩精品欧美在线| 亚洲午夜久久久久久久久电影院| 狠狠色丁香久久婷婷综| 91精彩视频在线| 欧美精品一区二区精品网| 一区二区高清视频在线观看| 激情综合五月天| 欧美视频在线一区| 国产丝袜在线精品| 天天综合日日夜夜精品| 国产成人在线色| 欧美一区二区三区的| 亚洲视频你懂的| 国产永久精品大片wwwapp| 色八戒一区二区三区| 国产欧美精品区一区二区三区| 亚洲高清不卡在线观看| 成人免费视频视频在线观看免费| 欧美欧美欧美欧美首页| 日韩理论在线观看| 国产精品99久久久久久有的能看| 欧美三级电影在线看| 国产精品久久久久久久第一福利| 久久精品国产亚洲高清剧情介绍| 99热在这里有精品免费| 久久久久久亚洲综合影院红桃| 亚洲国产成人av网| 一本一本久久a久久精品综合麻豆| 2023国产一二三区日本精品2022| 日韩精品91亚洲二区在线观看| 色综合天天综合网天天狠天天| 国产午夜精品福利| 韩国成人福利片在线播放| 6080国产精品一区二区| 亚洲成人免费观看| 欧美亚洲动漫精品| 亚洲日本在线观看| 99精品久久只有精品| 中文字幕乱码亚洲精品一区| 国产精品一色哟哟哟| 亚洲欧美日韩国产中文在线| 国产高清精品久久久久| 久久蜜桃av一区精品变态类天堂 | 精品视频在线免费观看| 亚洲女同一区二区| 91亚洲精品一区二区乱码| 国产精品电影一区二区| 成人午夜精品一区二区三区| 国产日韩欧美麻豆| 成人丝袜18视频在线观看|