1,F(xiàn)LASH操作程序設(shè)計
下面我們來學(xué)習(xí)編程的內(nèi)容。在學(xué)習(xí)編程前,我們要先了解一下FLASH存儲模塊的控制寄存器。
FLASH存儲模塊的所有操作都通過控制相關(guān)的控制寄存器來實現(xiàn)的。包括FCTL1、FCTL2、FCTL3三個控制寄存器,其中FCTL1主要包含對FLASH的編程和擦除操作的控制位;FCTL2主要定義進(jìn)入時序發(fā)生器前的時鐘源和分頻系數(shù);FCTL3保存FLASH存儲模塊的一些標(biāo)志位。
2, FCTL1控制寄存器
FWKEY:FLASH存儲模塊的安全鍵值。共8位,對FLASH操作時應(yīng)該向其中寫入對應(yīng)的安全鍵值,否則會引起PUC信號以及KEYV信號。0x96:讀取時的安全鍵值;0x5A:寫入時的安全鍵值。
BLKWRT:段編程控制位。當(dāng)需要對某一個段或者幾個段連續(xù)編程時,使用段編程方式可以加快編程的速度。1:使用段編程方式;0:不適用段編程方式。
WRT:編程控制位。當(dāng)需要對FLASH編程時,必須對該位置位,否則會導(dǎo)致ACCVIFG(非法訪問中斷標(biāo)志位)置位。1:允許對FLASH編程;0:禁止對FLASH編程。
MERAS:多段擦除控制位,當(dāng)需要擦除多段時,對改為置位。1:擦除多段;0:不擦除。
ERASE:但段擦除控制位,當(dāng)需要擦除一個段時,對該位進(jìn)行置位。1:擦除一個段;0:不擦除。
3,F(xiàn)CTL2控制寄存器
FWKEY:FLASH存儲模塊的安全鍵值。共8位,對FLASH操作時應(yīng)該向其中寫入對應(yīng)的安全鍵值,否則會引起PUC信號以及KEYV信號。0x96:讀取時的安全鍵值;0x5A:寫入時的安全鍵值。
FSSEL1~0:選擇FLASH存儲模塊的時序發(fā)生器的時鐘源。3:選擇SMCLK;2:選擇SMCLK;1:選擇CMLK;0:選擇ACLK。
FN5-0:為時序發(fā)生器的時鐘源選擇分頻系數(shù),最終的分頻比為32*FN5+16*FN4+8*FN3+4*FN2+2*FN1+FN0+1.
4, FCTL3控制寄存器
FWKEY為安全鍵值,和前兩個一樣,我們不在贅述。
EMEX:緊急退出位。對該位置位能夠緊急停止對FLASH的操作。1:緊急停止FLASH操作;0:不操作。
LOCK:FLASH鎖定位。如果在該位置位時對FLASH進(jìn)行擦除和寫入操作會導(dǎo)致非法訪問,對應(yīng)的標(biāo)志位ACCVIFGF置位。1:鎖定FLASH存儲模塊,鎖定時可讀,但不可擦除和寫入;0:不鎖定FLASH存儲模塊,可讀可寫可擦除。
WAIT:等待標(biāo)志位,用戶通過讀取該位的狀態(tài)已獲得FLASH存儲器和段編程狀態(tài)。1:段編程有效;0:段編程操作正在進(jìn)行。
ACCVIFG:非法訪問標(biāo)志位。1:非法訪問;0:沒有非法訪問。
KEYV:非法安全鍵值標(biāo)志位。1:錯誤安全鍵值;0:正確的安全鍵值。
BUSY:FLASH存儲模塊忙標(biāo)志位。1:當(dāng)前FLASH存儲模塊忙;0:當(dāng)前FLASH存儲模塊空閑。
5,單字節(jié)寫入操作
程序時對單字節(jié)寫入的操作,向Seg_A中的地址0x1090寫入數(shù)據(jù)0xAA。從這個程序段,我們可以看出向FLASH寫入的數(shù)據(jù)的基本流程,大部分與擦除還是很相似的。需要特別注意的是,在這段程序中我們省略了檢測BUSY狀態(tài)位的環(huán)節(jié),并且在實際情況下,只要用戶程序不是頻繁的、交叉的操作FLASH存儲模塊,一般是需要檢測BUSY位的。
對于多字節(jié)的寫入操作,其基本操作方式單字節(jié)類似,只需要每次修改FLASH地址指針,并寫入對應(yīng)的數(shù)據(jù)即可。
6,段擦除操作
MSP430系列MCU盡管可以向FLASH存儲模塊的任意地址寫入數(shù)據(jù),但是擦除操作只能以段位基本單位操作,即最少只能擦除Seg_A和Seg_B段。從示例的程序中,可以看出段擦除的基本流程:除了啟動擦除操作之前的基本設(shè)置,擦除之后的基本設(shè)置之外,還需特別注意的是:向要擦除的段(程序中位Seg_A)任意一個地址中寫入任意數(shù)據(jù)以啟動擦除操作。同樣,這是一個簡化的程序段,也沒有檢測BUSY等標(biāo)志位。
這是一個非常經(jīng)典的TI的關(guān)于FLASH存儲模塊的程序,在幾乎所有的關(guān)于MSP430的書籍等資料上都可以看見他的身影。這段程序包含了擦除,段寫入、段復(fù)制等操作,是一個非常好的例子。
需要特別注意的是:前面的程序僅僅是一個示例,當(dāng)你在很復(fù)雜的程序中操作FLASH前,一定要先禁止所有的中斷并禁用看門狗,切記切記。
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634631 -
FlaSh
+關(guān)注
關(guān)注
10文章
1633瀏覽量
147939 -
存儲器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163762
原文標(biāo)題:MSP430單片機(jī)的FLASH與存儲器結(jié)構(gòu)(3)
文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論