在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            寫MSP430片內(nèi)flash

            作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

            void FlashWW(unsigned int Adr,unsigned int DataW)

            {

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

            FCTL3 = FWKEY;

            FCTL1 = FWKEY + WRT;

            while(FCTL3 & BUSY);

            *((unsigned int *)Adr)=DataW;//數(shù)值強(qiáng)制轉(zhuǎn)換成指針,指向地址數(shù)據(jù)Adr所表示的內(nèi)存單元

            //將數(shù)據(jù)字DataW賦值給內(nèi)存單元

            FCTL1 = FWKEY;

            FCTL3 = FWKEY + LOCK;

            while(FCTL3 & BUSY);

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

            void FlashWrite(uchar *pc_byte,uchar *Datain,uint count)

            {

            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);

            *pc_byte++ = *Datain++;

            }


            FCTL1 = FWKEY;

            FCTL3 = FWKEY + LOCK;

            while(FCTL3 & BUSY);

            }

            注意:在對字寫入和字節(jié)寫入的時(shí)候,用于指向信息區(qū)數(shù)據(jù)指針類型的區(qū)別,字寫入時(shí)候?yàn)?((unsigned int *)Adr),字節(jié)寫入時(shí)候?yàn)?((unsigned char *)Adr)。

            4.3 讀取

            根據(jù)查看的書籍資料和網(wǎng)絡(luò)資料得出,內(nèi)部Flash的讀取操作沒有順序的要求,一般Flash默認(rèn)的操作方式即為讀模式。讀取Flash的程序代碼如下:

            void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)

            {

            while(count--)

            {

            *Dataout = *pc_byte;

            Dataout++;

            pc_byte++;

            }

            }

            在網(wǎng)上查找資料的時(shí)候,好像看到過有位網(wǎng)友的博客說,內(nèi)部Flash的地址是自動加1的,按照他的理解,函數(shù)中pc_byte++語句就沒有用處了,可是事實(shí)不然,我在調(diào)試過程中,發(fā)現(xiàn)并不能自動加1,pc_byte++語句還是有必要的。調(diào)用上述函數(shù),可以通過這樣的方式FlashRead((uchar *)0x1000,a,4);即從0x1080地址處開始,連續(xù)讀取4個(gè)字節(jié)的數(shù)據(jù),送給數(shù)組a。

            5 小結(jié)

            對Msp430 片內(nèi)Flash的操作是通過對3個(gè)控制字中的相應(yīng)位來完成的,只有控制位的正確組合,才能實(shí)現(xiàn)相應(yīng)的功能。

            同時(shí)在編程中注意靈活使用數(shù)組和指針,以及指向數(shù)組的指針等,可以達(dá)到靈活編程的目的,不過本文中給出的幾個(gè)程序段,基本上能夠?qū)崿F(xiàn)對Msp430 Flash的擦除、寫入等操作。這是我最近3天所作的一些努力,整理一下與大家分享。

            本文參考了TI的《MSP430x1xx Family Users Guide》及TI網(wǎng)上提供的關(guān)于Flash操作的實(shí)例代碼,并在網(wǎng)絡(luò)上收集了一些資料,在此不一一列出,不過本文應(yīng)該算本人原創(chuàng),轉(zhuǎn)載請注明。謝謝


            MSP430X14X Flash 讀寫操作總結(jié)

            開發(fā)平臺:IAR Embedded Workbench、MSP430F149開發(fā)板

            作者:譚貝貝

            Flash操作注意事項(xiàng)

            在讀寫的過程中電壓不能小于2.7V否則擦除和讀寫的結(jié)果將不可預(yù)測。Flash的可操作時(shí)鐘頻率為~257KHZ---~476KHZ。如果頻率不符合要求,則結(jié)果不可預(yù)測。

            在擦除先需要關(guān)閉中斷和看門狗,在擦除的過程中如果產(chǎn)生了中斷,則會在重新使能中斷后產(chǎn)生一個(gè)中斷請求。Flash只能從1寫為0,不能從從0寫為1,所以需要擦除。

            可以被擦除的最小模塊是片段,tAll Erase = tMass Erase = 5297/fFTG, tSeg Erase = 4819/fFTG。

            Flash ERASE

            MSP430X14X的擦除模式可以從Flash或者RAM中進(jìn)行。

            從Flash中擦除

            從Flash中擦除的過程中所有的定時(shí)都會被Flash控制,CPU被掛起。擦除完成后需要一個(gè)假寫入CPU才能復(fù)位。從Flash擦除時(shí)有可能把后面CPU需要執(zhí)行的代碼擦除。如果發(fā)生這樣的情況,在擦除后CPU的執(zhí)行狀況將不可預(yù)測。

            Flash中擦除流程圖

            圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html

            從RAM中擦除

            從RAM中擦除時(shí)CPU不會被掛起,可以繼續(xù)執(zhí)行代碼。必須檢測BUSY位以判斷擦除是否結(jié)束,如果在擦除的過程中(即BUSY=1時(shí))訪問Flash,這是一個(gè)違規(guī)的訪問,ACCVIFG會置位,而擦除的結(jié)果也將不可預(yù)測。

            RAM中擦除流程圖

            圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html

            Flash Write

            MSP430X14X有兩種寫入模式,分為段寫入(byte/word write),和塊寫入(Block Write),塊寫入要快得多,但是操作麻煩,在擦除的過程中不能有一個(gè)Flash word(low + high byte),則會發(fā)生損壞。CPU不能在BUSY=1時(shí)訪問Flash,否則ACCFIG將置位寫入將不可預(yù)測。

            1.Byte/Word write

            Byte/Word 寫入可以從Flash或者RAM初始化,當(dāng)從Flash中初始化時(shí),所有的定時(shí)都會被Flash控制,CPU被掛起。寫完后CPU將繼續(xù)執(zhí)行后面的代碼。

            當(dāng)從RAM中初始化時(shí),BUSY必須在CPU訪問Flash前置0.否則ACCFIG將被置位,寫入的結(jié)果將不可預(yù)測。

            在Byte/Word 寫模式下寫入總時(shí)間不能超過4ms,如果超過了,當(dāng)再想這塊任何地址寫入數(shù)據(jù)時(shí)必須先擦除。

            Byte/Word 寫入流程圖

            從RAM中執(zhí)行Byte/Word 寫入

            塊寫入

            塊寫入時(shí)沒一小塊不能超過t_cpt=4ms,塊寫入只能從RAM中進(jìn)行,在塊寫入的過程中WAIT位要置0,當(dāng)想Flash中寫入數(shù)據(jù)時(shí),需要先檢查WAIT位是否為1.當(dāng)前塊寫完后BLKWRT要清0.

            流程圖

            圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html

            在擦除或者寫入的過程中訪問Flash,見下表

            Flash的寄存器

            FCTL1,選擇擦除和寫入模式的寄存器

            FRKEY/FWKEY 高八位為密碼讀的密碼為96h,寫的密碼為A5h。

            BLKWRT 塊寫入模式選擇位,可以自動被EMEX置位

            WRT 字寫入模式選擇位,可任意自動被EMEX置位

            MERASE和ERASE,擦除模式選擇位

            FCTL2時(shí)鐘選擇寄存器

            FWKEYx密碼位

            FSSELx時(shí)鐘選擇位

            FNx分頻比 分頻值等于FN+1

            兩個(gè)例子

            #include

            #include "BoardConfig.h"

            void Write_A(uchar value);

            void Copy_A2B(void);

            void main( void )

            {

            // Stop watchdog timer to prevent time out reset

            WDTCTL = WDTPW + WDTHOLD;

            BoardConfig(0xb8);

            FCTL2 = FWKEY + FSSEL0 + FN0; //Select source

            uchar value = 0;

            for(;;)

            {

            Write_A(value++); //Write data to segment A

            Copy_A2B(); //Copy data from segment A to segment B

            _NOP();

            }

            }

            void Write_A(uchar value)

            {

            uchar i;

            uchar *Flash_ptr;

            Flash_ptr = (uchar *)0x1080;

            FCTL1 = FWKEY + ERASE; //Set ERASE mode

            FCTL3 = FWKEY; //Clear LOCK

            *Flash_ptr = 0; //Dummy write

            FCTL1 = FWKEY + WRT;

            for(i = 0;i < 128;i++)

            {

            *Flash_ptr++ = value; //Write value

            }

            FCTL1 = FWKEY; //Clear WRT

            FCTL3 = FWKEY + LOCK; //Set LOCK

            }

            //Copy data from B to A

            void Copy_A2B(void)

            {

            uchar *Flash_ptrA;

            uchar *Flash_ptrB;

            uint i;

            Flash_ptrA = (uchar *)0X1080;

            Flash_ptrB = (uchar *)0x1000;

            FCTL1 = FWKEY + ERASE;

            FCTL3 = FWKEY;

            *Flash_ptrB = 0;

            FCTL1 = FWKEY + WRT;

            for(i = 0;i < 128;i++)

            {

            *Flash_ptrB++ = *Flash_ptrA++;

            }

            FCTL1 = FWKEY;

            FCTL3 = FWKEY + LOCK;

            }



            關(guān)鍵詞: MSP430片內(nèi)flas

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉