Flash單片機自編程技術(shù)介紹
程序2:用同一模塊軟件將一個(gè)字寫(xiě)入Flash存儲器
Fxkey .set 03300h
Fwkey .set 0A500h
…… ;禁止所有中斷
MOV #(Fwkey + WRT), FCTL1 ;允許對Flash編程
MOV #123h, 0FE1Eh ;編程一個(gè)字
MOV #Fwkey, FCTL1 ;編程位復位
XOR #(Fxkey + Lock), FCTL3 ;LOCK位置位
…… ;允許中斷
2.2 通過(guò)RAM程序調用實(shí)現Flash自編程
在Flash進(jìn)行擦除和編程期間,CPU只能訪(fǎng)問(wèn)存于片上RAM的程序指令。將Flash中的程序復制進(jìn)堆棧中,如程序3所示。當對Flash進(jìn)行擦寫(xiě)時(shí),CPU就可以從RAM中執行程序。Flash的擦寫(xiě)操作完成后,Flash就可以重新被訪(fǎng)問(wèn),程序指針PC就會(huì )再次指向Flash存儲器,堆棧指針SP也會(huì )恢復。
從RAM中執行程序,可以使CPU在Flash被改寫(xiě)時(shí)依然保持運行。因此,MSP430系列芯片在Flash編程期間仍然可以通過(guò)UART模塊接收數據。不過(guò),在這種模式下是否接收到數據,只能通過(guò)查詢(xún)UART的接收標志位來(lái)進(jìn)行判斷。
程序3:將Flash中的程序指令拷貝進(jìn)堆棧的程序
Flash_ww
DINT ;禁止所有中斷
CLR.B IE1 ;禁止NMI、ACCV和OP中斷
MOV #5A80h, WDTCTL ;關(guān)閉Watchdog
MOV #Flash_ww_end, R13 ;定義拷貝進(jìn)RAM程序的
;結束地址和長(cháng)度
MOV #Flash_ww_length, R15
MOV #0A500h, FCTL3 ;清除LOCK位
Copy
PUSH @R13 ;將程序拷貝進(jìn)RAM
DECD R13
DEC R15
JNZ Copy
MOV SP, R15
MOV #0A54oh, FCTL1 ;WRT = 1
CALL R15 ;調用RAM中的Flash寫(xiě)程序
MOV #0A500h, FCTL1 ;WRT = 0
MOV #0A510h, FCTL3 ;LOCK = 1
ADD #2*Flash_ww_length, SP
RET
Flash_ww_start
MOV R14, 0(R12) ;向Flash寫(xiě)1字節
Wait_bf
BIT #1, FCTL3 ;檢測BUSY位
JNZ Wait_bf
Flash_ww_end
RET
Flash_ww_length EQU(Flash_ww_end ?Flash_ww_start + 2)/2
ENDMOD
3 結 語(yǔ)
本文提出的兩種Flash自編程方法各有利弊。當CPU必須對事件作出快速反應時(shí),如通過(guò)UART進(jìn)行的數據通信,采用Flash自編程開(kāi)始時(shí)將Flash中的程序代碼復制進(jìn)RAM再執行的方法。如果對實(shí)時(shí)性要求不高,在Flash自編程過(guò)程中,將CPU置于空閑狀態(tài)的辦法更為簡(jiǎn)單、直接??梢韵嘈?,隨著(zhù)Flash型芯片的廣泛應用和技術(shù)的不斷發(fā)展,Flash的自編程技術(shù)也將會(huì )有新的突破。本文引用地址:http://dyxdggzs.com/article/171892.htm
評論