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

📄 assembly._s

📁 AVR的BOOT原代码 AVR的BOOT原代码
💻 _S
字号:
		.text
;*********************************************************
; Place a 1 for the processor you want use
;*********************************************************

MEGATYPE8   =  0
MEGATYPE16  =  0
MEGATYPE32  =  0
MEGATYPE64  =  0
MEGATYPE128 =  1
MEGATYPE162 =  0
MEGATYPE169 =  0
MEGATYPE8515 = 0
MEGATYPE8535 = 0
MEGATYPE2313 = 0

;*********************************************************
;*********************************************************
;*********************************************************
;*********************************************************
; DO NOT CHANGE ANYTHING BELOW THIS LINE !!!!!!!
;*********************************************************
;*********************************************************
;*********************************************************
;*********************************************************

.if MEGATYPE64 | MEGATYPE128
    SPMCR = 0x68     ;RWW区忙标志,读RWW区允许,允许写程序存储区
.else
    SPMCR = 0x57
.endif

;-----------------------------------------  

; void write_page (unsigned int adr, unsigned char function);
; bits 8:15 adr addresses the page...(must setup RAMPZ beforehand!!!)
_write_page::
    XCALL __WAIT_SPMEN__
    movw    r30, r24        ;move address to z pointer (R31 = ZH, R30 = ZL)
    STS     SPMCR, R18      ;argument 2 decides function
    SPM                     ;perform pagewrite
    RET

;-----------------------------------------

; void fill_temp_buffer (unsigned int data, unsigned int adr);
; bits 7:1 in adr addresses the word in the page... (2=first word, 4=second word etc..)
_fill_temp_buffer::
    XCALL __WAIT_SPMEN__
    movw    r30, r18        ;move adress to z pointer (R31=ZH R30=ZL)
    movw    r0, r16         ;move data to reg 0 and 1
    LDI     R19, 0x01
    STS     SPMCR, R19
    SPM                     ;Store program memory
    RET      
	
;-----------------------------------------	

;unsigned char read_flash(unsigned int add);
_read_flash::
    mov r31,r17
    mov r30,r16
    lpm r16,z
    clr r17
    ret	
		
;unsigned int read_program_memory (unsigned int adr ,unsigned char cmd);
_read_program_memory::
    movw    r30, r16        ;move adress to z pointer
    SBRC    R18, 0          ;read lockbits? (second argument = 0x09)
    STS     SPMCR, R18      ;if so, place second argument in SPMEN register
    LPM     r16, Z+
    LPM     r17, Z
    RET
	
;-----------------------------------------
        
_enableRWW::
	XCALL __WAIT_SPMEN__
    LDI R27,0x11
    STS SPMCR,R27
    SPM
    RET   
	
;-----------------------------------------           

__WAIT_SPMEN__:
    LDS     R27,SPMCR       ; load SPMCR to R27
    SBRC    R27,0           ; check SPMEN flag
    RJMP    __WAIT_SPMEN__  ; wait for SPMEN flag cleared        
    RET
	
;-----------------------------------------


⌨️ 快捷键说明

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