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

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

?? fburncmd.c

?? flashburn-dm642multipagefix FlashBurn Programming Functions for DM642 EVM
?? C
字號:
/*********************************************************************
 *          (C) COPYRIGHT TEXAS INSTRUMENTS, INC. 2000-2002
 * FlashBurn Programming Functions
 *     for DM642 EVM
 */

/*
 */

#include <stdio.h>
#include "type.h"
#include "c642evm.h"
#include "FBTC642.h"
#include "FBCmd.h"

	/* Local prototype
	 */
static GetFlashBuf(u8 *dest, u8 *flashsrc, u16 nBytes);

	/* Used by the checksum calc functions
	 */
static volatile unsigned long cksum = 0;

    /* flashstart/next are used to track
     * where we are in a "flat" Flash memory.
     * Paging, etc. are handled by helper
     * funcs.
     */  
static volatile u8 *flashstart = (volatile u8 *)FLASH_START;
static volatile u8 *flashnext  = (volatile u8 *)FLASH_START;

	/* These are "override" values, in case the
	 * Host has sent new flash base addr and size.
     * flashbaseov is 0xffffffff normally, but changes
     * if Host sends the Change FLASHSTART Address command.
     * Thus if it's not 0xffffffff, then it should be used
     * instead of the FLASH_START value. 
	 */
static volatile u8 *flashbaseov = (u8 *)0xffffffffUL;
static unsigned long flashsizeov =  0xffffffffUL;

/* Constant table containing end address of each sector */
unsigned long sector_end[FLASH_SECTORS] = {
    FLASH_START + 0x00ffff, /* Sector 0  */
    FLASH_START + 0x01ffff, /* Sector 1  */
    FLASH_START + 0x02ffff, /* Sector 2  */
    FLASH_START + 0x03ffff, /* Sector 3  */
    FLASH_START + 0x04ffff, /* Sector 4  */
    FLASH_START + 0x05ffff, /* Sector 5  */
    FLASH_START + 0x06ffff, /* Sector 6  */
    FLASH_START + 0x07ffff, /* Sector 7  */    
    FLASH_START + 0x08ffff, /* Sector 8  */
    FLASH_START + 0x09ffff, /* Sector 9  */
    FLASH_START + 0x0affff, /* Sector 10 */
    FLASH_START + 0x0bffff, /* Sector 11 */
    FLASH_START + 0x0cffff, /* Sector 12 */
    FLASH_START + 0x0dffff, /* Sector 13 */
    FLASH_START + 0x0effff, /* Sector 14 */
    FLASH_START + 0x0fffff, /* Sector 15 */
    FLASH_START + 0x10ffff, /* Sector 16 */
    FLASH_START + 0x11ffff, /* Sector 17 */
    FLASH_START + 0x12ffff, /* Sector 18 */
    FLASH_START + 0x13ffff, /* Sector 19 */
    FLASH_START + 0x14ffff, /* Sector 20 */
    FLASH_START + 0x15ffff, /* Sector 21 */
    FLASH_START + 0x16ffff, /* Sector 22 */
    FLASH_START + 0x17ffff, /* Sector 23 */
    FLASH_START + 0x18ffff, /* Sector 24 */
    FLASH_START + 0x19ffff, /* Sector 25 */
    FLASH_START + 0x1affff, /* Sector 26 */
    FLASH_START + 0x1bffff, /* Sector 27 */
    FLASH_START + 0x1cffff, /* Sector 28 */
    FLASH_START + 0x1dffff, /* Sector 29 */
    FLASH_START + 0x1effff, /* Sector 30 */
    FLASH_START + 0x1fffff, /* Sector 31 */
    FLASH_START + 0x20ffff, /* Sector 32 */
    FLASH_START + 0x21ffff, /* Sector 33 */
    FLASH_START + 0x22ffff, /* Sector 34 */
    FLASH_START + 0x23ffff, /* Sector 35 */
    FLASH_START + 0x24ffff, /* Sector 36 */
    FLASH_START + 0x25ffff, /* Sector 37 */
    FLASH_START + 0x26ffff, /* Sector 38 */
    FLASH_START + 0x27ffff, /* Sector 39 */    
    FLASH_START + 0x28ffff, /* Sector 40 */
    FLASH_START + 0x29ffff, /* Sector 41 */
    FLASH_START + 0x2affff, /* Sector 42 */
    FLASH_START + 0x2bffff, /* Sector 43 */
    FLASH_START + 0x2cffff, /* Sector 44 */
    FLASH_START + 0x2dffff, /* Sector 45 */
    FLASH_START + 0x2effff, /* Sector 46 */
    FLASH_START + 0x2fffff, /* Sector 47 */
    FLASH_START + 0x30ffff, /* Sector 48 */
    FLASH_START + 0x31ffff, /* Sector 49 */
    FLASH_START + 0x32ffff, /* Sector 50 */
    FLASH_START + 0x33ffff, /* Sector 51 */
    FLASH_START + 0x34ffff, /* Sector 52 */
    FLASH_START + 0x35ffff, /* Sector 53 */
    FLASH_START + 0x36ffff, /* Sector 54 */
    FLASH_START + 0x37ffff, /* Sector 55 */
    FLASH_START + 0x38ffff, /* Sector 56 */
    FLASH_START + 0x39ffff, /* Sector 57 */
    FLASH_START + 0x3affff, /* Sector 58 */
    FLASH_START + 0x3bffff, /* Sector 59 */
    FLASH_START + 0x3cffff, /* Sector 60 */
    FLASH_START + 0x3dffff, /* Sector 61 */
    FLASH_START + 0x3effff, /* Sector 62 */
    FLASH_START + 0x3fffff, /* Sector 63 */
};
char erasetable[FLASH_SECTORS];

/* Set and get the flash base address
 */
void SetFlashBase(unsigned long val)
{
	flashbaseov = (volatile u8 *)val;
}

volatile u8 *GetFlashBase(void)
{
	return flashbaseov != (volatile u8 *)0xffffffffL ?
	                      flashbaseov :
	                      (volatile u8 *)FLASH_START;
}

/* Set and get the flash size
 */
void SetFlashSize(unsigned long val)
{
	flashsizeov = val;
}

unsigned long GetFlashSize(void)
{
	return flashsizeov != 0xffffffffL ? flashsizeov : FLASH_SIZE;
}

void InitFlash(void)
{
    int i;
	flashstart = GetFlashBase();
	flashnext = flashstart;
    
    /* Mark all sectors as unerased */
    for (i = 0; i < FLASH_SECTORS; i++)
        erasetable[i] = 0;
}

void SetFlashAddr(u8 *addr)
{
	flashstart = (volatile u8 *)addr;
	flashnext = flashstart;
}


volatile u8 *GetNextFlashAddr(void)
{
	return flashnext;
}

/* Erase a segment of Flash memory */
void flash_erase(u32 start, u32 length)
{
    int i;
    unsigned long sector_base, phys_base, end;
    
    /* Calculate extents of range to erase */
    end = start + length - 1;
    
    /* Walk through each sector, erase any sectors within range */
    sector_base = FLASH_START;
    for (i = 0; i < FLASH_SECTORS; i++)
    {
        if (!erasetable[i] && (start <= sector_end[i]) && (end >= sector_base))
        {
            /* Start sector erase sequence */
            phys_base = (sector_base & 0x00070000) + FLASH_START;
            *FLASH_PAGE = (sector_base & 0x380000) >> 19;
            *(volatile char *)FLASH_START = (char)FLASH_KEY1;
            *(volatile char *)FLASH_START = (char)FLASH_KEY2;
            *(volatile char *)FLASH_START = (char)FLASH_KEY4;

            *(volatile char *)FLASH_START = (char)FLASH_KEY1;
            *(volatile char *)FLASH_START = (char)FLASH_KEY2;
            *(volatile char *)(phys_base) = (char)FLASH_KEY6;
            
            /* Wait until erase is done */
	        while(GetFlashVal(sector_base) != 0xff);

            /* Put the Flash in normal mode */
            *(volatile char *)phys_base = (char)0xf0;
            
            /* Mark sector as erased */
            erasetable[i] = 1;               
        }
        
        /* Advance to next sector */
        sector_base = sector_end[i] + 1;
    }
}

/* Burns flash data, starting at flashnext.
 * This embodies the burning algorithm for the
 * AMD29LV033C flash memory used on DM642 EVM
 */
void BurnFlash(u8 *data, u16 nBytes)
{
	u16 timeout;
	u8 c;
	volatile u8 *pdata;

    /* Put the Flash in normal mode */    
    *(volatile char *)FLASH_START = (char)0xf0;

    flash_erase((u32)flashnext, (u32)nBytes);
	while(nBytes--)		
	{
		/* Prep AMD
		 * 32MBit (4M x 8) Flash Memory
		 * for writing a byte.
		 */
		*FLASH_PAGE = (u8)(((u32)flashnext & 0x380000) >> 19);
		*(volatile char *)FLASH_START = (char)FLASH_KEY1;
		*(volatile char *)FLASH_START = (char)FLASH_KEY2;
		*(volatile char *)FLASH_START = (char)FLASH_KEY3;

        pdata = (volatile u8 *)((u32)flashnext & 0xffc7ffff);
		*pdata = *data;
		
		/* Spin here 'til programming completes
		 */
		c = *data++;
		timeout = 0;
		do timeout += 1;
		while(*pdata != c && timeout < (u16)0xffff);		
		flashnext++;
	}
	
    /* Put the Flash in normal mode */    
    *(volatile char *)FLASH_START = (char)0xf0;
}


/* The Flash Erase function uses
 * the AMD algorithm to erase the
 * entire chip.
 */

void EraseFlash(void)
{
    int i;
			
	/* Code to erase AMD29LV033C
	 * 32MBit (4MK X 8) Flash Memory
	 */
	*FLASH_PAGE = 0;
	*(volatile char *)FLASH_START = (char)FLASH_KEY1;
	*(volatile char *)FLASH_START = (char)FLASH_KEY2;
	*(volatile char *)FLASH_START = (char)FLASH_KEY4;

	*(volatile char *)FLASH_START = (char)FLASH_KEY1;
	*(volatile char *)FLASH_START = (char)FLASH_KEY2;
	*(volatile char *)FLASH_START = (char)FLASH_KEY5;

    /* Wait until erase is done */
	while(GetFlashVal(FLASH_START) != 0xff);

    /* Put the Flash in normal mode */    
    *(volatile char *)FLASH_START = (char)0xf0;

    /* Mark all sectors as erased */
    for (i = 0; i < FLASH_SECTORS; i++)
        erasetable[i] = 1;
    
	return;
}

void CKSSet(u16 val)
{
	cksum = val;
}
	
u16 CKSGet(void)
{
	return (u16)cksum;
}
		
u16 CKSAccumBuf(unsigned char *buf, unsigned int len)
{
    unsigned long src;
   
    src = (unsigned long)buf;
	while(len-- > 0)
	{
		cksum += GetFlashVal(src++);
		if(cksum > (unsigned long)0x0000ffff)
		{
			cksum += 1;
			cksum &= (unsigned long)0x0000ffff;
		} 
	}
	
	return (u16)cksum;
}

u8 GetFlashVal(unsigned long addr)
{
	*FLASH_PAGE = (u8)(((u32)addr & 0x380000) >> 19);
	return *(volatile u8 *)(addr & 0xffc7ffff);
}

void SendFlashBufToHost(u16 cmd, unsigned long addr, u16 bytecount)
{
    u8 *pflash = (u8 *)addr;
    u16 n = bytecount > 256 ? 256 : bytecount;

	StoreCmd(cmd);     
	StoreArg(0, bytecount);	
    
	GetFlashBuf(GetData(), pflash, n);
}

static GetFlashBuf(u8 *dest, u8 *flashsrc, u16 nBytes)
{
    unsigned long src, dst, i;

    src = (unsigned long)flashsrc;
    dst = (unsigned long)dest;
    
    for (i = 0; i < nBytes; i++)
    {
        *((u8 *)dst++) = GetFlashVal(src++);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品色哟哟网站| 精品电影一区二区三区 | 久久日韩粉嫩一区二区三区| 国产精品不卡一区二区三区| 日本伊人色综合网| 99久久er热在这里只有精品15| 欧美一区二区人人喊爽| 亚洲人午夜精品天堂一二香蕉| 精品一区二区在线观看| 欧美日韩一卡二卡| 欧美剧情电影在线观看完整版免费励志电影| 午夜精彩视频在线观看不卡| 国产成人欧美日韩在线电影| 欧美日韩美少妇| 亚洲人123区| 成人精品一区二区三区四区| 欧美大白屁股肥臀xxxxxx| 亚洲国产精品久久一线不卡| 成人性生交大合| 久久久国际精品| 蜜臀精品一区二区三区在线观看 | 亚洲曰韩产成在线| 成人国产精品免费观看动漫| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品午夜电影| 亚洲成人av电影在线| 中文字幕日韩av资源站| 国产剧情一区二区三区| 精品久久久久一区二区国产| 日韩av不卡一区二区| 911精品产国品一二三产区| 一区二区三区中文字幕| 日本乱人伦aⅴ精品| 一区二区高清在线| 欧美午夜精品一区二区蜜桃| 亚洲图片欧美综合| 777奇米四色成人影色区| 麻豆精品视频在线观看| 精品成人一区二区| 国产精品1区二区.| 一区二区三区日韩精品视频| aaa欧美色吧激情视频| 亚洲三级在线免费| 欧美中文字幕不卡| 热久久一区二区| 久久综合色8888| 高清国产一区二区| 亚洲激情六月丁香| 欧美日韩精品欧美日韩精品| 日本aⅴ免费视频一区二区三区| 精品第一国产综合精品aⅴ| 国产99精品国产| 亚洲精品videosex极品| 欧美日韩亚洲国产综合| 麻豆91小视频| 国产精品网站一区| 欧美撒尿777hd撒尿| 久久99在线观看| 国产精品久久久久一区| 欧美视频一区二区三区| 国产麻豆日韩欧美久久| 一区二区视频免费在线观看| 欧美日本不卡视频| 国产suv一区二区三区88区| 亚洲一区二区美女| 2022国产精品视频| 在线免费一区三区| 极品少妇xxxx精品少妇偷拍| 一区二区三区资源| 久久久亚洲国产美女国产盗摄 | 国产乱子轮精品视频| 日韩毛片高清在线播放| 日韩视频永久免费| 91蜜桃婷婷狠狠久久综合9色| 青青草精品视频| 亚洲免费在线视频一区 二区| 欧美一区二区三区男人的天堂| 国产伦精品一区二区三区视频青涩| 亚洲制服丝袜av| 国产午夜精品一区二区三区视频| 91福利视频网站| 国产成人亚洲综合a∨婷婷| 婷婷夜色潮精品综合在线| 国产精品久久久久影院亚瑟 | 欧美日韩欧美一区二区| 粉嫩aⅴ一区二区三区四区五区| 午夜久久久久久久久久一区二区| 亚洲一级二级三级在线免费观看| 精品福利av导航| 在线综合视频播放| 在线观看免费一区| 99久久婷婷国产综合精品| 国产一区视频网站| 青青草国产精品亚洲专区无| 一区二区久久久久| 亚洲欧美视频一区| 国产精品久久久久影视| 国产日韩影视精品| 欧美成人精品福利| 欧美一区二区啪啪| 51精品秘密在线观看| 欧美视频一二三区| 欧美日韩亚洲国产综合| 欧美天天综合网| 欧美亚洲愉拍一区二区| 一本久久综合亚洲鲁鲁五月天 | 亚洲欧美在线视频观看| 亚洲精品在线观看网站| 精品久久久久久亚洲综合网 | 国产麻豆精品一区二区| 免费xxxx性欧美18vr| 日韩一区精品视频| 天天亚洲美女在线视频| 一区二区三区在线播放| 亚洲免费伊人电影| 亚洲黄色在线视频| 一区二区三区在线播放| 亚洲超碰97人人做人人爱| 无码av免费一区二区三区试看| 天天操天天色综合| 免费在线观看一区二区三区| 久久国产婷婷国产香蕉| 国产美女视频91| 成人午夜视频免费看| 99国产精品久久久久久久久久 | 粉嫩aⅴ一区二区三区四区五区| 国产高清精品网站| caoporn国产精品| 在线观看成人小视频| 欧美久久久影院| 日韩欧美三级在线| 2021中文字幕一区亚洲| 中文字幕在线不卡一区| 亚洲美女偷拍久久| 视频一区免费在线观看| 狠狠色伊人亚洲综合成人| 国产99久久久精品| 欧美不卡在线视频| 中文欧美字幕免费| 亚洲一区二区精品久久av| 久久国内精品自在自线400部| 国产不卡免费视频| 欧美日韩久久久一区| 欧美videofree性高清杂交| 国产精品久久久一区麻豆最新章节| 一区二区在线观看视频在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国产成人一级电影| 欧美亚洲国产bt| 久久久影院官网| 亚洲国产成人av好男人在线观看| 看电影不卡的网站| kk眼镜猥琐国模调教系列一区二区| 欧美人与禽zozo性伦| 国产日产欧产精品推荐色| 一区二区三区精密机械公司| 国内精品伊人久久久久影院对白| 色综合一个色综合亚洲| 亚洲精品一区二区三区精华液| 国产精品久久777777| 久久精品国产网站| 色综合久久久久综合体| 精品成人一区二区三区| 亚洲亚洲人成综合网络| 成人黄色片在线观看| 欧美一卡二卡在线| 一区二区三区自拍| 成人精品一区二区三区四区| 日韩精品一区在线| 亚洲美女免费在线| 风间由美性色一区二区三区| 精品日韩成人av| 亚洲午夜在线电影| 99久久伊人久久99| 国产日韩欧美亚洲| 激情小说欧美图片| 欧美二区乱c少妇| 亚洲综合色丁香婷婷六月图片| 国产高清精品在线| 久久久久久久综合色一本| 日本不卡1234视频| 91精品国产手机| 五月天国产精品| 欧美性大战久久久久久久蜜臀| 最新国产成人在线观看| 国产91精品免费| 久久亚洲私人国产精品va媚药| 欧美96一区二区免费视频| 欧美日韩精品免费观看视频 | 韩国理伦片一区二区三区在线播放| 在线看一区二区| 亚洲精品综合在线| 色综合久久中文综合久久97| 国产精品亲子乱子伦xxxx裸| 国产成人在线视频播放| 久久精品视频一区二区| 国产一区二区免费看| 久久这里只有精品6| 国产一区日韩二区欧美三区| 欧美成人女星排行榜|