📄 c2xx_bex.asm
字号:
;**************************************************************************
; FILENAME: c2xxprog.asm - Generic name
; c2xx_btx.asm
;
; DESCRIPTION:
; Flash Programmer control module with flash algorithms -P
; called by the JTAG loader, PRG2xxw.exe
; Uses the on-chip SARAM for algorithms and flash data buffer
;
; GLOBALS:
;
; unsigned PRG_options Option selection word.
;
; unsigned * PRG_bufaddr Address of buffer for flash/program data
; unsigned PRG_bufsize Size of program data buffer
; unsigned PRG_devsize Size of programmable device
; unsigned * PRG_paddr First programming address
; unsigned PRG_page Programming page
; unsigned PRG_length Length of programming data
; unsigned PRG_status Status of programming functions
;
; PUBLIC FUNCTIONS:
; PRG_init Initialize system for programming
; PRG_program Program a block
; PRG_erase Erase a programmable device
; PRG_verify Verify a block
;
; PRIVIATE FUNCTIONS:
; None
;
; USAGE/LIMITATIONS
; The global and public function symbol values must be available in the
; COFF file for the loader to work properly. The functions are not
; intended to be called by another program.
;
; NOTES:
; The program needs three memory sections to operate:
; Actual location of these sections in the memory is defined in the
; linker command file - *.cmd
;
; PRG_text Executable section for this program
; PRG_parms Variable section for this program
; PRG_data Data buffer used to hold programming data
;
; The size and location of each section is user defined. The
; loader program will read the value of PRG_bufaddr and PRG_bufsize to
; determine the location and size of the PRG_data section.
;
; JTAG loader command file format
; PRG2xxw -[options] c2xxprog.out Flashcode.out
; <JTAG loader) <Flash algorithm> <COFF file to be flashed>
;
; Source : TI Tools group, Houston
;
; -Modified for F2xx devices: 12/24/96
; -Added appropriate init code for PLL & WD disable 01/15/97
; -Added Conditional assembly for PLL Mult factor selection 02/26/97
; -Modified for: Compatibility with -s option and new algorithms 09/10/97
; -Modified to suit 24x-Lite - 03/19/98
; -Modified to interface to the API algos 05/25/01
;
; ***************************************************************************
; INCLUDE FILES
; ***************************************************************************
.INCLUDE ..\include\VAR.h ;GET VARIABLES AND CONSTANTS.
; ***************************************************************************
; PUBLIC DECLARATIONS
; ***************************************************************************
.global PRG_init, PRG_program, PRG_erase, PRG_verify, PRG_stop
.global PRG_bufaddr, PRG_bufsize, PRG_devsize, PRG_paddr, PRG_page
.global PRG_length, PRG_status,PRG_options,PARMS
.global PROTECT, SEG_ST,SEG_END
; ***************************************************************************
; PRIVATE DECLARATIONS
; ***************************************************************************
BUFFER_SIZE .set 200 ;Size of program buffer size
;Can be increased based available
;memory
DEVICE_SIZE .set 0ffffh ;Size of device to be programmed.
;Default is maximum address range for
;the F2xx
; ***************************************************************************
; Define the PRG_parm section
; ***************************************************************************
.sect "PRG_parm" ;Actual location in memory defined is
PARMS: ;linker command file
PRG_bufaddr .word PrgBuffer ;Address of buffer for program
PRG_bufsize .word BUFFER_SIZE ;Tells host of buffer size
PRG_devsize .word DEVICE_SIZE ;Tells host of device size
* ;The following parameters will be redefined by
* ;PRG2xxw based on the flashcode.out
;Algorithm Array variables
PRG_options .word 04000h ;Default to flash0 only (0100000000000000b).
;This will be re-initiatlized by -s option.
PRG_paddr .word 0 ;First address to program
PRG_page .word 0 ;Page to program
PRG_length .word 0 ;Length of block to program
PRG_status .word 0 ;Status of programming functions
Temp .word 0 ;Temp location for verify
PROTECT .word 0FF00h ;Enable all 8 segments
SEG_ST .word 00000h ;Segment start address. Initialize to
;segment0/flash0.
SEG_END .word 03FFFh ;Segment end address. Initialize to
;segment7/flash0.
; ***************************************************************************
; Define the PRG_data section
; ***************************************************************************
.sect "PRG_data" ;Flash code data buffer
PrgBuffer .space BUFFER_SIZE*16 ;Initializes buffer for program data
.sect "ary_var" ; Initialize buffer to 0x0000
.space 16*16
;
; ***************************************************************************
; Define the PRG_text section
; ***************************************************************************
.sect "PRG_text" ; Control and algorithm module
; F**************************************************************************
; Name: PRG_init
;
; Description
; Initialize the F2xx device for programming
;
; Inputs
; None
; Outputs
; int PRG_status Pass =0; Fail = 1;
;
; Notes: Can be used to include device specific initialization before executing
; Flash algorithms in PRG_erase,PRG_program, PRG_verify and PRG_stop
;
; F**************************************************************************
PRG_init: CALL INIT_DEVICE
ldp #PARMS ; Defines data page
splk #0,PRG_status
B PRG_stop
;
; F**************************************************************************
; Name: PRG_program
;
; Description
; Transfers a block of data from RAM to Flash/programmable memory
; PRG2xxw will execute this after PRG_init by default. If the command
; line does not have any options -e or -v.
; If the option specified is -e then the execution sequence will be:
; PRG_init > PRG_erase > PRG_program and then PRG_stop
; If the option specified is -v, then the execution sequence will be:
; PRG_init > PRG_program, PRG_verify and then PRG_stop
; Inputs
; unsigned *PRG_paddr Pointer to first address to program
; unsigned PRG_page Page to program, Program == 0, Data == 1
; unsigned PRG_length Number of words to program
; unsigned *PRG_bufaddr Pointer to program data buffer
;
; Outputs
; int PRG_status Pass =0; Fail = 1;
;
; Notes:
; The PRG_page value is setup by the host but not used in this case.
; The assumption is that the programmable device is in program space.
; F**************************************************************************
PRG_program: B PRG_verify ; use the dummy end in PRG_verify
; to set an error in this case
; since no program routine exists in
; ; this file, the ERASE file.
; F**************************************************************************
; Name: PRG_erase
;
; Description
; Erase a programmed device. This module will be executed if the PRG2xxw
; command line option specified is -e.
; Inputs
; None:
;
; Outputs
; int PRG_status Pass =0; Fail = 1;
;
; Notes:
; The erase is device specific.
; F**************************************************************************
PRG_erase:
CALL INIT_DEVICE
CALL_ERASE:
LDP #PRG_options ;Get sector command from cmd line.
LACC PRG_options ;
LDP #flashAlgoVars.SECTOR_CMD ; Store it in SECTOR_MASK.
SACL flashAlgoVars.SECTOR_CMD
CALL ERASE_FLASH
CHECK_ERROR:
LACC flashAlgoVars.ALGO_STATUS ; Get the algo error code.
LDP #PRG_status
SACL PRG_status ; Copy the error back to the variable
; which prg2xx looks at.
b PRG_stop
;
; F**************************************************************************
; Name: PRG_verify
;
; Description
; Verify a block of programmed data. This module will be excuted if the
; command line option in PRG2xxw is -v.
;
; Inputs Defined by host
; unsigned *PRG_paddr Pointer to first address to verify
; unsigned PRG_page Page to verify, Program == 0, Data == 1
; unsigned PRG_length Number of words to verify
; unsigned *PRG_bufaddr Pointer to verify data buffer
;
; Outputs
; int PRG_status Pass =0; Fail = 1;
;
; Notes:
; The PRG_page value is setup by the host but not used in this case.
; The assumption is that the programmable device is in program space.
; F**************************************************************************
PRG_verify:
err1:
ldp #PARMS
error: splk #1,PRG_status ;
b PRG_stop ;Generate a breakpoint
;
; F**************************************************************************
; Name: PRG_stop
;
; Description
; Exit routine for all programming functions.
;
; Inputs
; None
;
;
; Outputs
; None
;
; Notes:
; Exit point for all programming functions
; The ESTOP opcode gets executed as a NOP when not in emulation
; mode. The "b $" will keep the program from running off if
; not in emulation mode.
;
; F**************************************************************************
PRG_stop:
.word 0BE90h ;SWI instruction
b $
INIT_DEVICE
LDP #0E0h
SPLK #PLL_RATIO_CONST,7018h
SPLK #000Bh,7019h
SPLK #6fh,7029h
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -