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後看...