DSPRelated.com
Forums

Bootloader for 'C6701

Started by yaksak_kr May 15, 2003
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 }
}