娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月21日(星期六)

2021年06月21日 | 一文了解msp430單片機的存儲器組織

發布者:pingbashou 來源: eefocus關鍵字:msp430  單片機  存儲器組織 手機看文章 掃描二維碼
隨時隨地手機看文章

一般,在單片機中的Flash存儲器用于存放程序代碼,屬于只讀型存儲器。而在MSP430些列的單片機中,都可以通過內置的Flash控制器擦除或改寫任何一段的內容。另外,msp430的單片機內部還專門留有一段Flash區域(information memory),用于存放掉電后需要永久保存的數據。利用430內部的Flash控制器,可以完成較大容量的數據記錄、用戶設置參數在掉電后的保存等功能。


硬件介紹:


要對Flash讀寫,首先要了解MSP430的存儲器組織。430單片機的存儲器組織結構采用馮諾依曼結構,RAM和ROM統一編址在同一尋址空間中,沒有代碼空間和數據空間之分。


一般430的單片機都統一編址在0-64k地址范圍中,只有少數高端的型號才能突破64k(如:FG461x系列)。絕大多數的msp430單片機都編址在64kB范圍內。地址的大概編碼方式如下:

這是msp430f425的存儲器分配圖,其他在64k范圍內的存儲器的單片機編址方式與此類似:低256B是寄存器區,然后是RAM;空白;1000H到10FFH是信息Flash區;大于1100H-0FFFFH是主存儲器區(從0FFFFH開始往低地址有單片機的主Flash,多余的部分空白)。


MSP430F14x的Flash分布:

MSP430F16x的Flash分布:

主Flash部分和信息Flash部分如下(60kB Flash對應的單片機,如msp430f149、msp430f149):

主Flash分為以512B為段的單位,0段是單片機中斷向量等程序入口地址,使用時不要擦除此段或改寫此段,若要擦除或是改寫,請先保存內容到RAM或其他段;主Flash各段內容均要避免寫入或擦除,以免造成不可預料的后果。


信息Flash分為兩段:段A和段B,每段128B;可以保存用戶自己的內容(主Flash也可以但是要避免與程序代碼區沖突);這里就把信息Flash的兩段稱為InfoA(1080H-10FFh)和InfoB(1000H-10FFH)。


Flash的操作包括:字或字節寫入;塊寫入;段擦除;主Flash擦除;全部擦除。任何的Flash操作都可以從Flash或從RAM中運行。


Flash操作時需要時序發生器,Flash控制器內部含有時序發生器用以產生所需的Flash時鐘,Flash時鐘的范圍必須在257kHz到476kHz之間。時序發生器的框圖如下:

時序發生器可以選擇ACLK、MCLK、SMCLK作為時鐘源,通過分頻獲得所需的257kHz到476kHz之間的Flash操作時鐘。如果時鐘頻率不再這個范圍內,將會產生不可預料的結果。


擦除:擦除之后,存儲器中的bit都變為1;Flash中的每一位都可以通過編程寫入有1到0,但是要想由0變為1,必須通過擦除周期。擦除的最小單位是段。有三種擦除模式:


MERAS   ERASE       Erase Mode

0       1           Segment erase

1       0           Mass erase (all main memory segments)

1       1           Erase all flash memory (main and information .segments)

可以通過MERAS、ERASE位來設置擦除的模式:段擦除,主Flash擦除,全部擦除。


對要擦除段內的一個地址空寫入啟動擦出周期:空寫入可以啟動時序發生器和擦除操作。空寫入后BUSY位立即變高直到擦除周期結束,這一位變為低(0)。BUSY, MERAS和 ERASE位在擦除周期結束后會自動復位。擦除周期的時間和要擦出的Flash大小無關,每次擦除的時間對于MSP430F1xx系系列單片機來說,所需時間是一樣的。擦除的時序如下:

當空寫入到的地址不在要擦除的段地址范圍內的時候,空寫入無效,直接被忽略。在擦除周期內,應該關中斷,直到擦除完成,重新開中斷,擦除期間的中斷已經置標志位,開中斷后立即響應。


從Flash中啟動的擦除操作:擦除操作可以從Flash中啟動或是從RAM中啟動。當操作是從Flash中啟動的時候,Flash控制器控制了操作時序,CPU運行被暫停直到擦除結束。擦除周期結束后,CPU繼續執行,從空寫入之后的指令開始運行。當從Flash中啟動擦除操作時,可以擦除即將運行的程序所在的段,如果擦除了即將運行的程序所在的Flash段時,擦除結束后,CPU的運行不可預料。


從Flash啟動時擦除周期如下:

用戶指南里面的示例匯編程序如下:


; Segment Erase from flash. 514 kHz < SMCLK < 952 kHz

; Assumes ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL ; Disable WDT

DINT //; Disable interrupts

MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2

MOV #FWKEY,&FCTL3 ; Clear LOCK

MOV #FWKEY+ERASE,&FCTL1 ; Enable segment erase

CLR &0FC10h ; Dummy write, erase S1

MOV #FWKEY+LOCK,&FCTL3 ; Done, set LOCK

... ; Re-enable WDT?

EINT ; Enable interrupts

從RAM中啟動擦除操作:任意擦除周期都可以從RAM啟動,這時CPU不再暫停而是繼續從RAM中運行接下來的程序。CPU可以訪問任何Flash地址之前,必須檢查BUSY位以確定擦除周期結束。如果BUSY = 1訪問Flash,這是一個訪問沖突,這時ACCVIFG將被設置,而擦除的結果將是不可預測的的。


從RAM中啟動擦除操作時,過程如下:

要在擦除之前確認沒有訪問Flash,然后擦除完成之前不允許訪問Flash。


; Segment Erase from RAM. 514 kHz < SMCLK < 952 kHz

; Assumes ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL  ; Disable WDT

DINT                        ; Disable interrupts

L1 BIT #BUSY,&FCTL3         ; Test BUSY

JNZ L1                      ; Loop while busy

MOV #FWKEY+FSSEL1+FN0,&FCTL2; SMCLK/2

MOV #FWKEY,&FCTL3           ; Clear LOCK

MOV #FWKEY+ERASE,&FCTL1     ; Enable erase

CLR &0FC10h                 ; Dummy write, erase S1

L2 BIT #BUSY,&FCTL3         ; Test BUSY

JNZ L2                      ; Loop while busy

MOV #FWKEY+LOCK,&FCTL3      ; Done, set LOCK

...                         ; Re-enable WDT?

EINT                        ; Enable interrupts

寫Flash操作:寫入的模式由WRT和BLKWRT位來確定:


BLKWRT      WRT         Write Mode

0           1           Byte/word write

1           1           Block write

這兩種模式中塊寫入大約是字或字節寫操作時的兩倍快,因為在塊寫入完成之前,變成電壓一直維持直到塊寫入完成。同一個位置不能在擦除周期之前寫入兩次或以上,否則將發生數據損壞。寫操作時,BUSY位被置1,寫入完成后,BUSY被自動清零。如果寫操作是從RAM發起的,在BUSY=1時,程序不能訪問Flash,否則會發生訪問沖突,置位ACCVIFG,Flash寫入操作不可以預料。


字或字節寫入:字或字節寫入可以從Flash內部發起,也可以從RAM中發起。如果是從Flash中啟動的寫操作,時序將由Flash控制,在寫入完成之前CPU運行將被暫停。寫入完成后CPU將繼續運行。


操作時序如下:

若是從RAM中啟動寫Flash,程序將繼續從RAM中運行。CPU再次訪問Flash之前必須確認BUSY位已經清零,否則會發生訪問沖突,置位ACCVIFG,寫入的結果將不可預料。


字或字節寫入模式下,內部產生的編程電壓時適用于完整的64個字節塊的寫入

In byte/word mode, the internally-generated programming voltage is applied

to the complete 64-byte block, each time a byte or word is written, for 32 of the

35 fFTG cycles. With each byte or word write, the amount of time the block is

subjected to the programming voltage accumulates. The cumulative

programming time, tCPT, must not be exceeded for any block. If the cumulative

programming time is met, the block must be erased before performing any

further writes to any address within the block.

從Flash發起寫字節或字時:

; Byte/word write from flash. 514 kHz < SMCLK < 952 kHz

; Assumes 0FF1Eh is already erased

; Assumes ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL      ; Disable WDT

DINT ; Disable interrupts

MOV #FWKEY+FSSEL1+FN0,&FCTL2    ; SMCLK/2

MOV #FWKEY,&FCTL3               ; Clear LOCK

MOV #FWKEY+WRT,&FCTL1           ; Enable write

MOV #0123h,&0FF1Eh              ; 0123h ?> 0FF1Eh

MOV #FWKEY,&FCTL1               ; Done. Clear WRT

MOV #FWKEY+LOCK,&FCTL3          ; Set LOCK

...                             ; Re-enable WDT?

EINT                            ; Enable interrupts

從RAM中啟動寫入操作時:

; Byte/word write from RAM. 514 kHz < SMCLK < 952 kHz

; Assumes 0FF1Eh is already erased

; Assumes ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL      ; Disable WDT

DINT                            ; Disable interrupts

L1 BIT #BUSY,&FCTL3             ; Test BUSY

JNZ L1                          ; Loop while busy

MOV #FWKEY+FSSEL1+FN0,&FCTL2    ; SMCLK/2

MOV #FWKEY,&FCTL3               ; Clear LOCK

MOV #FWKEY+WRT,&FCTL1           ; Enable write

MOV #0123h,&0FF1Eh              ; 0123h ?> 0FF1Eh

L2 BIT #BUSY,&FCTL3             ; Test BUSY

JNZ L2                          ; Loop while busy

MOV #FWKEY,&FCTL1               ; Clear WRT

MOV #FWKEY+LOCK,&FCTL3          ; Set LOCK

...                             ; Re-enable WDT?

EINT                            ; Enable interrupts

塊寫入:當需要寫入連續的多個字或字節時,塊寫入能夠能夠提高Flash訪問速度。塊寫入時,內部產生的編程電壓一直存在在64個字節的塊寫入期間。塊寫入不能有Flash存儲器內啟動,必須從RAM中發起塊寫入操作。塊寫入期間,BUSY位被置位。在寫入每個字節或字時必須檢測WAIT位。下一個字或字節能夠被寫入時,WAIT位被置位。

塊寫入的過程如下:

; Write one block starting at 0F000h.

; Must be executed from RAM, Assumes Flash is already erased.

; 514 kHz < SMCLK < 952 kHz

; Assumes ACCVIE = NMIIE = OFIE = 0.

MOV #32,R5                      ; Use as write counter

MOV #0F000h,R6                  ; Write pointer

MOV #WDTPW+WDTHOLD,&WDTCTL      ; Disable WDT

DINT                            ; Disable interrupts

L1 BIT #BUSY,&FCTL3             ; Test BUSY

JNZ L1 ; Loop while busy

MOV #FWKEY+FSSEL1+FN0,&FCTL2    ; SMCLK/2

MOV #FWKEY,&FCTL3               ; Clear LOCK

MOV #FWKEY+BLKWRT+WRT,&FCTL1    ; Enable block write

L2 MOV Write_Value,0(R6)        ; Write location

L3 BIT #WAIT,&FCTL3             ; Test WAIT

JZ L3                           ; Loop while WAIT=0

INCD R6                         ; Point to next word

DEC R5                          ; Decrement write counter

JNZ L2                          ; End of block?

MOV #FWKEY,&FCTL1               ; Clear WRT,BLKWRT

L4 BIT #BUSY,&FCTL3             ; Test BUSY

JNZ L4                          ; Loop while busy

MOV #FWKEY+LOCK,&FCTL3          ; Set LOCK

...                             ; Re-enable WDT if needed

EINT                            ; Enable interrupts

當任何寫或擦除操作是從RAM啟動,而BUSY = 1,CPU不能讀取或寫入或從任何Flash位置。否則,發生訪問沖突,ACCVIFG設置,結果是不可預知的。此外,如果閃存寫入讓WRT= 0,ACCVIFG中斷標志設置,Flash不受影響。


如果寫入或擦除操作時從Flash啟動的,CPU訪問下一條指令時(從Flash讀取指令),Flash控制器返回03FFFH給CPU;03FFFH是指令JMP PC,這讓CPU一直循環直到Flash操作完成。Flash寫入或擦除操作完成后,允許CPU繼續訪問接下來的指令。


當BUSY=1時,Flash訪問時:

在開始Flash操作之前,需要停止所有的中斷源。如果在Flash操作期間有中斷響應,讀中斷服務程序的地址時,將收到03FFFH作為中斷服務程序的地址。如果BUSY=1;CPU將一直執行難IMP PC指令;Flash操作完成后,將從03FFFH執行中斷服務程序而不是正確的中斷程序的地址。

[1] [2]
關鍵字:msp430  單片機  存儲器組織 引用地址:一文了解msp430單片機的存儲器組織

上一篇:MSP430 學習經驗總結——MSP430開發環境建立
下一篇:基于MSP430單片機的電阻測量系統

推薦閱讀

開關穩壓器使用輸出級,重復切換“開”和“關”狀態,與能量存貯部件(電容器和感應器)一起產生輸出電壓。它的調整是通過根據輸出電壓的反饋樣本來調整切換定時來實現的。中國北京 – 2018 年 6 月 21 日 – Analog Devices (ADI) 宣布推出 Power by Linear? LT8642S,這是一款 10A、18V 輸入同步降壓型開關穩壓器。其 Silent Switc...
鴻海集團召開股東大會,郭臺銘最后一次以董事長身份出席鴻海股東會,并將于董事會后正式退位。“代工”起家郭臺銘兌現退休“承諾”這次,郭臺銘兌現了退休“承諾”。據界面數據公開資料統計,2001年,郭臺銘首次透露退休消息,稱要在2008年退休。之后的19年間,其多次公開發表退休言論,諸如“延后到70歲(2020年)退休”,“不輕言退休”,“我很快就要退...
6月19日,在2020英特爾數據創新峰會暨新品發布會的5G云網融合分論壇上,英特爾介紹了在5G 邊緣創新的最新實踐——南京“未來科技智慧中心”。這是英特爾與南京經濟技術開發區以及多家生態合作伙伴的聯合項目,也是英特爾“智慧未來生態創新”戰略合作項目的重要組成部分,通過共建5G+智慧園區,培育創新生態,為智慧城市的未來發展不斷探索。 ...
在使用網絡分析儀測量被測器件(DUT)時,如輸入阻抗約為 3 歐姆( 在2 MHz 時),阻抗和回波損耗 (S11) 測量的不確定性是多少?在這種情況下,阻抗分析儀是否要優于矢量網絡分析儀?對于低頻和阻抗應用,與使用反射法的矢量網絡分析儀(VNA)相比,使用 I-V 技術的阻抗分析儀能得到更精確的測量結果。常用判定準則是在系統特性阻抗 Z0 的 10 倍(...

史海拾趣

問答坊 | AI 解惑

電子元器件基礎知識——集成電路

集成電路是一種采用特殊工藝,將晶體管、電阻、電容等元件集成在硅基片上而形成的具有一定功能的器件,英文為縮寫為IC,也俗稱芯片。集成電路是六十年代出現的,當時只集成了十幾個元器件。 后來集成度越來越高,也有了今天的P-III。 集成電路根 ...…

查看全部問答∨

面試時求完美還是求真實?

現在都大家都在找工作,找工作就面臨著要面試,你面試時是追求完美還是真實性呢?…

查看全部問答∨

每日無線詞匯----射線跟蹤模型 Ray Tracing Model(zt)

類比:每天有成千上萬的人從北京出發去往全國各地,假若現在想知道每天有多少乘客從北京出發到上海。理論上我們只要把每天從北京到上海所有可能的交通工具包括飛機、火車、汽車所能運輸的人加起來便可以了。但是你有可能少考慮一部分人,他們可能跑 ...…

查看全部問答∨

用VC++在狀態欄顯示時鐘[轉載]

用VC++在狀態欄顯示時鐘   在VC的控件中有個Status bar可以在窗體狀態欄中添加日期和時間。其實通過簡單的代碼,你就能創建一個有時鐘顯示的狀態欄,并且還能設置時鐘欄的顯示方式。舉例如下:  首先,用MFC AppWizard按默認方式 ...…

查看全部問答∨

作過vxworks+powerpc平臺上中斷開發熟悉SIPNR_L寄存器的高手請進

小弟在MPC8260上做I2C controller 的驅動開發,在中斷回調函數中對SIPNR_L寄存器的值的I2C位進行判斷,居然發現有時會出現SIPNR_L的值為0. 按道理說,只有當發生了對應的I2C中斷,這個中斷回調函數才可能被調用,此時SIPNR寄存器中I2C的標志位應該被置1 ...…

查看全部問答∨

[急!]OV9650攝像頭 視頻傳輸問題

在程序的前面用 m_hled=CreateFile(_T(\"CIS1:\"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//打開驅動 ret = DeviceIoControl(m_hled,CAM_IOCTL_SAMSUNG_PREVIEW_START,NULL,NULL,NULL,NULL,NULL,NULL); 在開發板上LCD已經實時顯 ...…

查看全部問答∨

求友善之臂SBC2410光盤資料包含vivi等內核源碼

如題“ 求友善之臂SBC2410光盤資料包含vivi等內核源碼” 在線等待,急用........ 哪個兄弟有, 懇請您給我發一個 ,在下不勝感激, 資料內容比較大,所以請您發到我的郵箱:804763993@qq.com 請注明您的eeworld號 我給你再追加100分 謝謝.....…

查看全部問答∨

關于電容的一些問題.

請問一個6.3v 1600UF的電容能不能用6.3v 1800UF的代用。還有可不可以用同伏UF還要大些的借用?…

查看全部問答∨

Altium Designer 左右側按鈕沒了怎么辦

RT.今天看視頻學習下新版本怎么用.感覺不能老用99se啊..可是左右那兩個快捷按鈕區被我關了.現在不知道怎么開了..高手指點下..沒有library按鈕庫都不知道怎么添加了…

查看全部問答∨

LM3S—LCD

LM3S—LCDLM3S—LCD…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 合阳县| 鸡泽县| 涡阳县| 青海省| 金华市| 新津县| 新竹县| 荃湾区| 万州区| 讷河市| 庄河市| 饶阳县| 虹口区| 正镶白旗| 大厂| 灵武市| 水富县| 南江县| 巩留县| 日喀则市| 香河县| 壶关县| 隆子县| 吉木乃县| 梁河县| 西畴县| 兴安盟| 柳州市| 蒙自县| 绥中县| 平顶山市| 康马县| 平安县| 满洲里市| 友谊县| 平昌县| 大足县| 汉沽区| 苏尼特左旗| 区。| 绩溪县|