Msp430單片機內(nèi)部Flash存儲器的特點及功能解析_第1頁
Msp430單片機內(nèi)部Flash存儲器的特點及功能解析_第2頁
Msp430單片機內(nèi)部Flash存儲器的特點及功能解析_第3頁
Msp430單片機內(nèi)部Flash存儲器的特點及功能解析_第4頁
Msp430單片機內(nèi)部Flash存儲器的特點及功能解析_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Msp430單片機內(nèi)部Flash存儲器的特點及功能解析1Msp430Flash型單片機內(nèi)部Flash存儲器介紹MSP430的Flash存儲器是可位、字節(jié)、字尋址和編程的存儲器。該模塊由一個集成控制器來控制編程和擦除的操作??刂破靼ㄈ齻€寄存器,一個時序發(fā)生器及一個提供編程、擦除電壓的電壓發(fā)生器。Msp430的Flash存儲器的特點有:1)產(chǎn)生內(nèi)部編程電壓2)可位、字節(jié)、字編程,可以單個操作,也可以連續(xù)多個操作3)超低功耗操作4)支持段擦除和多段模塊擦除2Flash存儲器的分割Msp430Flash存儲器分成多個段??蓪ζ溥M行單個字節(jié)、字的寫入,也可以進行連續(xù)多個字、字節(jié)的寫入操作,但是最小的擦除單位是段。Flash存儲器被分割成兩部分:主存儲器和信息存儲器,兩者在操作上沒有什么區(qū)別。兩部分的區(qū)別在于段的大小和物理地址的不同。以Msp430F149為例,信息存儲器有兩個128字節(jié)的段,即segmentA和segmentB,主存儲器有多個512字節(jié)的段。Msp430F149內(nèi)部Flash的地址為0x1000H~0xFFFFH,計60K。信息段SegA的起始地址為0x1080H,信息段SegB的起始地址為0x1000H。3Flash存儲器的操作在默認狀態(tài)下,處于讀操作模式。在讀操作模式中,F(xiàn)lash存儲器不能被擦除和寫入,時序發(fā)生器和電壓發(fā)生被關(guān)閉,存儲器操作指向ROM區(qū)。Msp430Flash存儲器在系統(tǒng)編程ISP(in-systemprogrammable)不需要額外的外部電壓。CPU能夠?qū)lash直接編程。Flash存儲器的寫入/擦除通過BLKWRT、WRT、MERAS、ERASE等位確定。3.1擦除Flash存儲器各位的缺省值為1,每一位都可以單獨編程為0,但只有擦除操作才能將其恢復(fù)為1。擦除操作的最小單位是段。通過erase和meras位設(shè)置可選擇3種擦除模式。MERASERASE擦除模式01段擦除10多段擦除(所有主存儲器的段)11整體擦除(LOCKA=0時,擦除所有主存儲器和信息存儲器的段;主存儲器的段只有當(dāng)LOCKA=0時可以擦除)擦除操作開始于對擦除的地址范圍內(nèi)的任意位置執(zhí)行一次空寫入??諏懭氲哪康氖菃訒r序發(fā)生器和擦除操作。在空寫入操作之后,BUSY位自動置位,并保持到擦除周期結(jié)束。BUSY、MERAS、ERASE在擦除周期結(jié)束后自動復(fù)位。3.2寫入寫入模式由WRT和BLKWRT位進行設(shè)置。BLKWRT(塊寫入模式選擇)WRT(寫模式選擇位)寫入模式01單字節(jié)、單字寫入11塊寫入所有的寫入模式使用一系列特有的寫入命令,采用塊寫入的速度大約是單個寫入的2倍,因為電壓發(fā)生器在塊寫入完成器件均能保持。對于這兩種寫入模式,任何能修改目的操作數(shù)的指令均能用于修改地址。一個Flash字不能再擦除器件進行兩次以上的寫入。當(dāng)啟動寫入操作時,BUSY置位,寫入結(jié)束時復(fù)位。4操作編程4.1Flash擦除對Flash要寫入數(shù)據(jù),必須先擦除相應(yīng)的段,且對Flash存儲器的擦除必須是整段進行的,可以一段一段擦,也可以多段一起擦除。擦除操作的順序如下:1)選擇適當(dāng)?shù)臅r鐘源和分頻因子;2)清除LOCK位3)判斷BUSY位,只有當(dāng)BUSY=0時才可以執(zhí)行下一步4)使能段操作,設(shè)置ERASE、MERAS位等(如果是擦除一段,則ERASE=1,如果擦除多段,則MERAS=1,如果擦除整個Flash,則ERASE=1,MERAS=1)5)對擦除的地址范圍內(nèi)的任意位置作一次空寫入,以啟動擦除操作6)在擦除周期內(nèi),時鐘源始終有效,不修改分頻因子7)操作完成后,置位LOCK根據(jù)上述操作順序,編寫程序代碼如下:voidFlashErase(unsignedintadr){uchar*p0;FCTL2=FWKEY+FSSEL_1+FN3+FN4;//選擇時鐘源,分頻FCTL3=FWKEY;//清除LOCKwhile(FCTL3&BUSY);//如果出于忙,則等待FCTL1=FWKEY+ERASE;//使能段操作p0=(unsignedchar*)adr;//數(shù)值強制轉(zhuǎn)換成指針*p0=0;//向段內(nèi)任意地址寫0,即空寫入,啟動擦除操作FCTL1=FWKEY;FCTL3=FWKEY+LOCK;while(FCTL3&BUSY);}4.2寫入對Flash的寫入數(shù)據(jù)可以是單字、單字節(jié),也可以是連續(xù)多個字或字節(jié)(即塊操作)。編程寫入操作的順序如下:1)選擇適當(dāng)?shù)臅r鐘源和分頻因子;2)清除LOCK位3)判斷BUSY位,只有當(dāng)BUSY=0時才可以執(zhí)行下一步操作4)使能寫入功能,設(shè)置WRT、BLKWRT(如果寫入單字或單字節(jié)則WRT=1,如果是塊寫入,或者是多字、多字節(jié)連續(xù)寫入則WRT=1,BLKWRT=1);5)判斷BUSY位,只有當(dāng)BUSY=0時才可以執(zhí)行下一步操作6)寫入數(shù)據(jù)7)判忙,完了之后清除WRT,置位LOCK根據(jù)上述操作順序,編寫程序代碼如下://writesinglebyte//Adr為要編程的地址,沒有奇偶地址要求、DataB為要編程的字節(jié)數(shù)據(jù)voidFlashWB(unsignedcharAdr,unsignedcharDataB){FCTL2=FWKEY+FSSEL_1+FN3+FN4;//MCLK16*FN4+8*FN3FCTL3=FWKEY;FCTL1=FWKEY+WRT;while(FCTL3&BUSY);*((unsignedint*)Adr)=DataB;//數(shù)值強制轉(zhuǎn)換成指針,指向地址數(shù)據(jù)Adr所表示的內(nèi)存單元//將數(shù)據(jù)字DataW賦值給內(nèi)存單元FCTL1=FWKEY;FCTL3=FWKEY+LOCK;while(FCTL3&BUSY);}//writesingleword//Adr為要編程的地址,應(yīng)該是偶地址、DataW為要編程的字數(shù)據(jù)voidFlashWW(unsignedintAdr,unsignedintDataW){FCTL2=FWKEY+FSSEL_1+FN3+FN4;//MCLK16*FN4+8*FN3FCTL3=FWKEY;FCTL1=FWKEY+WRT;while(FCTL3&BUSY);*((unsignedint*)Adr)=DataW;//數(shù)值強制轉(zhuǎn)換成指針,指向地址數(shù)據(jù)Adr所表示的內(nèi)存單元//將數(shù)據(jù)字DataW賦值給內(nèi)存單元FCTL1=FWKEY;FCTL3=FWKEY+LOCK;while(FCTL3&BUSY);}/*************************************************//向FLASH信息區(qū)寫入指定數(shù)量的字節(jié)數(shù)據(jù)//unsignedchar*pc_byte信息區(qū)數(shù)據(jù)指針//unsignedchar*Datain:讀出數(shù)據(jù)存放數(shù)據(jù)數(shù)組,8位長//unsignedcharcount:讀操的數(shù)量,范圍0-127**************************************************/voidFlashWrite(uchar*pc_byte,uchar*Datain,uintcount){FCTL2=FWKEY+FSSEL_1+FN3+FN4;//MCLK16*FN4+8*FN3FCTL3=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é)寫入的時候,用于指向信息區(qū)數(shù)據(jù)指針類型的區(qū)別,字寫入時候為*((unsignedint*)Adr),字節(jié)寫入時候為*((unsignedchar*)Adr)。4.3讀取根據(jù)查看的書籍資料和網(wǎng)絡(luò)資料得出,內(nèi)部Flash的讀取操作沒有順序的要求,一般Flash默認的操作方式即為讀模式。讀取Flash的程序代碼如下:/*************************************************//向FLASH信息區(qū)讀出指定數(shù)量的字節(jié)數(shù)據(jù)//unsignedchar*pc_byte信息區(qū)數(shù)據(jù)指針//unsignedchar*Dataout:讀出數(shù)據(jù)存放數(shù)據(jù)數(shù)組,8位長//unsignedcharcount:讀操的數(shù)量,范圍0-127**************************************************/voidFlashRead(uchar*pc_byte,uchar*Dataout,uintcount){while(count--){*Dataout=*pc_byte;Dataout++;pc_byte++;}}在網(wǎng)上查找資料的時候,好像看到過有位網(wǎng)友的博客說,內(nèi)部Flash的地址是自動加1的,按照他的理解,函數(shù)中pc_byte++語句就沒有用處了,可是事實不然,我在調(diào)試過程中,發(fā)現(xiàn)并不能自動加1,pc_byte++語句還是有必要的。調(diào)用上述函數(shù),可以通過這樣的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論