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

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

?? fburncmd.c

?? 基于TI-DM642的一個FLASH燒寫算法例程。支持C6000系列的FLASH燒寫
?? 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一区二区三区免费野_久草精品视频
56国语精品自产拍在线观看| 国产高清不卡二三区| 色婷婷国产精品久久包臀| 国产精品欧美久久久久一区二区| 国产最新精品精品你懂的| 精品播放一区二区| 国产美女一区二区三区| 久久久精品蜜桃| 成人激情视频网站| 亚洲乱码国产乱码精品精的特点 | 欧美群妇大交群中文字幕| 亚洲国产毛片aaaaa无费看| 欧美日韩性生活| 秋霞影院一区二区| 国产无人区一区二区三区| 国产精品一区在线观看你懂的| 国产日韩欧美高清| 在线免费观看日本一区| 日韩二区在线观看| 久久久噜噜噜久久人人看 | 国产三级三级三级精品8ⅰ区| 国产suv一区二区三区88区| 亚洲欧美另类图片小说| 欧美精品日日鲁夜夜添| 国产在线播放一区三区四| 中文字幕av一区二区三区高| 欧美色网一区二区| 美女视频一区二区| 国产精品日日摸夜夜摸av| 欧美日韩在线不卡| 九九久久精品视频| 亚洲精品老司机| 日韩亚洲欧美一区| 99re成人在线| 蜜臀91精品一区二区三区| 亚洲国产综合在线| 欧美成人性福生活免费看| 99热精品国产| 精品一区二区免费视频| 亚洲精品欧美在线| 精品国产a毛片| 一本到不卡免费一区二区| 久久成人羞羞网站| 亚洲女同女同女同女同女同69| 欧美一区二区久久久| 99久久久久久| 韩国av一区二区三区| 亚洲小少妇裸体bbw| 亚洲精品在线观| 欧美日韩专区在线| jizz一区二区| 狠狠狠色丁香婷婷综合久久五月| 亚洲精品国产一区二区三区四区在线 | 中文字幕国产精品一区二区| 在线不卡中文字幕| 色综合天天在线| 国产夫妻精品视频| 日韩精品一二区| 亚洲九九爱视频| 国产精品久久久久久久久快鸭 | 亚洲欧美综合在线精品| 精品国产污网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产一区二区视频在线| 日本va欧美va瓶| 亚洲成在线观看| 亚洲欧美日韩国产另类专区| 国产精品理伦片| 中文字幕av一区二区三区免费看| wwwwww.欧美系列| 欧美电视剧在线看免费| 欧美一级淫片007| 欧美一区二区在线不卡| 欧美精品乱码久久久久久按摩| 欧美日韩一区二区三区四区| 色婷婷综合久色| 色狠狠一区二区| 在线观看视频一区二区| 色欧美88888久久久久久影院| 99视频在线精品| 色综合中文字幕国产| 国产91丝袜在线观看| 国产不卡视频一区| 成人一级视频在线观看| 成人免费看视频| 成av人片一区二区| 91香蕉视频黄| 色婷婷av一区二区三区大白胸| 一本色道**综合亚洲精品蜜桃冫| 色综合久久中文综合久久牛| 欧洲色大大久久| 欧美浪妇xxxx高跟鞋交| 日韩情涩欧美日韩视频| 久久精品视频免费| 日韩美女精品在线| 香蕉成人伊视频在线观看| 石原莉奈在线亚洲二区| 精品一区二区三区免费毛片爱 | 国产传媒久久文化传媒| 成人免费毛片片v| 色综合久久久久久久久久久| 欧美午夜片在线看| 日韩一区二区在线看| 国产区在线观看成人精品| 中文字幕一区二区三区在线不卡| 亚洲免费观看高清| 日本中文字幕一区| 国产成人在线影院| 色呦呦网站一区| 日韩三级中文字幕| 国产精品全国免费观看高清| 亚洲一区中文日韩| 国产自产2019最新不卡| 色哟哟国产精品| 欧美一区二区性放荡片| 国产精品久久夜| 日韩精品免费专区| 成人午夜视频在线| 4hu四虎永久在线影院成人| 久久精品一区二区三区四区| 亚洲男人电影天堂| 久久成人av少妇免费| av高清久久久| 日韩精品影音先锋| 亚洲精品中文字幕乱码三区| 蜜臀va亚洲va欧美va天堂| 色综合欧美在线| 26uuu久久综合| 五月综合激情网| 成人av资源在线| 3d成人h动漫网站入口| 国产精品乱码一区二区三区软件| 日本人妖一区二区| 在线欧美小视频| 国产精品久久久久影院色老大| 日本中文字幕一区| 91论坛在线播放| 国产午夜精品福利| 久久精品国产第一区二区三区| 色拍拍在线精品视频8848| 国产清纯美女被跳蛋高潮一区二区久久w| 精品国产一区二区三区四区四| 日韩和欧美一区二区三区| 色综合久久66| 久久免费视频色| 日韩激情一二三区| 一本在线高清不卡dvd| 久久只精品国产| 秋霞影院一区二区| 欧美精品第1页| 亚洲一区中文在线| 91网页版在线| 国产精品久久毛片| 国产成人一区在线| 久久久久国产成人精品亚洲午夜| 日韩影视精彩在线| 5566中文字幕一区二区电影| 亚洲综合在线观看视频| 99久久精品国产一区| 国产欧美一区二区在线观看| 久久成人18免费观看| 日韩欧美国产精品| 日韩国产成人精品| 欧美精品自拍偷拍动漫精品| 亚洲欧美日韩在线| 一本在线高清不卡dvd| ...xxx性欧美| 91麻豆福利精品推荐| 自拍视频在线观看一区二区| www.久久久久久久久| 亚洲日本一区二区| 91黄视频在线观看| 亚洲第一主播视频| 欧美电影影音先锋| 男女性色大片免费观看一区二区 | 韩国av一区二区三区| 精品久久久网站| 国内精品视频666| 国产情人综合久久777777| 成人晚上爱看视频| 亚洲日本丝袜连裤袜办公室| 日本电影亚洲天堂一区| 亚洲成人动漫在线免费观看| 这里是久久伊人| 久久99精品久久久久久动态图| 精品久久久久久久久久久久久久久 | 国产精品羞羞答答xxdd| 欧美激情资源网| 99re这里都是精品| 一区二区三区在线视频免费| 色婷婷综合久久久中文一区二区| 亚洲国产综合视频在线观看| 欧美高清视频在线高清观看mv色露露十八 | 国产精品区一区二区三区| 91免费版在线| 日韩影院免费视频| 久久精品免视看| 在线区一区二视频| 精品制服美女丁香| 专区另类欧美日韩|