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

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

?? load.c

?? TDK 6521 SOC 芯片 DEMO程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************
 * This code and information is provided "as is" without warranty of any   *
 * kind, either expressed or implied, including but not limited to the     *
 * implied warranties of merchantability and/or fitness for a particular   *
 * purpose.                                                                *
 *                                                                         *
 * Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved.     *
 *                                                                         *
 ***************************************************************************/
//**************************************************************************
//  DESCRIPTION: 71M652x POWER METER - Load Routines.
// 
//  AUTHOR:  MTF
//
//  HISTORY: See end of file 
//**************************************************************************
// File:  LOAD.C
//               
#include "options.h"
#if LOAD && CLI && (SERIAL0_CLI || SERIAL1_CLI)
#include "ce.h"
#include "ce_ce.h"
#include "ce_dat.h"
#include "cli.h"
#include "eeprom.h"
#include "io.h"
#include "main.h"
#include "sercli.h"
#include "serial.h"
#include "stm.h"
#include <string.h>
#include <ctype.h>
#include <setjmp.h>

#define VERIFY                          // Do flash verify.  

/*** Public variables declared within this module ***/
// None.

/*** Private functions declared within this module ***/
static uint8_t ask_Y_or_N (void);
static uint8_t ctoh (uint8_t c);

static void Download (void);
static int32_t get_addr (uint8x_t *width);
static int32_t get_data (uint8x_t *width);
static int32_t get_hex_long (uint8_t c, uint8x_t *width);

static void Upload (void);
static uint8x_t *put_hex_data (uint8x_t *p, uint8x_t *c, uint8_t width);
static uint8x_t *put_hex (uint8x_t *p, uint8_t c);

/*** Private variables declared within this module ***/
enum eLOAD_DIR { NOLOAD, UPLOAD, DOWNLOAD };
static enum eLOAD_DIR load_direction;

enum eLOAD 
{ LOAD_CE_CODE_DEFAULT, LOAD_CE_DATA_DEFAULT,
  LOAD_CE_CODE,         LOAD_CE_DATA,
  LOAD_EEPROM,          LOAD_FLASH,           LOAD_MPU_DATA,
  LOAD_CE_DATA_MONITOR, LOAD_MPU_MONITOR };

static enum eLOAD load;

void cmd_download (void)
{
    uint8_t idata c;

    cli_index--;
    c = '\0';
    put_char (&c);                       // Overlay '@'.

    if (DOWNLOAD == load_direction)
    {
       if (CE_ACTIVE && (LOAD_CE_CODE == load))
       {
          start_tx_rslt ("\r\nCE Active, can not write CE code space\r\n");
          cli_index--;          
       }
       else
          Download ();
    }
    else if (UPLOAD == load_direction)
    {
       Upload ();
    }
    else
       cmd_error ();
}

#define NUM_PAGES_CE_CODE (0x1000 / FPAGE_SIZE)

#if TRACE10
#define NUM_PAGES_CE_DATA (0x0400 / FPAGE_SIZE)
#elif M6520
#define NUM_PAGES_CE_DATA (0x0200 / FPAGE_SIZE)
#endif

static uint8r_t Warning[]        = "\r\n*** W A R N I N G ***\r\n";
static uint8r_t Erase[]          = "You are about to Erase ";
static uint8r_t Code_Defaults[]  = "CE Code Defaults ";
static uint8r_t Data_Defaults[]  = "CE Data Defaults ";
static uint8r_t Y_or_N[]         = "\r\nAre you sure? Y or N "; 
static uint8r_t Erased[]         = " Erased\r\n";
static uint8r_t Not_Erased[]     = " Not Erased\r\n";

//-------------------------------------------------------------------//
void cmd_load (void)
{
    uint8_t xdata cb;
    uint8_t xdata page;
    uint8_t  data c, d;

    if (!done (&c))
    {
       c = toupper (c);

       switch (c)
       {
          case 'C':
             switch (c = toupper (get_char_d (&d)))
             {
                case 'D':
                   if ('=' == (c = get_char ()))
                      load_direction = DOWNLOAD;
                   else if ('?' == c)
                      load_direction = UPLOAD;
                   else
                      load_direction = NOLOAD;
                
                   if (DOWNLOAD == load_direction)
                   {
                      start_tx_rslt (Warning);
                      start_tx_rslt (Erase);
                      start_tx_rslt (Code_Defaults);
                      cb = ask_Y_or_N ();
                      start_tx_rslt (Code_Defaults);

                      if ('Y' == toupper (cb))
                      {
                         c = NUM_PAGES_CE_CODE;
                         page = (uint16_t) CeCode >> 8;

                         while (c--)
                         {
                            EA = FALSE;                   // Turn OFF all interrupts.
                            FPAGE = page;                 // Set Flash Page Erase Enable.
                            ERASE = PAGE_ERASE_;          // Initiate page erase.
                            EA = TRUE;                    // Turn interrupts back ON.
                            page += 2;
                            main_background ();
                         }

                         start_tx_rslt (Erased);
                         load = LOAD_CE_CODE_DEFAULT;
                         start_tx_rslt ("Commence CE Code Default Download\r\n");
                      }
                      else
                         start_tx_rslt (Not_Erased);
                   }
                   else if (UPLOAD == load_direction)
                   {
                      load = LOAD_CE_CODE_DEFAULT;
                      start_tx_rslt ("//CE Program Image File (Verilog Hex) Upload\r\n");
                   }
                   else
                      cmd_error ();
                   break;

                default:
                   cli_index = d;
                   load = LOAD_CE_CODE;
                   start_tx_rslt ("Commence CE Code ");
                   break;
             }
             break;

          case 'D':
             switch (c = toupper (get_char_d (&d)))
             {
                case 'D':
                   if ('=' == (c = get_char ()))
                      load_direction = DOWNLOAD;
                   else if ('?' == c)
                      load_direction = UPLOAD;
                   else
                      load_direction = NOLOAD;
                
                   if (DOWNLOAD == load_direction)
                   {
                      start_tx_rslt (Warning);
                      start_tx_rslt (Erase);
                      start_tx_rslt (Data_Defaults);
                      cb = ask_Y_or_N ();
                      start_tx_rslt (Data_Defaults);

                      if ('Y' == toupper (cb))
                      {
                         c = NUM_PAGES_CE_DATA;
                         page = (uint16_t) CeData >> 8;

                         while (c--)
                         {
                            EA = FALSE;                   // Turn OFF all interrupts.
                            FPAGE = page;                 // Set Flash Page Erase Enable.
                            ERASE = PAGE_ERASE_;          // Initiate page erase.
                            EA = TRUE;                    // Turn interrupts back ON.
                            page += 2;
                            main_background ();
                         }

                         start_tx_rslt (Erased);
                         load = LOAD_CE_DATA_DEFAULT;
                         start_tx_rslt ("Commence CE Data Default Download\r\n");
                      }
                      else
                         start_tx_rslt (Not_Erased);
                   }
                   else if (UPLOAD == load_direction)
                   {
                      load = LOAD_CE_DATA_DEFAULT;
                      start_tx_rslt ("Commence CE Data Default Upload\r\n");
                   }
                   else
                      cmd_error ();

                   break;

                case 'M':            // Monitor CE data locations.
                   load_direction = UPLOAD;
                   load = LOAD_CE_DATA_MONITOR;
                   start_tx_rslt ("Commence CE Data Monitor\r\n");
                   start_tx_rslt ("Hit any key to abort\r\n");
                   return;           // Exit early.

                default:
                   cli_index = d;
                   load = LOAD_CE_DATA;
                   start_tx_rslt ("Commence CE Data ");
                   break;
             }
             break;

          case 'E':
             load = LOAD_EEPROM;
             start_tx_rslt ("Commence Serial EEProm ");
             break;

          case 'F':
             load = LOAD_FLASH;
             start_tx_rslt ("Commence Flash ");
             break;

          case 'X':
             switch (c = toupper (get_char_d (&d)))
             {
                case 'M':
                   load_direction = UPLOAD;
                   load = LOAD_MPU_MONITOR;
                   start_tx_rslt ("Commence MPU Monitor\r\n");
                   start_tx_rslt ("Hit any key to abort\r\n");
                   return;           // Exit early.

                default:
                   load = LOAD_MPU_DATA;
                   start_tx_rslt ("Commence MPU ");
                   break;
             }
             break;

          default:
             break;
       }     

       if (!done (&c))
       {
          if ('=' == c)
             load_direction = DOWNLOAD;
          else if ('?' == c)
             load_direction = UPLOAD;
          else
             load_direction = NOLOAD;

          if (DOWNLOAD == load_direction)
             start_tx_rslt ("Download\r\n");          
          else if (UPLOAD == load_direction)
             start_tx_rslt ("Upload\r\n");          
       }
    }
}

static uint8_t ask_Y_or_N (void)
{
    uint8_t xdata cb;

    start_tx_rslt (Y_or_N);

    do
    {
       main_background ();
    } while (Serial_CRx (port, &cb, 1) < 1);

    if ('Y' == toupper (cb))
       start_tx_rslt ("Y");
    else
       start_tx_rslt ("N");

    send_crlf ();
    return (cb);
}

static void Download (void)
{
    bool Ok;
    uint8_t xdata width;
    uint8_t xdata width_data;
    int32_t xdata addr;
    uint8_16_32_t xdata d;
	uint8_t idata c;

    uint8x_t  * xdata p_1byte;
    uint16x_t * xdata p_2byte;
    int32x_t  * xdata p_4byte;

	#if CLI_EEPROM
    struct EEPROM_t xdata eeWrite;
	#endif

    addr = get_addr (&width);
    d.l  = get_data (&width_data);       
    width = width_data;
    
    if (width_data)
    {
       switch (load)
       {
          #if TRACE10
          case LOAD_CE_CODE:
             p_2byte = (uint16x_t *) (CE_CODE_BASE + (addr << 1));
             break;
          #endif

          case LOAD_CE_CODE_DEFAULT:
             p_2byte = (uint16x_t *) (CeCode + addr);    // Pointer addition used.
             break;

          case LOAD_CE_DATA:
             p_4byte = (int32x_t *) (CE_DATA_BASE + (addr << 2));
             break;

          case LOAD_CE_DATA_DEFAULT:
             p_4byte = (int32x_t *) (CeData + addr);    // Pointer addition used.
             break;

          case LOAD_EEPROM:
             break;

          case LOAD_FLASH:
          case LOAD_MPU_DATA:
             switch (width_data)
             {
                case 1:  p_1byte = (uint8x_t  *) (0 + addr);         break;
                case 2:  p_2byte = (uint16x_t *) (0 + (addr << 1));  break;
                case 4:  p_4byte =  (int32x_t *) (0 + (addr << 2));  break;
             }
             break;
       }
    }

    while (width)
    {
       switch (load)
       {
          case LOAD_CE_CODE_DEFAULT:
             EA = FALSE;
             FCTRL = PWE_;   *(p_1byte + 0) = d.c[2];	FCTRL = 0;	
             FCTRL = PWE_;   *(p_1byte + 1) = d.c[3];	FCTRL = 0;	
             EA = TRUE;

#ifdef VERIFY
             if (* (uint16r_t *) p_2byte != d.i[1])
             {
                start_tx_rslt ("\r\nBAD VERIFY\r\n");
                Ok = FALSE;
             }
#endif
             p_1byte += 2;  p_2byte++;
             break;

          case LOAD_CE_DATA_DEFAULT:
             EA = FALSE;
             FCTRL |= PWE_;  *(p_1byte + 0) = d.c[0];	FCTRL = 0;	
             FCTRL |= PWE_;  *(p_1byte + 1) = d.c[1];	FCTRL = 0;	
             FCTRL |= PWE_;  *(p_1byte + 2) = d.c[2];	FCTRL = 0;	
             FCTRL |= PWE_;  *(p_1byte + 3) = d.c[3];	FCTRL = 0;	
             EA = TRUE;
#ifdef VERIFY
             if (* (int32r_t *) p_4byte != d.l)
             {
                start_tx_rslt ("\r\nBAD VERIFY\r\n");
                Ok = FALSE;
             }
#endif
              p_1byte += 4; p_4byte++;
             break;

          #if TRACE10
          case LOAD_CE_CODE:
             *p_2byte++ = d.i[1];
             break;
          #endif

          case LOAD_CE_DATA:
             *p_4byte++ = memget_ce ((int32x_t *) &d.l);
             break;

		  #if CLI_EEPROM
          case LOAD_EEPROM:
             eeWrite.addr = addr;    
             eeWrite.len = width_data;

             switch (width_data)
             {
                case 1:  eeWrite.buffer = (uint8x_t *) &d.c[3];  addr += 1;  break;
                case 2:  eeWrite.buffer = (uint8x_t *) &d.i[1];  addr += 2;  break;
                case 4:  eeWrite.buffer = (uint8x_t *) &d.l;     addr += 4;  break;
             }

             do 
             {
                main_background ();
                eeWrite.status = memcpy_prx (eeWrite.addr, eeWrite.buffer, eeWrite.len);
             } while (_ERR_PENDING == *eeWrite.status);
             break;
		  #endif	

          case LOAD_FLASH:
             switch (width_data)
             {
                case 1: // FLASH WRITE
                   EA = FALSE;
                   FCTRL |= PWE_;  *p_1byte = d.c[3];	FCTRL = 0;	
                   EA = FALSE;
                   p_1byte++;
                   break;

                case 2: // FLASH WRITE
                   EA = FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区四区| 欧美亚洲动漫精品| 天堂va蜜桃一区二区三区漫画版| 欧美激情一区二区三区在线| 日韩一区二区三区四区| 91啪在线观看| av电影天堂一区二区在线| 国内成+人亚洲+欧美+综合在线| 亚洲伊人色欲综合网| 一区二区三区在线视频免费观看| 国产精品污网站| 精品久久久久久久久久久久久久久久久 | 久久久久久亚洲综合影院红桃 | 国产精品丝袜91| 日本一区二区三区在线观看| 久久久久国产免费免费| 国产视频亚洲色图| 国产精品乱码妇女bbbb| 国产精品国模大尺度视频| 亚洲精品综合在线| 日韩一区精品视频| 日av在线不卡| 国产美女精品人人做人人爽| 国产一区二区看久久| 不卡一区在线观看| 一道本成人在线| 日韩一区二区三区视频在线观看 | 国产精品久久久久天堂| 亚洲激情一二三区| 青青草原综合久久大伊人精品 | 欧美片在线播放| 精品欧美乱码久久久久久1区2区| 国产欧美日韩在线观看| 一区二区理论电影在线观看| 日本少妇一区二区| 成人综合在线观看| 91麻豆精品91久久久久久清纯 | 日本欧美一区二区| 风间由美中文字幕在线看视频国产欧美 | 久久精品国产77777蜜臀| 成人深夜视频在线观看| 欧美日本在线看| 国产精品日日摸夜夜摸av| 日韩精品福利网| 99久久综合国产精品| 日韩一卡二卡三卡国产欧美| 亚洲色图视频网站| 国产传媒日韩欧美成人| 欧美久久久久中文字幕| 亚洲午夜久久久久久久久电影院| 国产一区二区免费视频| 在线播放日韩导航| 日韩毛片精品高清免费| 国内精品免费**视频| 欧美视频你懂的| 日韩一区有码在线| 韩国午夜理伦三级不卡影院| 欧美人体做爰大胆视频| 日韩精品中文字幕一区二区三区| 亚洲国产日韩av| 91国产免费看| 久久99久久99| 欧美色图免费看| 亚洲综合久久久久| 欧美网站大全在线观看| 亚洲一区二区三区国产| 欧美伊人久久久久久久久影院 | 亚洲成人免费看| 欧美日韩精品一区二区三区四区| 一区二区三区在线免费视频 | 成人aaaa免费全部观看| 日韩一级免费一区| 蜜臀久久99精品久久久久宅男| 欧美日韩精品一区视频| 玉足女爽爽91| 欧美精品在线一区二区三区| 日韩精品亚洲专区| 精品久久久久久最新网址| 国产a级毛片一区| 中文字幕一区二区在线观看 | 在线免费观看日韩欧美| 首页国产欧美久久| 久久新电视剧免费观看| 9久草视频在线视频精品| 亚洲成人综合网站| 久久久久久久久久久电影| 成人午夜看片网址| 午夜日韩在线电影| 国产日韩欧美在线一区| 色综合视频一区二区三区高清| 日韩国产在线一| 亚洲欧美日韩中文字幕一区二区三区 | 久久婷婷色综合| 欧美日本一道本在线视频| 在线观看国产日韩| 亚洲精品视频在线看| 久久99久久久欧美国产| 中文字幕成人网| 中文一区在线播放| 久久精品人人做人人爽人人| 国产性做久久久久久| 国产情人综合久久777777| 久久久久国产精品厨房| 日本高清不卡在线观看| 国产在线视频不卡二| 亚洲国产一区二区在线播放| 国产午夜亚洲精品不卡| 在线播放91灌醉迷j高跟美女| 成人性生交大片免费看视频在线 | 欧美色中文字幕| 成人永久aaa| 久久se这里有精品| 日本视频在线一区| 午夜亚洲福利老司机| 亚洲久草在线视频| 中文字幕中文字幕一区二区 | 欧美性大战xxxxx久久久| 91视视频在线观看入口直接观看www| 国产乱码精品一区二区三区av| 国产原创一区二区| 国产999精品久久久久久绿帽| 国产一区二区剧情av在线| 波多野结衣精品在线| 色婷婷一区二区| 欧美一区二区国产| 久久先锋资源网| 玉足女爽爽91| 久久99精品一区二区三区三区| 国产·精品毛片| 91福利国产成人精品照片| 欧美精品第1页| 日韩欧美激情四射| 国产午夜精品一区二区| 一区二区三区在线影院| 国产精品中文字幕一区二区三区| 91在线码无精品| 日韩你懂的在线观看| 伊人色综合久久天天| 美女视频免费一区| 不卡电影一区二区三区| 欧美伦理电影网| 综合久久国产九一剧情麻豆| 一区二区三区中文免费| 亚洲色欲色欲www| 亚洲一级二级三级| 91国在线观看| 亚洲精品中文在线影院| 99久久婷婷国产综合精品 | 99精品久久久久久| 国产精品视频一二三区| 激情综合色播激情啊| 在线不卡欧美精品一区二区三区| 亚洲精品欧美综合四区| 不卡视频在线观看| 亚洲国产精品t66y| 国产成人啪午夜精品网站男同| 日韩视频123| 国产又黄又大久久| 国产性天天综合网| 成人在线视频首页| 日韩伦理av电影| 色偷偷久久一区二区三区| 1024国产精品| 色欧美88888久久久久久影院| 亚洲欧美国产三级| 欧美最猛性xxxxx直播| 亚洲无人区一区| 欧美精品 国产精品| 免费观看日韩av| 久久久久久久久久久久久久久99| 国产福利电影一区二区三区| 国产精品私人自拍| 91在线国产福利| 日韩国产一区二| 久久久综合视频| 91麻豆精品在线观看| 亚洲妇熟xx妇色黄| 精品欧美一区二区久久 | 国产成人h网站| 日韩高清在线一区| 欧美一区二区在线视频| 国产精品夜夜嗨| 亚洲国产日韩一级| 欧美激情一区二区在线| 欧美一级精品在线| 91首页免费视频| 国产一区二区91| 亚洲最新视频在线播放| 久久人人超碰精品| 欧美性高清videossexo| 国产91高潮流白浆在线麻豆| 五月天国产精品| 亚洲同性同志一二三专区| xfplay精品久久| 欧美日本视频在线| 欧洲生活片亚洲生活在线观看| 国产一区二区三区美女| 老司机午夜精品99久久| 一区二区三区日韩欧美精品| 国产欧美日韩三区|