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

📄 systemasm.s

📁 AVR单片机的一个免费的开发环境.开发语言为GCC.
💻 S
字号:
// SystemAsm.s

#include "m128asm.h"

.global GetFlashByte
.global GetExtFlashByte
.global ProgrFlash

.extern address
.extern buff
.extern length


.func GetFlashByte
GetFlashByte:
  push ZL
  push ZH
  ldi ZL, 0
  out RAMPZ, ZL
  mov ZL,  r24
  mov ZH,  r25
  elpm r24, Z
  clr r25
  pop ZH
  pop ZL
  ret
.endfunc

.func GetExtFlashByte
GetExtFlashByte:
  push ZL
  push ZH
  ldi ZL, 1
  out RAMPZ, ZL
  mov ZL,  r24
  mov ZH,  r25
  elpm r24, Z
  clr r25
  pop ZH
  pop ZL
  ret
.endfunc

.func ProgrFlash
ProgrFlash:
   push r0
   push r1
   push r16
   push r17
   push r24
   push r25
   push YL
   push YH
   push ZL
   push ZH
   clr   r17         
   lds   ZL,  address     
   lds   ZH,  address+1   
   ldi   YL,  lo8(buff)   
   ldi   YH,  hi8(buff)   
   lds   r24, length      
   lds   r25, length+1    
 length_loop:          
   cpi   r17, 0x00        
   brne  no_page_erase   
 wait_spm1:            
   lds   r16, SPMCSR          
   andi  r16, 1           
   cpi   r16, 1           
   breq  wait_spm1       
   ldi   r16, 0x03        
   sts   SPMCSR, r16          
   spm                   
 wait_spm2:            
   lds   r16, SPMCSR          
   andi  r16, 1           
   cpi   r16, 1           
   breq  wait_spm2       
   ldi   r16, 0x11        
   sts   SPMCSR, r16          
   spm                   
 no_page_erase:        
   ld    r0, Y+           
   ld    r1, Y+           
   wait_spm3:            
   lds   r16, SPMCSR          
   andi  r16, 1           
   cpi   r16, 1           
   breq  wait_spm3       
   ldi   r16, 0x01        
   sts   SPMCSR, r16          
   spm                   
   inc   r17             
   cpi   r17, 128            
   brlo  same_page       
 write_page:           
   clr   r17             
 wait_spm4:            
   lds   r16, SPMCSR          
   andi  r16, 1           
   cpi   r16, 1           
   breq  wait_spm4       
   ldi   r16, 0x05        
   sts   SPMCSR, r16          
   spm                   
 wait_spm5:            
   lds   r16, SPMCSR          
   andi  r16, 1           
   cpi   r16, 1           
   breq  wait_spm5       
   ldi   r16, 0x11        
   sts   SPMCSR, r16          
   spm                   
 same_page:            
   adiw  ZL,  2           
   sbiw  r24, 2           
   breq  final_write     
   rjmp  length_loop     
   final_write:          
   cpi   r17, 0           
   breq  block_done      
   adiw  r24,2           
   rjmp  write_page      
 block_done:
   pop ZH
   pop ZL
   pop YH
   pop YL
   pop r25
   pop r24
   pop r17
   pop r16
   pop r1
   pop r0
.endfunc

⌨️ 快捷键说明

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