Dear Sir or Madam:
I am trying and use DM642, with CCS2.2, window XP environment. To minimize the demand for the memory, I have to strip off BIOS. So I use the comnad line + command files for compiling, linking, hex conversion unitilities. I use the Borland make.exe and a makefile.
The command line for the compile is $(CCompile) -i$(CI) -al $&.asm $&.obj, where CCompile = ${PATH}\bin\cl6x -c -o -ms -g -mv6400+ And & will be replaced by an input file. The command line for the linking is
$(LINKER) $(CCOBJECT) link.cmd, Where LINKER = ${PATH}\bin\cl6x -z And the link.cmd contains the following items:
radar.obj conv.obj peakFFT2048.obj peakFFT1024.obj target.obj timer.obj win.obj global.obj rs232.obj display.obj dspspl.obj serialout.obj
cmd.obj int.obj eeprom.obj power.obj twid1024.obj wico1024.obj edma.obj ad.obj emif.obj leddata.obj vector2.obj (these are input object files)
-m a.map
-c /* C link convention */
-stack 0x2000 /* system stack size */
-i d:\ti\c6000\cgtools\include
-l d:\ti\c6000\cgtools\lib\rts6400.lib d:\ti\c6000\cgtools\lib\dsp64x.lib
-o a.out
MEMORY
{
CE0: o = 080000000h l = 01h
CE2: o = 0a0000000h l = 01000000h
CE3: o = 0b0000000h l = 01h
VECS: o = 00000000h l = 00000500h /* allow for 8 interrupt service routine each with 8 instructions 32 bits long. ?? */
CODE2: org = 0x3000 len = 0x1000 /* 20K */
CODE: org = 0x4000 len = 0x10000 /* 20K */
STACK: org = 0x1E000 len = 0x2000 /* FOR SYSTEM STACK */
AD_A: org = 0x20000 len = 0x2000 /* For sine/cosine table, 2K * 4bytes = 8K bytes. */
DISPLAY_DATA: org = 0x3B800 len = 0x100 /* */
TWID: org = 0x3c000 len = 0x2000 /* For sine/cosine table, 2K * 4bytes = 8K bytes. */
WIN_COE: org = 0x3e000 len = 0x1000 /* Ror win coef, 512 * 4 = 2048, 2K bytes. */
ROM_ROOT: org = 0x90000000 len = 0x400
}
/* SPECIFY THE SECTION ALLOCATION INTO MEMORY */
SECTIONS
{
.text: > CODE /* CODE */
.cinit: > CODE /* INITIALIZATION TABLES*/
.const: > CODE /* CONSTANTS */
.bss: > CODE /*fill=0x00; /* */
.data: > CODE
.sect "LED_DISPLAY_DATA": > DISPLAY_DATA
.stack: > STACK /* SYSTEM STACK */
.sect "win_coef": > WIN_COE
.sect "twiddler": > TWID
.sect "AD": > AD_A
.sect "vectors": > VECS
.sect "vector2": > VECS
}
The hex utility use a command line
d:\ti\c6000\cgtools\bin\hex6x.exe firmware.cmd, Where the "firmware.cmd" is as follows
a.out
-m3 /* MOTOROLA-S format */
-byte
-image
-zero
-boot
-bootorg 0x90000400
/*-bootsection .boot_load 0x90000000 , But the "-bootsection" can not be recognized. */
/* --entry_point = 0x2860 , but the -e can not be recognized. */
-map a.mxp /* Show the detail of the conversion process */
ROMS
{
EPROM: org = 0x90000000, len = 0x20000, memwidth = 8,
romwidth = 8, /* rom device width */
fill= 0xFFFFFFFF, files = {a.hex}
}
The first item of the boot loader output is always the starting address of the eprom, instead of the program entry point. (The program entry point will be entry point after the code is booted from eprom to RAM). I can not get the section length and section loading address as well in the a.hex output file. Please tell me why???
My email is andrew.jiang0@gmail.com. Thanks.