最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

高手請看一下程序,am29lv160dt flash 擦除

作者:woaini 欄目:ARM技術
高手請看一下程序,AM29LV160DT FLASH 擦除
AM29LV160DT FLASH 擦除某一sector時怎么全片都擦除了
這是下面的代碼,請高手看看有沒有寫錯。

void FLASH_erase(P_U16 base_addr){
    
    
    P_U16 TEMP;
    U32 i=35000000;
    
         /*  Issue the Sector Erase command to AM29LV160DT  */

         TEMP  = (P_U16)((0x0000555<<1)+FLASH_ADDRESS);                 *TEMP = 0xAA;                 
         TEMP  = (P_U16)((0x00002AA<<1)+FLASH_ADDRESS);                 *TEMP = 0x55;                
         TEMP  = (P_U16)((0x0000555<<1)+FLASH_ADDRESS);         
          *TEMP = 0x80;                 
         TEMP  = (P_U16)((0x0000555<<1)+FLASH_ADDRESS);
          *TEMP = 0xAA;                
         TEMP  = (P_U16)((0x00002AA<<1)+FLASH_ADDRESS);
          *TEMP = 0x55;                
         TEMP  = base_addr;                     
         *TEMP = 0x30;                 
         while(i--);//Delay
}

2樓: >>參與討論
diablocm
我也用160,讀寫都正常
#define FLASH_CODE1        0x00AA00aa
#define FLASH_CODE2        0x00550055
#define ID_IN_CODE        0x00900090
#define ID_OUT_CODE        0x00F000f0


#define CMD_READ_ARRAY        0x00F0
#define CMD_UNLOCK1            0x00AA
#define CMD_UNLOCK2            0x0055
#define CMD_ERASE_SETUP        0x0080
#define CMD_ERASE_CONFIRM    0x0030
#define CMD_PROGRAM            0x00A0
#define CMD_UNLOCK_BYPASS    0x00200020

#define MEM_FLASH_ADDR1        (*(volatile SHORT *)(0x10000000 + (0x0000555<<1)))
#define MEM_FLASH_ADDR2        (*(volatile SHORT *)(0x10000000 + (0x00002AA<<1)))

#define IDENT_FLASH_ADDR1    (*(volatile int *)(0x10000000 + (0x0000555<<2)))
#define IDENT_FLASH_ADDR2    (*(volatile int *)(0x10000000 + (0x0000AAA<<2)))

#define BIT_ERASE_DONE        0x008

/* start erase operation */
    MEM_FLASH_ADDR1 = CMD_UNLOCK1;
    MEM_FLASH_ADDR2 = CMD_UNLOCK2;
    MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;

    MEM_FLASH_ADDR1 = CMD_UNLOCK1;
    MEM_FLASH_ADDR2 = CMD_UNLOCK2;
    
    addr = (SHORT*)gFlashInfo.sector_base[sector_number]; /* 提供擦除扇區(qū)的基地址 */
    *addr = CMD_ERASE_CONFIRM;
    

    chip1 = 0;
    rt0 = *AT91C_ST_CRTR;
    rt0 = *AT91C_ST_CRTR;    
    
    do
    {
        result = *addr;
        
        rt1 = *AT91C_ST_CRTR;
        rt1 = *AT91C_ST_CRTR;
        if ( rt1 - rt0 > 5 ) // 5秒超時
        {
            MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
            chip1 = -1;
            break;
        }
        
        if (!chip1 && (result & 0xFFFF) & BIT_ERASE_DONE)
        {
            chip1 = 1;
        }
    }
    while (!chip1);
    
    MEM_FLASH_ADDR1 = CMD_READ_ARRAY;

不知道對你有幫助沒有

3樓: >>參與討論
woaini
現(xiàn)在程序可以了,但很怪
發(fā)現(xiàn)一點點怪問題:
我的CPU是LPC2220的,程序就是在AM29LV160DT中運行的,用燒寫工具將程序燒到FLASH中是可以真常運行的,關鍵是我的程序應用過程中要記錄一些數(shù)據(jù)在FLASH中,所以我要擦除FLASH中有某一塊然后寫數(shù)據(jù)進去.因此,我將擦除,寫,程序copy到SRAM中運行,但就是有一個怪問題就是當用jatg口寫完程序用jatg口復位啟動系統(tǒng)時,擦除某一sector時卻全片都擦除了,但是如果我不用jatg口復位而是直接關電源再上電,則一切正常。怪,不明。


參與討論
昵稱:
討論內(nèi)容:
 
 
相關帖子
請問:在arm上移植linux是不是要在linux操作系統(tǒng)下完成?
問一個弱弱的問題
怎么把Linux下的網(wǎng)絡芯片驅(qū)動轉(zhuǎn)為uc/OS-II下的?
ARM編譯時總提示找不到文件?幫忙分析一下是怎么回事?
AXD進行硬件仿真的時候怎么沒有復位按鈕啊?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號