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

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

?? fburncmd.c

?? tms320vc5509a usb boot
?? C
字號:
/*
 * ----------------------------------------------------
 *          (C) COPYRIGHT TEXAS INSTRUMENTS, INC. 2000, 2001
 * FlashBurn Programming Functions
 *   for FBTC55
 * ----------------------------------------------------
 * $Log: FBurnCmd.c,v $
 * Revision 1.5  2001/04/19 18:56:50  heeschen
 * v00.30 Alpha - Updated comments
 *
 *
 */
#include <stdio.h>
#include "fbtc55.h" 
#include "fbcmd.h"
#include "flash.h" 

/*---- External memory interface -------------------------------------------*/
typedef struct c55xx_emif
{
    unsigned short egcr;        /* 00 */
    unsigned short rst;         /* 01 */
    unsigned short be;          /* 02 */
    unsigned short ce0_1;       /* 03 */
    unsigned short ce0_2;       /* 04 */
    unsigned short ce0_3;       /* 05 */
    unsigned short ce1_1;       /* 06 */
    unsigned short ce1_2;       /* 07 */
    unsigned short ce1_3;       /* 08 */
    unsigned short ce2_1;       /* 09 */
    unsigned short ce2_2;       /* 0A */
    unsigned short ce2_3;       /* 0B */
    unsigned short ce3_1;       /* 0C */
    unsigned short ce3_2;       /* 0D */
    unsigned short ce3_3;       /* 0E */
    unsigned short sdc1;        /* 0F */
    unsigned short sdper;       /* 10 */
    unsigned short sdcnt;       /* 11 */
    unsigned short sdinit;      /* 12 */
    unsigned short sdc2;        /* 13 */
    

} C55XX_EMIF;        

typedef ioport volatile C55XX_EMIF * PC55XX_EMIF;

#define C55XX_EMIF_ADDR   0x0800


extern unsigned short FlsRead(unsigned long Faddr);

static void AdjustOddAddress(unsigned long byteOffset, u16 *pdata, u16 nBytes);


    /* Non-zero if flash is erasing.
     * Changes to zero when we determine
     * that erasure is complete.
     */
static int ErsStatus = 0;

    /* flashstart and flashnext are used to track
     * where we are in a "flat" Flash memory.
     * Paging, etc. are handled by helper funcs.
     * flashbaseoverride is 0 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 FLBASE value. 
     */  
static unsigned long flashstart = FLASH_BASE_ADDR;
static unsigned long flashnext =  FLASH_BASE_ADDR;

    /* These are "override" values, in case the
     * Host has sent new flash base addr and size.
     */
static unsigned long flashbaseov = 0xffffffffL;
static unsigned long flashsizeov = 0xffffffffL;

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

unsigned long GetFlashBase(void)
{
    return flashbaseov != 0xffffffffL ? flashbaseov : FLASH_BASE_ADDR;
}

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

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


/* --------------------------------
 * Flash memory handlers
 * --------------------------------
 */
void InitFlash(void)
{
    PC55XX_EMIF pEmif = (PC55XX_EMIF)C55XX_EMIF_ADDR;

    pEmif -> ce1_1 = 0x1038;
    pEmif -> ce1_2 = 0x0038;
    pEmif -> ce1_3 = 0x0038;

    pEmif -> ce2_1 = 0x1038;
    pEmif -> ce2_2 = 0x0038;
    pEmif -> ce2_3 = 0x0038;
    
    flashstart = GetFlashBase();
    flashnext = flashstart;
    flash_init();
}

void SetFlashAddr(unsigned long addr)
{
    flashstart = addr;
    flashnext = flashstart;
}


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

/* Flash is accessed via external memory.
 * For the AMD Flash (Am29LV400),
 * program 1 word at a time.
 */
void BurnFlash(unsigned long byteOffset, u16 *pdata, u16 nBytes)
{
    int nWords;

    if(nBytes == 0)
        return;
        
    if((byteOffset & 1ul) != 0)   // odd address?
    {
        /* Write the odd byte from the beginning
         * of the data and shift all the others down
         * so I can write whole words after this.
         */
        AdjustOddAddress(byteOffset, pdata, nBytes);
        nBytes -= 1;
        byteOffset += 1;
    }
    
    SetFlashAddr(GetFlashBase() + byteOffset / 2);

    nWords = nBytes / 2;
        
    if(nWords > 0)
    {
        flash_write(pdata, (u16 *)flashnext, nWords);
        flashnext += nWords; /* For next time */
        pdata += nWords;
    }

    /* Write the odd byte at the end, if any.
     */ 
    if((nBytes & 1) != 0)
    {
        /* Write the spare byte: read/modify/write its
         * containing word.
         */
        u16 fval = *((u16 *)flashnext);
        fval &= 0x00ff;
        fval |= *pdata & 0xff00;

        flash_write(&fval, (u16 *)flashnext, 1);
    }
    
    return;
}

/* Called when byteOffset is odd.
 * Writes the 1st 8-bit byte at pdata
 * to flash using read/modify/write,
 * then shifts the rest of the data
 * down 1 byte so I write the rest on
 * word boundaries.
*/  
static void AdjustOddAddress(unsigned long byteOffset, u16 *pdata, u16 nBytes)
{
    int i;
    u16 myWord;
    
    SetFlashAddr(GetFlashBase() + byteOffset / 2);
    
    myWord = *((u16 *)flashnext);
    myWord &= 0xff00;
    myWord |= (*pdata) >> 8;
    flash_write(&myWord, (u16 *)flashnext, 1);
    flashnext += 1;
    
    nBytes -= 1;

    for(i=0; i<nBytes; i+=2)
    {
        myWord = *pdata << 8;
        myWord |= *(pdata+1) >> 8;
        *pdata++ = myWord;
    }
}


void CheckFlashErase(void)
{
    if(ErsStatus != 0)
    {
        if(EraseDone())
        {
            ErsStatus = 0;
        }
    }
}

void EraseFlash(void)
{
    chip_erase();

    ErsStatus = 1;
    
    while(ErsStatus == 1)
    {
        CheckFlashErase();
    }
    
    return;
}
 

static unsigned long cksum = 0;

void CKSSet(u16 val)
{
    cksum = val;
}
    
u16 CKSGet(void)
{
    return (u16)cksum;
}

    /* buf is start address in flash memory,
     * len is length in BYTES!
     */ 
u16 CKSAccumBuf(unsigned long byteOffset, unsigned long nBytes)
{   
    u16 val, nWords;
    u16 *pflash = (u16 *)(GetFlashBase() + byteOffset / 2);
    
    if((byteOffset & 1) != 0)
    {
        cksum += FlsRead((unsigned long)pflash) & 0x00ff;
        if(cksum >= 65536)
        {
            cksum += 1;
            cksum &= 0xffff;
        } 
        nBytes -= 1;
        byteOffset += 1;
        pflash++;
    }
    
    nWords = nBytes / 2;  // data is word addressable
    
    while(nWords-- > 0)
    {
        val = FlsRead((unsigned long)pflash++);
        cksum += val >> 8;
        if(cksum >= 65536)
        {
            cksum += 1;
            cksum &= 0xffff;
        } 
        cksum += val & 0x000000ff;
        if(cksum >= 65536)
        {
            cksum += 1;
            cksum &= 0xffff;
        } 
    }
    
    if((nBytes & 1) != 0)
    {
        cksum += FlsRead((unsigned long)pflash) >> 8;
        if(cksum >= 65536)
        {
            cksum += 1;
            cksum &= 0xffff;
        } 
    }

    return (u16)cksum;
}

u16 GetFlashVal(unsigned long addr)
{
    return FlsRead(addr);
}

void SendFlashBufToHost(u16 cmd, unsigned long addr, u16 bytecount)
{
    u16 *pflash = (u16 *)addr;
    u16 *pmsgdata = GetData();
    u16 i, n;

    /* Prep header
     */
    StoreCmd(cmd);     
    StoreArg(0, bytecount);

    n = (bytecount+1) / BYTESPERMAU;
    for(i=0; i<n; i+=1)
    {
        *pmsgdata++ = *pflash++;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久在线免费观看| 91美女片黄在线观看| 成人黄色免费短视频| 91偷拍与自偷拍精品| 欧美巨大另类极品videosbest| 日韩亚洲欧美中文三级| 欧美高清在线视频| 日韩高清中文字幕一区| 国产精品一二三四五| 欧美性色aⅴ视频一区日韩精品| 日韩一区二区视频| 中文字幕在线不卡| 蜜桃视频在线观看一区| 97se狠狠狠综合亚洲狠狠| 欧美老年两性高潮| 中文字幕欧美三区| 日韩在线一二三区| 成人深夜福利app| 91精品在线观看入口| 欧美国产精品久久| 免费三级欧美电影| 色悠久久久久综合欧美99| 精品国产亚洲在线| 一区二区国产盗摄色噜噜| 精东粉嫩av免费一区二区三区| 色呦呦一区二区三区| 久久亚洲一区二区三区四区| 亚洲一区二区美女| 成人av综合一区| 精品精品欲导航| 亚洲国产精品一区二区久久| 岛国精品一区二区| 欧美xxxxx牲另类人与| 一区二区三区成人| 成人免费黄色大片| 精品久久国产字幕高潮| 日韩中文字幕一区二区三区| 色婷婷综合视频在线观看| 久久婷婷国产综合国色天香| 婷婷中文字幕综合| 日本高清视频一区二区| 国产日韩一级二级三级| 久久se这里有精品| 在线电影国产精品| 亚洲亚洲人成综合网络| 91视频www| 中文天堂在线一区| 国产综合色精品一区二区三区| 欧美另类videos死尸| 亚洲女与黑人做爰| 成人免费观看男女羞羞视频| 久久色.com| 久久国产精品一区二区| 欧美福利视频导航| 一区二区三区四区不卡在线| 99精品视频一区二区| 国产欧美日韩综合| 国内国产精品久久| 久久综合色一综合色88| 免费观看在线综合色| 欧美日韩免费视频| 亚洲综合色在线| 色美美综合视频| 中文字幕在线不卡| 91蜜桃婷婷狠狠久久综合9色| 中文字幕在线不卡国产视频| av电影在线不卡| 国产精品美女久久久久久2018| 国产69精品久久久久毛片| 久久综合网色—综合色88| 国产一区二区三区免费看| 2024国产精品视频| 国产成人免费视频精品含羞草妖精| 久久精品一二三| 成人黄色大片在线观看| 亚洲欧洲日韩女同| 色天天综合久久久久综合片| 亚洲激情校园春色| 欧美日韩精品一二三区| 三级在线观看一区二区| 欧美一级黄色录像| 国产一本一道久久香蕉| 国产视频一区二区三区在线观看| 国产91丝袜在线观看| 一区视频在线播放| 在线中文字幕一区| 午夜精品久久久久| 日韩欧美的一区二区| 国产一区二区三区在线观看精品 | 亚洲午夜在线电影| 精品视频1区2区| 日韩中文字幕一区二区三区| 日韩美女天天操| 成人性生交大片免费看在线播放| 中文字幕一区二区视频| 色国产综合视频| 午夜a成v人精品| 精品国产电影一区二区| 不卡的av电影在线观看| 亚洲欧美区自拍先锋| 欧美福利视频导航| 国产成人精品影视| 一区二区三区产品免费精品久久75| 91精品久久久久久久99蜜桃| 国产一区二区三区黄视频 | 91麻豆国产在线观看| 婷婷六月综合亚洲| 国产免费久久精品| 欧美综合欧美视频| 精品亚洲免费视频| 亚洲丝袜美腿综合| 日韩欧美国产综合| 99久久国产综合精品色伊| 天堂久久一区二区三区| 国产欧美日韩视频一区二区| 欧美日韩日日摸| 国产91清纯白嫩初高中在线观看| 夜夜爽夜夜爽精品视频| 欧美成人a视频| 91免费看片在线观看| 麻豆91精品91久久久的内涵| 国产精品欧美一级免费| 欧美剧在线免费观看网站| 国产**成人网毛片九色| 日韩在线一区二区| 中文字幕一区日韩精品欧美| 欧美一级日韩不卡播放免费| 成人福利在线看| 日本亚洲视频在线| 亚洲欧美日韩国产综合| 精品国产一区二区三区久久影院 | 三级欧美韩日大片在线看| 中文字幕成人av| 日韩欧美黄色影院| 色狠狠色狠狠综合| 国产成人精品免费网站| 日本欧美一区二区| 亚洲免费av在线| 久久久99免费| 制服视频三区第一页精品| 97久久超碰精品国产| 国产真实乱子伦精品视频| 婷婷开心久久网| 亚洲九九爱视频| 日本一区二区三区四区在线视频 | 黄页网站大全一区二区| 亚洲va欧美va天堂v国产综合| 亚洲欧美一区二区在线观看| 久久综合九色综合欧美亚洲| 在线成人免费视频| 欧洲av在线精品| 99久久婷婷国产| 激情五月激情综合网| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲午夜激情网页| 亚洲欧美二区三区| 亚洲欧洲日韩在线| 国产精品视频观看| 国产亚洲欧美激情| wwwwxxxxx欧美| 欧美不卡一区二区三区| 欧美一级在线观看| 欧美老女人第四色| 欧美综合一区二区| 色综合欧美在线视频区| 91在线免费视频观看| 懂色av一区二区夜夜嗨| 国产精品亚洲专一区二区三区| 九九九精品视频| 欧美aa在线视频| 日韩福利电影在线| 日韩成人免费电影| 午夜精品久久久久久久99樱桃| 亚洲一级二级三级在线免费观看| 亚洲精品视频在线看| 亚洲码国产岛国毛片在线| 国产精品久久久久久久久免费丝袜| 久久精品一区二区三区av| 国产偷国产偷亚洲高清人白洁| ww亚洲ww在线观看国产| 久久亚洲免费视频| 国产日韩在线不卡| 国产精品成人在线观看| 日韩一区日韩二区| 亚洲三级久久久| 亚洲国产精品天堂| 日产国产欧美视频一区精品| 日本在线不卡视频| 国内外精品视频| 国产成人av福利| 95精品视频在线| 91免费视频网| 欧美精品1区2区3区| 日韩欧美二区三区| 久久久亚洲精品石原莉奈| 国产精品毛片大码女人| 亚洲精品日韩一| 亚洲成人动漫av| 精品中文字幕一区二区小辣椒| 国产成人aaa|