在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 寫MSP430片內(nèi)flash

            寫MSP430片內(nèi)flash

            作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
            //******************************************************************************

            // 參數(shù): adr 為地址 , 范圍 0x1000~0xFFFF
            void FlashRead(long adr,uint8 *bBuf,uint8 bLen)
            {
            while (bLen--)
            *bBuf++=*(uint8 *)adr++;
            return;
            }

            本文引用地址:http://www.biyoush.com/article/201611/321246.htm


            // 寫入地址 adr 寫入數(shù)據(jù):*pc_byte

            void FlashWrite(long adr,uchar *Datain,uint len)
            {

            //FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK 16*FN4 + 8*FN3
            FCTL3 = FWKEY;
            FCTL1 = FWKEY + WRT;

            while(FCTL3 & BUSY); //如果處于忙狀態(tài),則等待
            while(count--)
            {

            while(FCTL3 & BUSY);
            *(uchar*)adr++ = *Datain++;
            }
            FCTL1 = FWKEY;
            FCTL3 = FWKEY + LOCK;
            while(FCTL3 & BUSY);
            }

            EraseSectorFlash 過程



            void EraseSectorFlash(unsigned int adr)
            {

            _DINT();
            uchar *p0;
            //FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//選擇時鐘源,分頻
            FCTL3 = FWKEY;//清除LOCK
            while(FCTL3 & BUSY);//如果出于忙,則等待
            FCTL1 = FWKEY + ERASE;//使能段操作 每段512字節(jié)
            p0 = (unsigned char *)adr;//數(shù)值強制轉換成指針
            *p0 = 0; //向段內(nèi)任意地址寫0,即空寫入,啟動擦除操作
            FCTL1 = FWKEY;
            FCTL3 = FWKEY + LOCK;
            while(FCTL3 & BUSY);
            _EINT(); //開總中斷
            }

            查看空閑的FLASH 地址,避免擦除代碼所在的地址。每次擦除均是一段一段的擦除,每段512字節(jié)。

            找不到datasheet,不知道段的起止地址的,可以打開memory ,在內(nèi)存窗口,用代碼嘗試隨便寫入一個任意地址,看哪些地方被改寫成0xFF 就知道段的起止,如:

            我們在0x15000寫入(EraseSectorFlash(0x15000);),那里原本有非0xFF數(shù)據(jù),好辨認(是FF的可以先寫再擦)??吹蕉蔚钠鹬故?5000-151ff 剛好是512 。

            0x15000+0x200->0x15200 所以下一段的起始地址是 0x15200 以此類推。

            驗證代碼:

            EraseSectorFlash(0x2A000);
            EraseSectorFlash(0x2A200);
            EraseSectorFlash(0x2A400);
            EraseSectorFlash(0x2A600);

            FlashWrite(0x2A000,origin_protect_data,512);
            memset(origin_protect_data,0xCB,900);
            FlashWrite(0x2A200,origin_protect_data,512);
            memset(origin_protect_data,0xCA,900);
            FlashWrite(0x2A400,origin_protect_data,512);
            memset(origin_protect_data,0xC9,900);
            FlashWrite(0x2A600,origin_protect_data,512);


            編譯地址分配:
            在IAR窗口中,點擊view》memory ,在內(nèi)存窗口,點下拉框選擇 SER 可知,SFR地址為 0x0000-0fff
            RAM地址為:0x1c00-5bff
            FLASH地址:0x5c00-45bff
            結合看下面的地址分配圖,即可知道各部分代碼和數(shù)據(jù)被分配到什么地方。
            ****************************************
            * *
            * SEGMENTS IN ADDRESS ORDER *
            * *
            ****************************************

            SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
            ======= ===== ============= =========== ==== ==== =====
            DATA16_AN 0102 - 0103 2 rel 0
            0120 - 0121 2
            0140 - 0141 2
            0144 - 0145 2
            015C - 015D 2
            0168 - 016F 8
            020A - 020B 2
            0222 - 0225 4
            0228 - 0229 2
            0242 - 0245 4
            024A - 024B 2
            026A - 026B 2
            0282 - 0285 4
            028A - 028B 2
            02A2 - 02A5 4
            02A8 - 02A9 2
            0340 - 0341 2
            0350 - 0351 2
            0380 - 0387 8
            0392 - 0397 6
            03AE - 03AF 2
            03C0 - 03C3 4
            03D2 - 03D3 2
            0640 - 0641 2
            0646 - 0648 3
            064C - 064C 1
            064E - 064E 1
            065C - 065D 2
            DATA20_I 1C00 - 1E26 227 rel 1
            DATA20_Z 1E28 - 28B7 A90 rel 1
            CSTACK 5400 - 5BFF 800 rel 1
            //-------------------------------------以下為編譯到FLASH的代碼---------------------------
            CSTART 5C00 - 5C2F 30 rel 1
            ISR_CODE 5C30 - 5E63 234 rel 1
            1 5E64 - D123 72C0 rel 1
            INTVEC FF80 - FFF9 7A com 1
            RESET FFFE - FFFF 2 rel 1
            DATA20_C 00010000 - 00019486 9487 rel 1
            DATA20_ID 00019488 - 000196AE 227 rel 1
            ****************************************
            * *
            * END OF CROSS REFERENCE *
            * *
            ****************************************
            30 112 bytes of CODE memory
            5 303 bytes of DATA memory (+ 81 absolute )
            38 574 bytes of CONST memory
            Errors: none
            Warnings: none
            官方資料:http://pan.baidu.com/share/link?shareid=249328&uk=3523275049

            1 Msp430Flash型單片機內(nèi)部Flash存儲器介紹


            MSP430的Flash存儲器是可位、字節(jié)、字尋址和編程的存儲器。該模塊由一個集成控制器來控制編程和擦除的操作??刂破靼ㄈ齻€寄存器,一個時序發(fā)生器及一個提供編程、擦除電壓的電壓發(fā)生器。


            Msp430的Flash存儲器的特點有:


            1) 產(chǎn)生內(nèi)部編程電壓


            2) 可位、字節(jié)、字編程,可以單個操作,也可以連續(xù)多個操作


            3) 超低功耗操作


            4) 支持段擦除和多段模塊擦除


            2 Flash存儲器的分割


            Msp430 Flash存儲器分成多個段。可對其進行單個字節(jié)、字的寫入,也可以進行連續(xù)多個字、字節(jié)的寫入操作,但是最小的擦除單位是段。


            上一頁 1 2 3 4 下一頁

            評論


            技術專區(qū)

            關閉