MSP430的Flash儲存器

2021-06-16 17:26:17 字數 2118 閱讀 1664

flash儲存器的主要功能部件

控制暫存器:控制flash儲存器的檫除與寫入

flash儲存器陣列:儲存體

位址資料鎖存器:檫除與程式設計時執行鎖存操作

程式設計電壓發生器:產生程式設計電壓

時序發生器:產生檫除與程式設計所需所有時序控制訊號

擦除操作

選擇適當的時鐘源和分頻因子,為時序發生器提供正確時鐘輸入 

如果lock=1,則將它復位 

監視busy標誌位只有當busy=0時才可以執行下一步,否則一直監視busy。 

如果擦除一段,則設定erase=1。 

如果擦除多段,則設定meras=1 

如果整個flash全擦除,則設定rase=1同時meras=1。 

對擦除的位址範圍內任意位置作一次空寫入,用以啟動擦除操作。如果空寫的位址在不能執行擦除操作的段位址範圍內,則寫入操作不起作用

flash程式設計操作

選擇適當的時鐘源以及合適的分頻因子 

如果lock=1,將它復位 

監視busy位,直到busy=0是才可進入下一步 

如果寫入單字或單位元組,則將設定wrt=1 

如果是塊寫或多字、多位元組順序寫入,則將設定wrt=1,blkwrt=1 

將資料寫入選定位址時啟動時序發生器,在時序發生器的控制下完成整個過程

flash錯誤操作的處理

如果寫入高位元組口令碼錯誤,則引發puc訊號:小心操作可以避免; 

在對flash操作期間讀flash內容,會引發accvfig狀態位的設定:小心操作可以避免 

因為在對flash操作期間,需要較長的時間,如果這時看門狗定時器的資料將近尾聲,則看門狗定時器溢位:建議使用者程式在進行flash操作之前先停掉看門狗定時器,等操作結束之後再開啟看門狗 

所有的flash型別的msp430器件的0段都包含有中斷向量等重要的程式**,如果對其進行擦除操作,將會引起嚴重的後果:建議使用者程式在進行flash操作之前,先將該段的重要資料(或程式**)儲存到ram中或寫入到其他暫時未用的段中,等待該段操作完畢再還原那些資料(或程式**);同時一定不要使正在執行的程式處在正要被擦除的段中;也不要在flash操作期間允許中斷的發生。

下面這個圖是flash儲存器的組織

這個圖示flash的週期時序

example:

資訊段a和b的擦和寫操作。現將記憶體中的double型資料和int型資料儲存到資訊段a中,再將其從資訊段a複製到資訊段b中。

#include

double data[8];

int add;

void write_sega(void);

void copy_a2b(void);

void main(void)

//initialize unsigned int data

add = 8;

write_sega();

copy_a2b();

for(;;);}

void write_sega(void)

flash_int_ptr = (unsigned int*)flash_data_ptr; //initialize

*flash_int_ptr = add;                         //寫入unsigned int

fctl1 = fwkey;

fctl3 = fwkey + lock;

}void copy_a2b(void)

flash_int_ptra = (unsigned int*)flash_data_ptra;//初始化資訊段 a unsigned int 型指標

flash_int_ptrb = (unsigned int*)flash_data_ptrb;//初始化資訊段 b unsigned int 型指標

*flash_int_ptrb = *flash_int_ptra;

fctl1 = fwkey;

fctl3 = fwkey + lock;                            //鎖定

}下面貼上執行的結果(在449下的除錯結果)

初始化狀態

void write_sega(void)後

void copy_a2b(void)後

另外,不同型號的flash區別只在於主儲存器的位址範圍不一樣!

MSP430的比較器A

比較器a是乙個實現模擬電壓比較的外圍模組 比較器a的主要功能是指出兩個輸入電壓ca0和ca1的大小關係,然後設定輸出訊號caout的值。如果ca0 ca1 則 caout 1,否則caout 0。參與比較的兩個電壓ca0和ca1可以是外部或者內部基準電壓。任何組合都是可能的。比較器結構 比較器a一共...

MSP430常見問題之FLASH儲存類

用iar embedded workbench for msp430 通過jtag往msp430上寫程式。為了知道片內程式的版本,必須讀出flash 中內容。什麼工具軟體可以通過jtag口實現這個功能?a1 熔絲未燒斷的話,做個空程式的專案,然後在c spy選項裡選擇保留未改變的區域,debug後看...

MSP430常見問題之FLASH儲存類

用iar embedded workbench for msp430 通過jtag往msp430上寫程式。為了知道片內程式的版本,必須讀出flash 中內容。什麼工具軟體可以通過jtag口實現這個功能?a1 熔絲未燒斷的話,做個空程式的專案,然後在c spy選項裡選擇保留未改變的區域,debug後看...