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

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

?? amd parallel flash programmer.asm

?? ADI 公司的DSP ADSP21262 EZ-KIT LITE開發板的全部源代碼
?? ASM
字號:
//**********************************************************************************************************************************
//**********************************************************************************************************************************
//"AMD Parallel Flash Programmer.asm"  RJM 9/2003 DSP Applications Engineering
//This program is intended for the AMD 8-bit 1M parallel flash
//found on the ADSP-21262 Ez-Kit.

//The subroutines will:
//  -FLASH_FILE_SIZE:   -check to see that the buffer 'my_file' is not too large to fit in the 1Mx8 flash
//  -FLASH_RESET:       -issue the flash reset command
//  -ERASE_FLASH_CHIP;  -erase the entire flash and wait until the erase command is completed
//  -SECTOR_ERASE:      -calculate the number of sector needed to hold the data and erase accordingly (and verify erasure)
//  -PROGRAM_FLASH:     -program the flash with the data/code in my_file and check for write cmd completion after each byte
//  -VERIFY_FLASH:      -verify the contents of the flash with the values in 'my_file',
//

//This example is intended to provide a starting point to be tailored to fit specific needs.
//The VERIFY_FLASH routine can be omitted and you can use either SECTOR_ERASE or ERASE_FLASH_CHIP

//To program boot loader code into the flash, use the Loader in VisualDSP++ 3.0 and generate a .ldr file with the following options:
//      -Width: 16
//      -Boot Type: Parallel Port (prom)
//      -Format:    Include
//**********************************************************************************************************************************
//**********************************************************************************************************************************

#include <def21262.h>

#define FLASH_START_ADDRESS 0x01000000
#define FLASH_SIZE 0x100000
#define LED_ADDRESS 0x01400000
#define SECTOR_SIZE 65536
#define NUMBER_SECTORS (LENGTH(my_file)*BYTES >>16) +1
//i.e. if length of file in bytes is 0x1ffff, 1 sector= 0xffff, shift by 16 gives us 1+1 etc.
#define BYTES 2 //i.e. 4 * 8bits = 32 bit logical data width
                //     2 * 8bits = 16 bit logical data width
                //     1 * 8bits =  8 bit logical data width
.global _main;

.section/dm seg_dmda;
.var LED_value;
.var External_Byte_Address;
.var External_Sector_Address[]=0;
.var Data_Byte;
.var Word_To_Write[2];
.var Word_Read_In[2];

.section/dm seg_dm16;                   //short-word address space
.var my_file[] = "input.ldr";           //16-bit loader file

.var read_back;                         //buffer to read the programmed data to

.section/pm seg_pmco;
_main:

    nop;
    bit set mode1  IRPTEN; nop;         //Global Interrupt Enable
    bit set LIRPTL PPIMSK; nop;         //The Parallel Port interrupt is the only one used
    nop;nop;nop;

//Status Lights
        r4=1; call WRITE_TO_LEDS;       //LED1 lit at start
    call SETUP;
        r4=3; call WRITE_TO_LEDS;       //LED2 lit after erase command
    call PROGRAM_FLASH;
        r4=0x7; call WRITE_TO_LEDS;     //LED4 lit after flash programmed
    call VERIFY_FLASH;
        r4=0xf; call WRITE_TO_LEDS;    //LED5 lit after verified successfully

      jump DONE;

SETUP:
    call FLASH_FILE_SIZE;   //be sure the data will fit in the flash
    call FLASH_RESET;       //issue the flash reset command
    //call ERASE_FLASH_CHIP;  //erases entire flash
    call SECTOR_ERASE;      //erases proper # of sectors and verifies erasure
    rts;


ERASE_FLASH_CHIP:
    r0 = 0x55aa0000; nop;           //this is the CHIP ERASE Command for the AMD 29LV081B
    dm(Word_To_Write) = r0; nop;
    r0 = 0x1055aa80; nop;
    dm(Word_To_Write+1) = r0; nop;

// init DMA reg's
    r0 = Word_To_Write;                 dm(IIPP)=r0;    nop;
    r0=1;                               dm(IMPP)=r0;    nop;
    r0=4;                               dm(ICPP)=r0;    nop;

    r0 = FLASH_START_ADDRESS;           dm(EIPP)=r0;    nop;
    r0=0;                               dm(EMPP)=r0;    nop;
    r0=8;                               dm(ECPP)=r0;    nop;


    ustat1=     PPTRAN| // transmit
                PPBHC|  // bus hold cycle
                PPDUR20;// data cycle duration of 20 core clock cycles

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;

// wait for DMA to complete
    idle;

    r0=0;
    dm(PPCTL)=r0; nop;

    r0 = FLASH_START_ADDRESS;
    dm(External_Byte_Address) = r0;

    call FLASH_ERASED;  //check if sector is erased
    nop;
    rts;

SECTOR_ERASE:

    r1=65536-1;//Calculate second to last address of sector
    r2=FLASH_START_ADDRESS;
    r2=r2+r1;                         //create address within 1st sector
    dm(External_Sector_Address) = r2; //first sector address

   r0=NUMBER_SECTORS;               //this loop erases and verifies one sector per iteration
   lcntr=r0, do sectors until lce;

    r0 = 0x55aa0000; nop;           //this is the SECTOR ERASE Command for the AMD 29LV081B
    dm(Word_To_Write) = r0; nop;
    r0 = 0x3055aa80; nop;
    dm(Word_To_Write+1) = r0; nop;

// init DMA reg's
    r0 = Word_To_Write;                 dm(IIPP)=r0;    nop;
    r0=1;                               dm(IMPP)=r0;    nop;
    r0=4;                               dm(ICPP)=r0;    nop;

    r0 =dm(External_Sector_Address);    dm(EIPP)=r0;    nop; //address of the sector we wish to erase this iteration
    r0=0;                               dm(EMPP)=r0;    nop;
    r0=8;                               dm(ECPP)=r0;    nop;


    ustat1=     PPTRAN| // transmit
                PPBHC|  // bus hold cycle
                PPDUR20;// data cycle duration of 20 core clock cycles

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;

// wait for DMA to complete
    idle;

    r0=0;
    dm(PPCTL)=r0; nop;

    nop;nop;
    call FLASH_ERASED;  //check if sector is erased

    r1 = 65536;
    r0 = dm(External_Sector_Address);
    r0=r0+r1;           //add for next sector
    dm(External_Sector_Address) = r0;

    sectors:nop;


    nop;
    nop;
    rts;

FLASH_ERASED:

    r2 = 0;
    r0 = dm(External_Sector_Address);
    dm(External_Byte_Address)=r0;

    call READ_FLASH_WORD;           //Check that the data in the flash = 0xFF
    r0 = dm(Word_Read_In); nop;     //This indicates the flash is erased, but you wait until the
    r1 = 0xFFFFFFFF;                //data has stopped toggling so that you know you are reading a flash
    r1 = r0 - r1;                   //location, not the flash's status register
    if ne jump FLASH_ERASED;
    nop;
    rts;

PROGRAM_FLASH:

    r0 = FLASH_START_ADDRESS;
    dm(External_Byte_Address) = r0;

    i0=my_file;
    m0=1;

    lcntr=@my_file, do PROGRAM_FLASH_LOOP until lce; //each loop iteration writes two 8-bit flash locations
            r6 = dm(i0,m0);         //data is 16 bits wide in 'my_file'
            dm(Data_Byte) = r6;
            call WRITE_FLASH_BYTE ; //write 8 bits of the data
            r0 = dm(External_Byte_Address);
            r0 = r0 + 1;
            dm(External_Byte_Address) = r0; //update flash address for DMA in WRITE_FLASH_BYTE

            r6 = lshift r6 by -8;   //get the other 8 bits
            dm(Data_Byte) = r6;
            call WRITE_FLASH_BYTE ; //write the other 8 bits of the word
            r0 = dm(External_Byte_Address);
            r0 = r0 +1;
            dm(External_Byte_Address) = r0; //update flash address for DMA in WRITE_FLASH_BYTE
            nop;
    PROGRAM_FLASH_LOOP:
        nop;
        nop;

rts;


VERIFY_FLASH:
    r0=FLASH_START_ADDRESS-1;
    dm(External_Byte_Address)=r0;
    i0=my_file;
    m0=1;l0=0;
    i1=read_back;
    m1=1;l1=0;
    lcntr=@my_file; do VERIFY until lce;
        r0=dm(External_Byte_Address);
        r0=r0+1;
        dm(External_Byte_Address)=r0;

        //fetch two bytes from flash
        call READ_FLASH_WORD;
        r0=dm(Word_Read_In);
        r1=fext R0 BY 0:8;

        //increment address
        r0=dm(External_Byte_Address);
        r0=r0+1;
        dm(External_Byte_Address)=r0;

        call READ_FLASH_WORD;
        r0=dm(Word_Read_In);
        r2=fext r0 BY 0:8;


        //two bytes from source
        r4 = dm(i0,m0);
        r8 = fext R4 by 0:8;
        r12= fext R4 by 8:8;

        //compare
        r8=r8-r1;
        if ne jump TEST_FAIL;

        r12=r12-r2;
        if ne jump TEST_FAIL;

        r2= lshift r2 by 8; //move 8 bits over
        r1=r1+r2;           //combine 2 bytes to make 16-bit data
        dm(i1,m1)=r1;


        //don't branch in last 3 instr of loop:
        nop;
        nop;
VERIFY: nop;
        rts;


WRITE_FLASH_BYTE:
// init DMA reg's

    r0=0;
    dm(PPCTL)=r0;

    r0 = 0x00000000; nop;               //These several lines of code take the 8-bit data and combine it with
    dm(Word_To_Write) = r0; nop;        //the PROGRAM command word for the AMD flash, resulting in a 32-bit word to be issued to the flash
    r3 = dm(Data_Byte); nop;            //using parallel port DMA
    r3 = lshift r3 by 24; nop;
    r0 = 0x00a055aa; nop;
    r3 = r3 + r0; nop;
    dm(Word_To_Write +1) = r3; nop;

    r0 = Word_To_Write;             dm(IIPP)=r0;    nop;
    r0=1;                               dm(IMPP)=r0;    nop;
    r0=4;                               dm(ICPP)=r0;    nop;

    r0 = dm(External_Byte_Address);     dm(EIPP)=r0;    nop;
    r0=0;                               dm(EMPP)=r0;    nop;
    r0=8;                               dm(ECPP)=r0;    nop;

    ustat1=     PPTRAN| // transmit
                PPBHC|  // bus hold cycle
                PPDUR20;

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;

// wait for DMA to complete
    idle;
    nop;
    call POLL_FLASH;                    //After issuing the program command and the data to be written, we cannot move on until
    nop;                                //the program command is completed by the flash. When data read back does not toggle
    r0=0;                               //in 2 consecutive reads,the program command has completed successfully
    dm(PPCTL)=r0;
    rts;

READ_FLASH_WORD:
// init DMA reg's
    r0=Word_Read_In;    dm(IIPP)=r0;    nop;
    r0=1;           dm(IMPP)=r0;    nop;
    r0=1;           dm(ICPP)=r0;    nop;

    r0=dm(External_Byte_Address);   dm(EIPP)=r0;    nop;
    r0=0;                           dm(EMPP)=r0;    nop;
    r0=4;                           dm(ECPP)=r0;    nop;

    ustat1=         PPBHC|  // bus hold cycle
                    PPDUR20;

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;


//wait for rx DMA to complete
    idle;

    r0=0;
    dm(PPCTL)=r0;
    nop;
    nop;
    nop;
    nop;

    rts;


FLASH_FILE_SIZE:
    r5 = length(my_file)*BYTES;             // read the # of bytes to program
    r6 = 1024000;                       // size of flash is 1Mx8
    comp (r5, r6);
    if ge jump TEST_FAIL;               // verify file will fit in flash
    rts;



FLASH_RESET:

    r0= 0xF0;//Command for RESET of FLASH
    dm(Word_To_Write+1)=r0;

    r0=Word_To_Write;                   dm(IIPP)=r0;    nop;
    r0=1;                               dm(IMPP)=r0;    nop;
    r0=2;                               dm(ICPP)=r0;    nop;

    r0 = dm(External_Byte_Address);     dm(EIPP)=r0;    nop;
    r0=0;                               dm(EMPP)=r0;    nop;
    r0=8;                               dm(ECPP)=r0;    nop;

    ustat1=     PPTRAN| // transmit
                PPBHC|  // bus hold cycle
                PPDUR20;

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;

// wait for DMA to complete
    idle;
    nop;
    r0=0;
    dm(PPCTL)=r0;
    rts;


POLL_FLASH:                         //After issuing the program command and the data to be written, we cannot move on until
    r1 = 0;                         //the program command is completed by the flash. When data read back does not toggle
    r2 = 0;                         //in 2 consecutive reads,the program command has completed successfully
    call READ_FLASH_WORD;
    r0 = dm(Word_Read_In); nop;
    r1 = fext R0 BY 0:8;
    r2 = fext R0 BY 8:8;
    r1 = r1 - R2;
    if ne jump POLL_FLASH;
    nop;
    rts;

WRITE_TO_LEDS:                      //The 8 user LEDs on the ADSP-21262 EZ-Kit are mapped to flag
                                    //pins as well as the parallel port AD0-7 pins, so we can use a dma to write the latch to light the LEDs
// new LED value passed in via R4
    dm(LED_value)=r4;

    // init DMA reg's
    r0=LED_value;   dm(IIPP)=r0;    nop;
    r0=1;           dm(IMPP)=r0;    nop;
    r0=1;           dm(ICPP)=r0;    nop;
    r0=1;           dm(EMPP)=r0;    nop;

    r0=0x01400000;  dm(EIPP)=r0;    nop;
    r0=1;           dm(ECPP)=r0;    nop;
    ustat1=     PPTRAN| // transmit
                PPBHC|  // bus hold cycle
                PPDUR20; // 10 waitstates

    dm(PPCTL)=ustat1; nop;

// initiate DMA
    bit set ustat1 PPDEN|PPEN;
    dm(PPCTL)=ustat1; nop;

// wait for DMA to complete
    idle;

    r0=0;
    dm(PPCTL)=r0;

rts;

DONE:

    r0 = 0x00FF0000;
    dm(LED_value)=r0;

    lcntr=20; do DONE_LOOP until lce; nop;

    r4=dm(LED_value);
    r4 = rot r4 by 16;
    dm(LED_value)=r4;

    Call WRITE_TO_LEDS;

    lcntr=2250000; do Wait_Loop until lce; nop;
             nop;
             nop;
             nop;
        Wait_Loop:
    nop;
    nop;
    nop;


DONE_LOOP:
    nop;
    END:
    nop;
    jump END;


TEST_FAIL:
    nop;
    jump TEST_FAIL;
_main.end:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨国产丨九色丨pron| 色偷偷成人一区二区三区91| 91免费国产视频网站| 欧美成va人片在线观看| 亚洲美女精品一区| 99久久免费精品高清特色大片| 欧美大片一区二区| 亚洲精品成人悠悠色影视| 成人app软件下载大全免费| 国产精品久久久久久久久免费丝袜 | 91电影在线观看| 国产精品美女久久久久久久久久久| 精品一区二区av| 欧美va在线播放| 国产成人高清视频| 在线免费不卡视频| 亚洲一二三区在线观看| 国产精品久久久久久户外露出 | 成人福利电影精品一区二区在线观看| 成人av网在线| 91精品国产色综合久久不卡蜜臀 | 亚洲123区在线观看| 亚洲欧洲一区二区三区| 一区二区免费在线播放| 91麻豆精品国产| 高潮精品一区videoshd| 日韩精品一二三| 中文字幕亚洲精品在线观看| 欧美一二三在线| 91福利视频在线| 成人av电影在线| 国产福利一区二区三区视频| 亚洲尤物在线视频观看| 亚洲人成精品久久久久久| 这里只有精品电影| 在线观看精品一区| 日本韩国精品在线| 欧美羞羞免费网站| 欧美精品色综合| 日韩免费高清av| 欧美变态tickle挠乳网站| 日韩一级在线观看| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美中文字幕制服| 日韩美女视频一区二区在线观看| 欧美裸体一区二区三区| 精品日韩99亚洲| 久久久久99精品一区| 国产精品每日更新在线播放网址| 日韩美女久久久| 丝袜美腿高跟呻吟高潮一区| 免费久久精品视频| 97久久精品人人爽人人爽蜜臀| 91丨porny丨在线| 欧美午夜精品久久久久久超碰| 91精品国产91久久久久久最新毛片| 精品国产欧美一区二区| 国产精品久久久久久久岛一牛影视| 亚洲猫色日本管| 香蕉乱码成人久久天堂爱免费| 激情综合色综合久久| 欧美性受xxxx| 国产人伦精品一区二区| 免费欧美高清视频| 欧美天天综合网| 欧美国产亚洲另类动漫| 免费成人av在线| 欧美亚洲动漫制服丝袜| 国产蜜臀97一区二区三区| 美女一区二区视频| 7777精品伊人久久久大香线蕉的 | 久久久五月婷婷| 日韩精品一区第一页| 色天天综合久久久久综合片| 日韩欧美www| 精品在线免费视频| 欧美肥大bbwbbw高潮| 亚洲va欧美va天堂v国产综合| 天天综合日日夜夜精品| 欧美日韩国产色站一区二区三区| 国产精品伦理一区二区| 国产精品综合久久| 国产午夜精品美女毛片视频| 激情久久五月天| 久久伊人中文字幕| 福利一区二区在线| 国产精品毛片高清在线完整版| 国产xxx精品视频大全| 国产精品色在线| 精品视频免费看| 精品一区二区日韩| 国产精品久久久久影院亚瑟 | 一区二区三区在线观看网站| 一本久久a久久免费精品不卡| 亚洲精品欧美二区三区中文字幕| 色婷婷久久久久swag精品| 欧美a级理论片| 中文字幕中文字幕中文字幕亚洲无线| 色综合久久中文综合久久97| 免费在线观看精品| 最好看的中文字幕久久| 日韩欧美成人激情| 成人午夜在线免费| 久久电影网电视剧免费观看| 国产精品久久久久久亚洲伦| 欧美精品自拍偷拍| 成人听书哪个软件好| 久草热8精品视频在线观看| 久久综合九色综合久久久精品综合 | 高清免费成人av| 夜色激情一区二区| 国产精品三级电影| 欧美一区二区视频在线观看| 91在线免费播放| 久久精品国产色蜜蜜麻豆| 亚洲人成小说网站色在线| 久久久精品免费免费| 精品免费国产一区二区三区四区| 91福利在线看| 一本一道久久a久久精品综合蜜臀| 国产麻豆精品在线观看| 国产乱人伦偷精品视频不卡| 国产美女久久久久| 成人av免费观看| 91视频在线观看| 欧美精品一级二级| 91精品国产麻豆国产自产在线 | 国产成人自拍网| 国产99精品国产| 在线精品视频免费播放| 欧美日韩免费在线视频| 欧美日韩电影在线播放| 亚洲国产精品一区二区www| 欧美精品v国产精品v日韩精品 | 亚洲曰韩产成在线| 亚洲午夜电影网| 久久精工是国产品牌吗| 国产精品主播直播| 色综合激情五月| 在线播放欧美女士性生活| 欧美成人r级一区二区三区| 国产精品丝袜在线| 日韩国产欧美在线播放| 国内精品伊人久久久久av影院 | 精品系列免费在线观看| 国产成人免费在线观看不卡| 欧美日韩一区在线| 国产精品久久久久久久久久久免费看| 亚洲一区二区三区四区在线免费观看| 麻豆极品一区二区三区| 91在线免费播放| 久久嫩草精品久久久精品一| 亚洲国产一区在线观看| 色婷婷综合久色| 国产欧美一区视频| 国产乱子轮精品视频| 欧美猛男男办公室激情| 亚洲一二三专区| 91亚洲国产成人精品一区二三| 26uuu精品一区二区在线观看| 亚洲日韩欧美一区二区在线| 国产精品中文字幕欧美| 欧美成va人片在线观看| 精品在线免费观看| 久久久综合网站| 国产精品1区2区3区| 久久久久亚洲综合| 国产91在线|亚洲| 亚洲欧洲日韩综合一区二区| 国产黄色成人av| 亚洲免费观看高清完整版在线| 成人黄色大片在线观看| 国产精品国产三级国产三级人妇| 岛国精品一区二区| 伊人夜夜躁av伊人久久| 日韩精品影音先锋| 国产一区二区女| 亚洲精品欧美专区| 91精品欧美福利在线观看| 国产福利一区二区三区视频| 综合久久久久久久| 日韩欧美区一区二| 色综合欧美在线视频区| 美女在线一区二区| 18欧美亚洲精品| 欧美丝袜丝交足nylons| 国产一区二区免费看| 亚洲综合丝袜美腿| 久久夜色精品国产噜噜av| 欧美系列亚洲系列| 韩国成人在线视频| 麻豆国产精品一区二区三区| 亚洲男人的天堂在线aⅴ视频| 日韩精品专区在线| 欧美男男青年gay1069videost| 92国产精品观看| 国产成人精品亚洲777人妖| 日韩成人一级大片| 亚洲电影视频在线| 亚洲最新视频在线观看|