.title "Flash bootup utility for DM642 EVM" .option D,T .length 102 .width 140
COPY_TABLE .equ 0x90000400 EMIF_BASE .equ 0x01800000
.sect ".boot_load" .global _boot .global _my_reset .ref _c_int00
_boot: ;************************************************************************ ;* Debug Loop - Comment out B for Normal Operation ;************************************************************************
zero B1 _myloop: ; [!B1] B _myloop nop 5 _myloopend: nop
;************************************************************************ ;* Configure EMIF ;************************************************************************
mvkl emif_values, a3 ; load pointer to emif values mvkh emif_values, a3 mvkl EMIF_BASE, a4 ; load EMIF base address mvkh EMIF_BASE, a4
mvkl 0x0009, b0 ; load number of registers to set mvkh 0x0000, b0
emif_loop: ldw *a3++, b5 ; load register value sub b0,1,b0 ; decrement counter nop 2 [ b0] b emif_loop stw b5, *a4++ ; store register value nop 4
;**************************************************************************** ;* Copy code sections ;**************************************************************************** mvkl COPY_TABLE, a3 ; load table pointer mvkh COPY_TABLE, a3
ldw *a3++, b1 ; Load entry point
copy_section_top: ldw *a3++, b0 ; byte count ldw *a3++, a4 ; ram start address nop 3
[!b0] b copy_done ; have we copied all sections? nop 5
copy_loop: ldb *a3++,b5 sub b0,1,b0 ; decrement counter [ b0] b copy_loop ; setup branch if not done [!b0] b copy_section_top zero a1 [!b0] and 3,a3,a1 stb b5,*a4++ [!b0] and -4,a3,a5 ; round address up to next multiple of 4 [ a1] add 4,a5,a3 ; round address up to next multiple of 4
;**************************************************************************** ;* Jump to entry point ;**************************************************************************** copy_done: b .S2 b1 nop 5
emif_values: .long 0x000520f8 ; GBLCTL .long 0xfff1d10b ; CECTL1 (Flash/FPGA) .long 0xffffffd3 ; CECTL0 (SDRAM) .long 0x00000000 ; Reserved .long 0xffffff03 ; CECTL2 .long 0xffffff03 ; CECTL3 .long 0x57119000 ; SDCTL .long 0x00000446 ; SDTIM (refresh period) .long 0x0005452b ; SDEXT
; .long 0x00052078 ; GBLCTL ; .long 0x73a28e01 ; CECTL1 (Flash/FPGA) ; .long 0xffffffd3 ; CECTL0 (SDRAM) ; .long 0x00000000 ; Reserved ; .long 0x22a28a22 ; CECTL2 ; .long 0x22a28a22 ; CECTL3 ; .long 0x57115000 ; SDCTL ; .long 0x0000081b ; SDTIM (refresh period) ; .long 0x001faf4d ; SDEXT .sect ".reset" _my_reset: mvkl _c_int00, b1 ; reset mvkh _c_int00, b1 nop 5 b .S2 b1 nop 5 |