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

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

?? flash_16x4_ads.c

?? 使用JTAG口對AT91R40008芯片進行FLASH編程的程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *(base_addr + FLASH_SEQ_ADD1) = ERASE_SECTOR_CODE1;
        *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1;
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *sector_addr = ERASE_SECTOR_CODE2 ;

        //* Wait for Flash Ready after Erase, if timeout
        if ( wait_flash_ready ( sector_addr, (flash_word)0xFFFF ) == FALSE )
        {
            //* Display Timeout and return False
            printf ( "Timeout while erasing\n" ) ;
        }
        //* Endif
    }
    //* EndWhile

    //* Return True
    return ( TRUE ) ;
}
//* End

//*--------------------------------------------------------------------------------------
//* Function Name       : write_flash
//* Object              : write a word in flash
//*
//* Input Parameters    : flash_word *base_addr : Flash base address
//*                       flash_word *load_addr : Flash data address
//*                       flash_word data       : Data value
//*
//* Output Parameters   : TRUE if data has been written correctly, else FALSE
//*
//* Functions called    : wait_flash_ready
//*--------------------------------------------------------------------------------------
int write_flash ( flash_word *base_addr,
                  flash_word *load_addr,
                  flash_word data )
{
    flash_word  read_data ;

    //* Enter Programming code sequence
    *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1 ;
    *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2 ;
    *(base_addr + FLASH_SEQ_ADD1) = WRITE_CODE ;
    *load_addr = data ;

    //* Wait for Flash ready after erasing, if timeout
    if ( wait_flash_ready ( load_addr, data ) != TRUE )
    {
        //* Display Error and Exit
        printf ( "Timeout while programming\n" ) ;
        return ( FALSE ) ;
    }
    //* Endif

    //* If Data written does not equal data
    if (( read_data = *load_addr ) != data )
    {
        //* Display Error and return False
        printf ( "Program Error\n" ) ;
        printf ( "Address 0x%08x / Data 0x%04x / 0x%04x \n",
                 (int)load_addr, data, read_data ) ;
        //* Return False
        return ( FALSE );
    }
    //* Endif

    //* Return False
    return ( TRUE ) ;
}
//* End

//*--------------------------------------------------------------------------------------
//* Function Name       : download_file_to_flash
//* Object              : Read data from file and write it into flash memory
//* Input Parameters    : <addr_base> base flash address
//*                       <addr_load> address to load
//*
//* Output Parameters   : TRUE or FALSE
//*--------------------------------------------------------------------------------------
int download_file_to_flash ( FILE *image,
                             const FlashDef *flash,
                             flash_word *addr_base,
                             flash_word *addr_load )
//* Begin
{
    unsigned short  data ;
    flash_word  *addr_prg_sector = addr_base ;
    int         block = 0 ;
    int         nb_sector = 0 ;
    int         sector_id = 0 ;
    int         first = TRUE ;
    int         sector_found = FALSE ;
    int         change_sector = FALSE ;
    int         erase = FALSE ;

    //* For each word read from the file
    while ( fread ( &data, 1, 2, image ) == 2 )
    {
        //* Clear sector found flag
        sector_found = FALSE ;
        //* Clear Sector change flag
        change_sector = FALSE ;
        //* While sector not found
        while ( sector_found == FALSE )
        {
            //* If program address lower than current sector address + its size
            if (( addr_prg_sector + (flash->flash_org[block].sector_size/2) )
                > addr_load )
            {
                //* Flag sector found
                sector_found = TRUE ;
            }
            //* Else
            else
            {
                //* Flag sector change
                change_sector = TRUE ;
                //* Add current sector size to program address
                addr_prg_sector += (flash->flash_org[block].sector_size/2) ;

                //* Increment the Sector Identifier
                sector_id ++ ;
                //* Increment the sector number
                nb_sector++ ;
                //* If last sector in block tested
                if ( nb_sector >= flash->flash_org[block].sector_number )
                {
                    //* Re-initialize sector number in block
                    nb_sector = 0 ;
                    //* Increment block number
                    block ++ ;
                    //* If last block tested
                    if ( block >= flash->flash_block_nb )
                    {
                        //* Display Error and Return False
                        printf ( "Error : Address not found in the Flash Address Field\n" ) ;
                        return ( FALSE ) ;
                    }
                    //* Endif
                }
                //* Endif
            }
            //* EndIf
        }
        //* EndWhile

        //* Unflag Erasing
        erase = FALSE ;
        //* If new sector or first sector
        if (( change_sector == TRUE ) || ( first == TRUE ))
        {
            //* If not first sector
            if ( first == FALSE )
            {
                //* Flag Erasing
                erase = TRUE ;
            }
            //* Else, if first sector
            else
            {
                //* Dispaly First sector to program
                printf ( "First Sector to program:\t\t%d \n", sector_id ) ;

                //* If the first address to program is within a sector
                if ( addr_load > addr_prg_sector )
                {
                    //* Display Warning : first address within a sector
                    printf ( "The first address to program is within a sector!!\n" ) ;
                    printf ( "First Data of the sector will be lost !!!\n" ) ;
                    //* Flag to erase the sector
                    erase = TRUE ;
                }
                //* Else, if fisrt address equals sector address
                else
                {
                    //* Force erasing
                    erase = TRUE ;
                }
                //* Endif
            }
            //* Endif
        }
        //* Endif

        //* If Erasing flagged
        if ( erase == TRUE )
        {
            //* Erase, if Timeout
            if ( erase_sector ( addr_base,
                                addr_prg_sector,
                                flash->flash_org[block].sector_size,
                                sector_id ) != TRUE )
            {
                //* Return False
                return ( FALSE ) ;
            }
            //* Endif
        }
        //* Endif

        //* If new sector or first sector
        if (( change_sector == TRUE ) || ( first == TRUE ))
        {
            //* Display Programmaing sector
            printf ( "Programming Sector %d\n", sector_id ) ;
        }
        //* Endif

        //* Write the value read in Flash, if error
        if ( write_flash ( addr_base, addr_load, data ) != TRUE )
        {
            //* Return False
            return ( FALSE ) ;
        }
        //* Endif

        //* Increment load address
        addr_load ++ ;

        //* Remove first address to program flag
        first = FALSE ;
    }
    //* EndWhile

    //* Return True
    return ( TRUE ) ;
}
//* End

//*--------------------------------------------------------------------------------------
//* Function Name       : check_flash_from_file
//* Object              : Check the file downloaded in flash
//* Input Parameters    : <image> File
//*                       <flash> Flash descriptor
//*                       <addr_base> base flash address
//*                       <addr_load> address to load
//*
//* Output Parameters   : if data sector erase TRUE or FALSE
//*--------------------------------------------------------------------------------------
int check_flash_from_file ( FILE *image,
                            const FlashDef *flash,
                            flash_word *addr_base,
                            flash_word *addr_load )
//* Begin
{
    flash_word      *pt = addr_load ;
    unsigned short  data ;

    //* Display check in progress
    printf ( "Checking Flash...\n" ) ;

    //* Restart the input file
    fseek ( image, 0, SEEK_SET ) ;

    //* For each word read from the file
    while ( fread ( &data, 1, 2, image ) == 2 )
    {
        //* If data from file is different from data in flash
        if ( *pt++ != data )
        {
            //* Return False
            return ( FALSE ) ;
        }
        //* Endif
    }
    //* EndWhile

    //* Return True
    return ( TRUE ) ;
}
//* End


//*--------------------------------------------------------------------------------------
//* Function Name       : main
//* Object              : Get parameter
//* Input Parameters    : none
//* Output Parameters   : none
//*--------------------------------------------------------------------------------------
int main ( void )
//* Begin
{
    flash_word      *base_addr ;
    flash_word      *load_addr ;
    FILE            *image ;
    const FlashDef  *flash ;
    char str[30];
    char name[256];

    //* Display Flash Downloader Header
    printf ( "\n**** %s Flash Programming Utility ****\n", TARGET_ID ) ;

    printf("\n**** Load address ****\n");
    /* Get load address */
    gets(str);
    sscanf(str,"0x%x",&load_addr);

    printf("\n**** File to download  ****\n");
    /* Get File */
    gets(name);

    //* If Error while opening the external Flash Image file
    if (( image = fopen ( name, "rb" )) == NULL )
    {
        //* Display Error then exit
        printf ( "Error - Cannot open file image \"%s\"\n", name ) ;
        return ( FALSE ) ;
    }
    //* Else
    else
    {
        //* Display input file name
        printf ( "Input file is  :   %s \n", name ) ;
    }

    /* Get load address */
    sscanf ( str, "0x%x", &load_addr) ;
    //* Display Load Address
    printf ( "Load address is:   %x \n", (int)load_addr ) ;

    //* If FLASH Device is not recognised
    if (( flash = flash_identify ( load_addr )) == (const FlashDef *)0 )
    {
        //* Display Error and exit
        printf ( "Error - The Flash device is not recognised\n" ) ;
        return ( FALSE );
    }

    //* Initialize Flash Base Address
    base_addr = (flash_word *) ((int)load_addr & ~(flash->flash_mask)) ;
    //* Display Flash Base Address
    printf ( "Base address is:   %x \n", (int)base_addr ) ;

    //* Init PIO MCKO/P25 as busy ready input signal
    init_flash_ready () ;

    //* If File Download into flash is not OK
    if ( download_file_to_flash ( image, flash, base_addr, load_addr ) != TRUE )
    {
        //* Display Error and exit
        printf ( "Error while programming Flash\n" ) ;
        return ( FALSE ) ;
    }

    //* If programmed flash is not checked
    if ( check_flash_from_file ( image, flash, base_addr, load_addr ) != TRUE )
    {
        //* Display Error and exit
        printf ( "Flash not checked after programming\n" ) ;
        return ( FALSE ) ;
    }

    /* Close the external file and exit the program */
    fclose ( image ) ;

    //* Display Flash written and exit
    printf ( "Flash written and checked\n" ) ;
    return ( TRUE ) ;
}
//* End

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩综合aⅴ视频| 91精品国产高清一区二区三区蜜臀 | 在线观看日韩毛片| 久88久久88久久久| 亚洲高清久久久| 久久久久久久久久看片| 欧美一区二区三区电影| 亚洲同性同志一二三专区| 国产精品国产馆在线真实露脸| 色狠狠综合天天综合综合| 91网上在线视频| 成人午夜电影网站| 成人性生交大合| 日韩你懂的在线观看| 欧美日本不卡视频| 欧美人xxxx| 一区二区视频免费在线观看| 亚洲欧美区自拍先锋| 久草热8精品视频在线观看| 欧美日韩一本到| 欧美一区二区在线观看| 一区二区三区日本| 日本韩国欧美一区二区三区| 国产精品三级久久久久三级| 亚洲精品国产无天堂网2021| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩在线播放一区| 亚洲综合自拍偷拍| 在线观看国产一区二区| 亚洲黄色免费电影| 91福利在线免费观看| 国产精品福利一区| 不卡av在线网| 99精品久久只有精品| 欧美制服丝袜第一页| 亚洲欧洲另类国产综合| 亚洲成a人片在线观看中文| 天天综合网 天天综合色| 国产乱码精品一区二区三| 国产精品自拍毛片| 精品国产青草久久久久福利| 国产精品成人网| kk眼镜猥琐国模调教系列一区二区| 欧美日韩五月天| 婷婷综合另类小说色区| 欧美一区二区网站| 国产一区二区看久久| 色综合久久88色综合天天6| 欧美四级电影网| 精品国产123| 国产美女在线观看一区| 中文字幕精品一区二区精品绿巨人| 一区二区三区日本| 欧美福利视频导航| 中文字幕亚洲一区二区av在线 | 日韩视频一区二区三区| 国产精品久久久久影院色老大| 成人美女视频在线观看18| 亚洲精品国产视频| 日韩一区二区三区视频在线 | 亚洲18色成人| 精品剧情在线观看| 亚洲高清视频在线| 日韩精品在线一区二区| 国产成人免费视频网站| 日韩精品一区二区三区在线播放 | 精品国产一区二区三区忘忧草 | 国产一区二区视频在线| 国产精品久久久久久久久久久免费看| 色综合欧美在线视频区| 美女网站在线免费欧美精品| 93久久精品日日躁夜夜躁欧美| 亚洲精品成a人| 日韩欧美国产系列| 99久久er热在这里只有精品15| 日韩在线卡一卡二| 欧美日韩国产精品自在自线| 国产一区久久久| 亚洲高清免费视频| 国产精品系列在线| 欧美一级免费大片| 色综合久久66| 国产麻豆精品在线观看| 亚洲高清视频在线| 国产精品第四页| 久久久久99精品国产片| 欧美日韩免费一区二区三区| 大陆成人av片| 久久精品国产一区二区| 精品国产欧美一区二区| 欧美日韩色综合| 99精品视频在线观看| 国产精品一区二区久激情瑜伽| 性做久久久久久久久| 18成人在线观看| 久久久久成人黄色影片| 欧美一级片在线观看| 欧美日韩国产一级片| 一本色道久久综合精品竹菊| 成人性生交大片免费看中文| 秋霞电影网一区二区| 精品国产91久久久久久久妲己| 欧美日韩高清一区二区| 色综合久久天天综合网| 播五月开心婷婷综合| 国产一区二区三区美女| 精品一区二区久久| 麻豆精品在线视频| 天天av天天翘天天综合网色鬼国产 | 伊人色综合久久天天人手人婷| 久久天天做天天爱综合色| 成人av集中营| 精品一区二区三区在线播放视频 | 亚洲精品成人精品456| 亚洲精品视频在线看| 亚洲另类春色国产| 综合久久综合久久| 亚洲人成网站在线| 亚洲伦理在线精品| 一区二区三区在线观看视频| 一区二区三区日韩欧美精品| 1区2区3区国产精品| 一区二区三区四区不卡在线 | 亚洲一区二区视频| 日韩一区二区三区电影在线观看| 欧美日韩一二三区| 欧美一二三四区在线| 日韩精品中文字幕一区| 日本一区二区三区四区| 欧美日韩成人在线| 91精品国产综合久久久久久久久久| 国产凹凸在线观看一区二区| 天堂成人国产精品一区| 奇米色一区二区三区四区| 韩国v欧美v日本v亚洲v| 午夜精品福利在线| 免费观看一级欧美片| 国产福利一区二区| 91视频在线观看| 欧美日韩久久久| 久久亚洲一区二区三区明星换脸 | 99久久国产免费看| 欧美猛男男办公室激情| 精品国产露脸精彩对白| 国产精品国产三级国产aⅴ无密码| 亚洲三级理论片| 亚洲福利电影网| 韩国av一区二区三区四区| 99视频国产精品| 欧美精三区欧美精三区| 国产拍揄自揄精品视频麻豆| 亚洲一二三四区| 久久av资源站| 91在线视频免费观看| 91精品国产91久久久久久最新毛片 | 欧美日韩精品综合在线| 久久蜜桃香蕉精品一区二区三区| |精品福利一区二区三区| 日本成人在线看| 亚洲成年人影院| 成人自拍视频在线观看| 69堂成人精品免费视频| 国产精品理论在线观看| 午夜精品久久久| av中文字幕在线不卡| 欧美日韩国产一区二区三区地区| 亚洲国产成人一区二区三区| 亚洲电影第三页| caoporn国产精品| 欧美一区中文字幕| 亚洲色图.com| 成人午夜又粗又硬又大| 欧美一级在线免费| 一区二区三区国产精华| 国产老妇另类xxxxx| 欧美一区二区三区免费观看视频| 亚洲乱码国产乱码精品精的特点 | 欧美性生活影院| 中文av一区二区| 国产精品99久久久久久久vr| 555www色欧美视频| 亚洲一级在线观看| 在线视频综合导航| 亚洲美女免费在线| av一区二区不卡| 中文字幕精品在线不卡| 丰满亚洲少妇av| 精品区一区二区| 免费在线看成人av| 欧美一区二区视频在线观看2022| 亚洲精品国产a久久久久久 | 免费观看一级欧美片| 欧美电影在哪看比较好| 亚洲蜜臀av乱码久久精品蜜桃| 成人免费视频国产在线观看| 久久亚洲二区三区| 国产精品资源在线| 欧美成人精品福利| 精品亚洲成a人| 欧美精品一区二区三区蜜桃视频|