HI, all. I am trying to develop the control-board using the TMS320C6701. In fact, I am analysing several documents about this and coding by myself through this analysis because I am on this work for the first time and not used to doing this part of study. So now I am asking you for your expertised viewpoint about TMS320C6701 ROM boot. I attach a FILE-SCRIPT(below) which includes the the C6701's BOOTLOADER by my own method. This bootloader files are based on c6711 source and modified for c6701. I sincerely hope that you would go over this file and send me back your experienced opinion. I would really appreciate it if someone can point me to the bootloader. Thank you very much in advance, Regards sewook, suh Daewon Mechatronics, Digital Control - R&D, Republic of Korea. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> READ THIS FIRST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Development Environment : Code Compose Studio 2.0 hex conversion utility : hex6x.exe lnk.cmd (vector.asm, boot.asm, main.c ) ------------------> bootloader.out (using CCS2.0) out2hex.cmd bootloader.out > bootloader.hex (using hex6x) CPU : TMS320C6701 Memory Map : MAP0 Bootmode : BOOTMODE[4:0] = 01011 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> boot.asm >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .title "Bootup Utility for 6701" .option D,T .length 65 .width 85 BOOT_SIZE .equ 0x10000 ROM_START .equ 0x01000000 ;ROM (CE1) CODE_SIZE .equ 0x40000 CODE_START .equ 0x00010000 EMIF_GCTRL .equ 0x01800000;EMIF Global Control Rgister EMIF_CE0_CTRL .equ 0x01800008;EMIF CE0 Control Register EMIF_CE1_CTRL .equ 0x01800004;EMIF CE1 Control Register EMIF_CE2_CTRL .equ 0x01800010;EMIF CE2 Control Register EMIF_CE3_CTRL .equ 0x01800014;EMIF CE3 Control Register EMIF_SDRAM_CTRL .equ 0x01800018;EMIF SDRAM Control Register EMIF_SDRAM_REF .equ 0x0180001C;EMIF Refresh Register ; RBTR8 preemtion, SBSRAM at 1/2, clk1&2 disable, hold enabled, ; no clock inv ; CE0 space SBSRAM, all other field are dont cares ; CE1 space async expansion ; CE2,CE3 space SDRAM, all other fields are dont cares ; SDRAM, default TRC TRP TRCD, init SDRAM, refresh enable, ; 16 bit devices ; SDRAM default refresh period GLOBAL_CTRL .equ 0x00003060 CE0_CTRL .equ 0x00000040 CE1_CTRL .equ 0x40F40303 CE2_CTRL .equ 0x00000030 CE3_CTRL .equ 0x00000030 SDRAM_CTRL .equ 0x07229000 SDRAM_TIMING .equ 0x00000619 .sect ".boot_load" .global _boot .ref _c_int00 _boot: mvkl EMIF_GCTRL,a4 || mvkl GLOBAL_CTRL,b4 mvkh EMIF_GCTRL,a4 || mvkh GLOBAL_CTRL,b4 stw b4,*a4 mvkl EMIF_CE0_CTRL,a4 || mvkl CE0_CTRL,b4 mvkh EMIF_CE0_CTRL,a4 || mvkh CE0_CTRL,b4 stw b4,*a4 mvkl EMIF_CE1_CTRL,a4 || mvkl CE1_CTRL,b4 mvkh EMIF_CE1_CTRL,a4 || mvkh CE1_CTRL,b4 stw b4,*a4 mvkl EMIF_CE2_CTRL,a4 || mvkl CE2_CTRL,b4 mvkh EMIF_CE2_CTRL,a4 || mvkh CE2_CTRL,b4 stw b4,*a4 mvkl EMIF_CE3_CTRL,a4 || mvkl CE3_CTRL,b4 mvkh EMIF_CE3_CTRL,a4 || mvkh CE3_CTRL,b4 stw b4,*a4 mvkl EMIF_SDRAM_CTRL,a4 || mvkl SDRAM_CTRL,b4 mvkh EMIF_SDRAM_CTRL,a4 || mvkh SDRAM_CTRL,b4 stw b4,*a4 mvkl EMIF_SDRAM_REF,a4 || mvkl SDRAM_TIMING,b4 mvkh EMIF_SDRAM_REF,a4 || mvkh SDRAM_TIMING,b4 stw b4,*a4 ;**********************************************************/ mvkl CODE_START,a4 || mvkl ROM_START+BOOT_SIZE,b4 mvkh CODE_START,a4 || mvkh ROM_START+BOOT_SIZE,b4 zero a1 _boot_loop2: ldb *b4++,b5 mvkl CODE_SIZE,b6 add 1,a1,a1 || mvkh CODE_SIZE,b6 cmplt a1,b6,b0 nop stb b5,*a4++ [b0] b _boot_loop2 nop 5 mvkl .s2 _c_int00, b0 mvkh .s2 _c_int00, b0 b .s2 b0 nop 5 ; end of the bootup routine >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> vector.asm >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .ref _boot .sect ".vectors" ;Each vector is one fetch packet in length and ;is aligned on an 8-word boundary. RESET_RST: mvkl .s2 _boot, b0 ;Load boot address(low) mvkh .s2 _boot, b0 ;Load boot address(high) b .s2 b0 ;Branch to boot nop nop nop nop nop NMI_RST: nop nop nop nop nop nop nop nop RESV1: nop nop nop nop nop nop nop nop RESV2: nop nop nop nop nop nop nop nop INT4: nop nop nop nop nop nop nop nop INT5: nop nop nop nop nop nop nop nop INT6: nop nop nop nop nop nop nop nop INT7: nop nop nop nop nop nop nop nop INT8: nop nop nop nop nop nop nop nop INT9: nop nop nop nop nop nop nop nop INT10: nop nop nop nop nop nop nop nop INT11: nop nop nop nop nop nop nop nop INT12: nop nop nop nop nop nop nop nop INT13: nop nop nop nop nop nop nop nop INT14: nop nop nop nop nop nop nop nop INT15: nop nop nop nop nop nop nop nop >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Command File for the Linker TMS320C6701 - MAP0 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -c boot.obj main.obj vector.obj -m bootmap -heap 0x200 -stack 0x200 MEMORY { SBS_VECS : org = 0x00000000, len = 0x00000220 SBS_BOOT : org = 0x00000220, len = 0x0000FDC0 SBS_CODE : org = 0x00010000, len = 0x00040000 ROM_VECS : org = 0x01000000, len = 0x00000200 ROM_BOOT : org = 0x01000200, len = 0x0000FC00 ROM_CODE : org = 0x01010000, len = 0x00040000 CE2 : org = 0x02000000, len = 0x01000000 CE3 : org = 0x03000000, len = 0x01000000 IPRAM : org = 0x01400000, len = 0x00010000 IDRAM : org = 0x80000000, len = 0x00010000 } SECTIONS { .vectors : load = ROM_VECS, run = SBS_VECS .boot_load : load = ROM_BOOT, run = SBS_BOOT .text : load = ROM_CODE, run = SBS_CODE .cinit : load = ROM_CODE, run = SBS_CODE .const : load = ROM_CODE, run = SBS_CODE .switch : load = ROM_CODE, run = SBS_CODE .far > IDRAM .cio > IDRAM .data > IDRAM .stack > IDRAM .bss > IDRAM .sysmem > IDRAM } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Command File for the hex utility >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> bootloader.out -i /*Intel hex format*/ -map mainhex.map /*Generate a map file*/ -byte /*Number output file locations by bytes*/ /*rather than using target addressing*/ -image /*Specify image mode*/ -memwidth 8 /*Define the system memory word width*/ -romwidth 8 /*Specify the ROM device width*/ -order L /*Output file is in little endian format*/ ROMS { EPROM : org = 0x01000000, len = 0x40000, romwidth = 8, files = { bootloader.hex } } |
Bootloader for 'C6701
Started by ●May 15, 2003