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

📄 serialflash.asm

📁 一个很全面的TMS320F2812的最小系统的工程
💻 ASM
字号:
;;###########################################################################
;;
;; FILE: serialflash.asm
;;
;; TITLE: F2810/12 Boot Rom Initialization and Exit routines.
;;
;; Functions:
;;
;; _serialflash
;; 
;;
;; Notes:
;;
;;###########################################################################
;;
;; Ver | dd mmm yyyy | Who | Description of changes
;; =====|=============|==============|=======================================
;; 1.0 | 12 Mar 2002 | LH | PG Release.
;; | | |
;;###########################################################################
	.def	_SerialFlash
	.ref	_SCI_Boot
	.sect ".text"
;–––––––––––––––––––––––––––––––––––––––––––––––
; _SerialFlash
;–––––––––––––––––––––––––––––––––––––––––––––––
;–––––––––––––––––––––––––––––––––––––––––––––––
; This function performs the initial boot routine
; for the F2810/12 boot ROM.
;
; This module performs the following actions:
;
; 1) Initalizes the stack pointer
; 2) Sets the device for C28x operating mode
; 3) Calls the main boot functions
; 4) Calls an exit routine
;–––––––––––––––––––––––––––––––––––––––––––––––
__stack	.set 0x0400

_SerialFlash:
;lg/040616 Initalize the stack pointer.
;lg/040616	MOV SP, #__stack		; Initalize the stack pointer
;lg/040616					; Initalize the device for running in C28x mode.
;lg/040616	C28OBJ				; Select C28x object mode
;lg/040616	C28ADDR				; Select C27x/C28x addressing
;lg/040616	C28MAP				; Set blocks M0/M1 for C28x mode
;lg/040616	CLRC	PAGE0			; Always use stack addressing mode
;lg/040616	MOVW	DP,#0			; Initialize DP to point to the low 64 K
;lg/040616	CLRC	OVM
;lg/040616; Set PM shift of 0
;lg/040616	SPM	0
;lg/040616; Read the password locations – this will unlock the
;lg/040616; CSM only if the passwords are erased. Otherwise it
;lg/040616; will not have an effect.
;lg/040616	MOVL	XAR1,#0x3F7FF8;
;lg/040616	MOVL	XAR0,*XAR1++
;lg/040616	MOVL	XAR0,*XAR1++
;lg/040616	MOVL	XAR0,*XAR1++
;lg/040616	MOVL	XAR0,*XAR1

; Decide which boot mode to use
	LCR	_SCI_Boot
; Cleanup and exit. At this point the EntryAddr
; is located in the ACC register
	BF	_ExitBoot,UNC
;–––––––––––––––––––––––––––––––––––––––––––––––
; _ExitBoot
;–––––––––––––––––––––––––––––––––––––––––––––––
;–––––––––––––––––––––––––––––––––––––––––––––––
;This module cleans up after the boot loader
;
; 1) Make sure the stack is deallocated.
; SP = 0x400 after exiting the boot
; loader
; 2) Push 0 onto the stack so RPC will be
; 0 after using LRETR to jump to the
; entry point
; 2) Load RPC with the entry point
; 3) Clear all XARn registers
; 4) Clear ACC, P and XT registers
; 5) LRETR – this will also clear the RPC
; register since 0 was on the stack
;–––––––––––––––––––––––––––––––––––––––––––––––
_ExitBoot:
;–––––––––––––––––––––––––––––––––––––––––––––––
; Insure that the stack is deallocated
;–––––––––––––––––––––––––––––––––––––––––––––––
	MOV	SP,#__stack
;–––––––––––––––––––––––––––––––––––––––––––––––
; Clear the bottom of the stack. This will endup
; in RPC when we are finished
;–––––––––––––––––––––––––––––––––––––––––––––––
	MOV	*SP++,#0
	MOV	*SP++,#0
;–––––––––––––––––––––––––––––––––––––––––––––––
; Load RPC with the entry point as determined
; by the boot mode. This address will be returned
; in the ACC register.
;–––––––––––––––––––––––––––––––––––––––––––––––
	PUSH	ACC
	POP	RPC
;–––––––––––––––––––––––––––––––––––––––––––––––
; Put registers back in their reset state.
;
; Clear all the XARn, ACC, XT, and P and DP
; registers
;
; NOTE: Leave the device in C28x operating mode
; (OBJMODE = 1, AMODE = 0)
;–––––––––––––––––––––––––––––––––––––––––––––––
	ZAPA
	MOVL	XT,ACC
	MOVZ	AR0,AL
	MOVZ	AR1,AL
	MOVZ	AR2,AL
	MOVZ	AR3,AL
	MOVZ	AR4,AL
	MOVZ	AR5,AL
	MOVZ	AR6,AL
	MOVZ	AR7,AL
	MOVW	DP, #0
;––––––––––––––––––––––––––––––––––––––––––––––––
; Restore ST0 and ST1. Note OBJMODE is
; the only bit not restored to its reset state.
; OBJMODE is left set for C28x object operating
; mode.
;
; ST0 = 0x0000 ST1 = 0x0A0B
; 15:10 OVC = 0 15:13 ARP = 0
; 9: 7 PM = 0 12 XF = 0
; 6 V = 0 11 M0M1MAP = 1
; 5 N = 0 10 reserved
; 4 Z = 0 9 OBJMODE = 1
; 3 C = 0 8 AMODE = 0
; 2 TC = 0 7 IDLESTAT = 0
; 1 OVM = 0 6 EALLOW = 0
; 0 SXM = 0 5 LOOP = 0
; 4 SPA = 0
; 3 VMAP = 1
; 2 PAGE0 = 0
; 1 DBGM = 1
; 0 INTM = 1
;–––––––––––––––––––––––––––––––––––––––––––––––
	MOV	*SP++,#0
	MOV	*SP++,#0x0A0B
	POP	ST1
	POP	ST0
;––––––––––––––––––––––––––––––––––––––––––––––––
; Jump to the EntryAddr as defined by the
; boot mode selected and continue execution
;–––––––––––––––––––––––––––––––––––––––––––––––
	LRETR
;eof ––––––––––

⌨️ 快捷键说明

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