📄 flash.a51
字号:
;*A**************************************************************************
; NAME: flash.a51
;----------------------------------------------------------------------------
; CREATED_BY: F. FOSSE
; COMPANY: ATMEL-WM
; CREATION_DATE: 28/04/2001
; AUTHOR: $author: $
; REVISION: $version: $
; DATE: $date: $
;----------------------------------------------------------------------------
; PURPOSE: This file contains the FLASH memory routines
;
;----------------------------------------------------------------------------
; NOTES:
;
;****************************************************************************
; CHANGES:
;
;****************************************************************************
$TITLE (*** Flash Drivers ***)
FLASH_MODULE SEGMENT CODE
;_____ I N C L U D E S ____________________________________________________
$include (register.inc)
;_____ M A C R O S ________________________________________________________
;_____ D E F I N I T I O N ________________________________________________
;_____ D E C L A R A T I O N ______________________________________________
PUBLIC fm_read_xrow, fm_program_xrow, fm_program_xrow_byte
PUBLIC fm_read_user_byte, fm_program_user, fm_program_user_byte
PUBLIC fm_read_hardware_byte, fm_program_fuse
RSEG FLASH_MODULE
;*F***************************************************************************
; NAME: fm_read_xrow
;-----------------------------------------------------------------------------
; PARAMS: DPL: address to read (0 to 128)
;
; RETURN: ACC: data read
;
;-----------------------------------------------------------------------------
; PURPOSE: return one byte of the XROW
;
;*****************************************************************************
fm_read_xrow:
clr A
mov DPH,A
mov FCON,#SEL_XROW_MOVC ; map XROW in code space
movc A,@A+DPTR ; read address
mov FCON,#DESELECT_CL ; reset FCON
ret
;*F***************************************************************************
; NAME: fm_program_xrow_byte / fm_program_xrow
;-----------------------------------------------------------------------------
; PARAMS: ACC: data to write
; DPL: address to write 0 to PAGE_SIZE-1
;
; RETURN:
;
;-----------------------------------------------------------------------------
; PURPOSE: fm_program_xrow_byte: program one data byte in XROW
; fm_program_xrow: launch programming of CL in XROW
;
;*****************************************************************************
fm_program_xrow_byte:
mov DPH,#00h
mov FCON,#SEL_XROW_CL ; map column latch in XRAM space
movx @DPTR,A
fm_program_xrow:
mov FCON,#(FPL_S0 OR FMOD_XROW_MSK) ; launch xrow programming
mov FCON,#(FPL_S1 OR FMOD_XROW_MSK)
ajmp fm_program_busy
;*F***************************************************************************
; NAME: fm_read_user_byte
;-----------------------------------------------------------------------------
; PARAMS: DPTR: address to read
;
; RETURN: ACC: data byte read
;
;-----------------------------------------------------------------------------
; PURPOSE: return USER byte
;
;*****************************************************************************
fm_read_user_byte:
mov FCON,#SEL_USER_MOVC ; map USER in CODE space
clr A
movc A,@A+DPTR
mov FCON,#DESELECT_CL ; reset FCON
ret
;*F***************************************************************************
; NAME: fm_program_user_byte
;-----------------------------------------------------------------------------
; PARAMS: ACC: data to program
; DPTR: address to program
;
; RETURN:
;
;-----------------------------------------------------------------------------
; PURPOSE: launch programming of one byte in USER
;
;*****************************************************************************
fm_program_user_byte:
orl FCON,#FPS_MSK ; map column latch in XRAM space
movx @DPTR,A ; data to program
; ajmp fm_program_user ; must be ajmp for API call
; ! must be followed by the fm_program_user routine
;*F***************************************************************************
; NAME: fm_program_user
;-----------------------------------------------------------------------------
; PARAMS:
;
; RETURN:
;
;-----------------------------------------------------------------------------
; PURPOSE: launch programming of CL in USER
;
;*****************************************************************************
fm_program_user:
mov FCON,#(FPL_S0 OR FMOD_USER_MSK) ; launch USER programming
mov FCON,#(FPL_S1 OR FMOD_USER_MSK)
fm_program_busy:
mov A,FCON
jb ACC.0,fm_program_busy
mov FCON,#DESELECT_CL ; reset FCON
ret
;*F***************************************************************************
; NAME: fm_read_hardware_byte
;-----------------------------------------------------------------------------
; PARAMS:
;
; RETURN: ACC: hardware byte content
;
;-----------------------------------------------------------------------------
; PURPOSE: read hardware byte
;
;*****************************************************************************
fm_read_hardware_byte:
mov DPTR,#0000H
mov FCON,#SEL_FUSE_MOVC ; map hardware byte in CODE space
clr A
movc A,@A+DPTR ; read hardware byte
mov FCON,#DESELECT_CL ; reset FCON
ret
;*F***************************************************************************
; NAME: fm_program_fuse
;-----------------------------------------------------------------------------
; PARAMS: ACC: data to program
;
; RETURN:
;
;-----------------------------------------------------------------------------
; PURPOSE: program hardware byte
;
;*****************************************************************************
fm_program_fuse:
mov FCON,#SEL_FUSE_CL ; map hardware byte in XRAM space
mov DPTR,#0000h
movx @DPTR,A
mov FCON,#(FPL_S0 OR FMOD_FUSE_MSK) ; launch fuse programming
mov FCON,#(FPL_S1 OR FMOD_FUSE_MSK)
ajmp fm_program_busy
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -