⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm.s43

📁 MSP430F22X单片机开发套件源代码
💻 S43
字号:
#include "msp430x22x4.h"
;写segD,然后复制segD(1000h-103Fh)到segC(1040h-107Fh)
;对信息段A的操作,注意LOCKA位
;segD(1000h-103fh)
;segC(1040h-107fh)
;segB(1080h-10bfh)
;segA(10c0h-10ffh)

#define SEGD_START  0x1000
#define SEGC_START  0x1040

        NAME    main        
        PUBLIC  main

;----------------------------------------------------------------------------- 
;       MSP430F22x中断向量表         
;-----------------------------------------------------------------------------  
        ORG     0FFFEh
        DC16    main        
;------------------------------------------------------------------------------ 
        RSEG    CODE                          ;  程序开始
;------------------------------------------------------------------------------ 
main    
        MOV.W   #0600H,SP                     ;初始化堆栈指针
stopWDT	MOV.W	#WDTPW+WDTHOLD,&WDTCTL        ;关看门狗
	MOV.B	&CALBC1_1MHZ,&BCSCTL1         ;设定DCO时钟为1MHZ
	MOV.B	&CALDCO_1MHZ,&DCOCTL
        MOV.W   #SEGD_START,R4                ;将segD的首地址放在R4中,用于后面的擦除程序
        CALL    #erase_seg                    ;调用擦除程序
        CALL    #write_segd                   ;调用写程序
        MOV.W   #SEGC_START,R4                ;将segC的首地址放在R4中,用于后面的擦除程序
        CALL    #erase_seg                    
        CALL    #copy_d_to_c                  ;调用段复制程序
        CALL    #sega_operation               ;调用信息段A的操作程序,跟踪程序来观察SEGA位

mainloop
        JMP     mainloop  
        
;------------------------------------------------------------------------------ 
erase_seg
;------------------------------------------------------------------------------        
        MOV.W   #FWKEY+FSSEL1+FN1,&FCTL2      ;flash时钟源为SMCLK,f(FTG)=SMCLK/3
        MOV.W   #FWKEY,&FCTL3                 ;LOCK为0
        MOV.W   #FWKEY+ERASE,&FCTL1           ;段擦除使能
        CLR.W   0(R4)                         ;空写用来起动flash擦除
        MOV.W   #FWKEY+LOCK,&FCTL3            ;LOCK为1        
        RET
        
;------------------------------------------------------------------------------ 
write_segd
;------------------------------------------------------------------------------ 
        MOV.W   #FWKEY,&FCTL3                 ;LOCK为0        
        MOV.W   #FWKEY+WRT,&FCTL1             ;flash写使能                
        MOV.B   #00H,R5                       ;所写初值
write_loop                                    ;循环写入
        MOV.B   R5,0(R4)                         
        INC.B   R5
        INC.W   R4
        CMP.W   #1040H,R4                     
        JNE     write_loop
        MOV.W   #FWKEY+LOCK,&FCTL3            ;LOCK为1
        RET     

;------------------------------------------------------------------------------ 
copy_d_to_c
;------------------------------------------------------------------------------
        MOV.W   #FWKEY,&FCTL3                 
        MOV.W   #FWKEY+WRT,&FCTL1
        MOV.W   #SEGD_START,R5   
copy_loop                                     ;循环复制
        MOV.B   @R5+,0(R4)
        INC.W   R4
        CMP.W   #1080H,R5         
        JNE     copy_loop
        MOV.W   #FWKEY+LOCK,&FCTL3      
        RET 

;------------------------------------------------------------------------------ 
sega_operation
;------------------------------------------------------------------------------
        ;置位LOCKA位,用于保护信息段A
        BIT     #LOCKA,&FCTL3                 ;测试LOCKA
        JZ      sega_unlock                   ;LOCKA是否为0?
        MOV     #FWKEY+LOCKA,&FCTL3           ;设置LOCKA为0
sega_unlock 
        ;复位LOCKA位,用于擦写信息段A
        BIT #LOCKA,&FCTL3                     ;测试LOCKA
        JNZ segalocked                        
        MOV #FWKEY+LOCKA,&FCTL3 
segalocked   
        RET
        
        END     main


        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -