Hello,
I'm writing code for C64x+ DSP inside DM3730 using CCS v5.5. I have the following assembly code:
.global _vectors
.global _vector0
.global _vector1
.global _vector2
.global _vector3
.global _vector4
.global _vector5
.global _vector6
.global _vector7
.global _vector8
.global _vector9
.global _vector10
.global _vector11
.global _vector12
.global _vector13
.global _vector14
.global _vector15
.ref code_start
.ref gpTimer5_isr_dsp
;------------------------------------------------------------------------------
; This is a macro that instantiates one entry in the interrupt service table.
;------------------------------------------------------------------------------
VEC_ENTRY .macro addr
STW B0,*B15--
STW A0,*B15--
STW B1,*B15--
STW B2,*B15--
STW B3,*B15--
STW B4,*B15--
MVKL addr,B0
MVKH addr,B0
B B0
LDW *++B15,B4
LDW *++B15,B3
LDW *++B15,B2
LDW *++B15,B1
LDW *++B15,B0
LDW *++B15,A0
LDW *++B15,B0
B IRP
NOP 5
.endm
;------------------------------------------------------------------------------
; This is a dummy interrupt service routine used to initialize the IST.
;------------------------------------------------------------------------------
_vec_dummy:
B B3
NOP 5
;------------------------------------------------------------------------------
; This is the actual interrupt service table (IST). It is properly aligned and
; is located in the subsection .text:vecs. This means if you don't explicitly
; specify this section in your linker command file, it will default and link
; into the .text section. Remember to set the ISTP register to point to this
; table.
;------------------------------------------------------------------------------
.sect ".text"
.align 1024
_vectors:
_vector0: VEC_ENTRY code_start ;RESET
_vector1: VEC_ENTRY _vec_dummy ;NMI
_vector2: VEC_ENTRY _vec_dummy ;RSVD
_vector3: VEC_ENTRY _vec_dummy
_vector4: VEC_ENTRY gpTimer5_isr_dsp ;INT4
_vector5: VEC_ENTRY _vec_dummy
_vector6: VEC_ENTRY _vec_dummy
_vector7: VEC_ENTRY _vec_dummy
_vector8: VEC_ENTRY _vec_dummy
_vector9: VEC_ENTRY _vec_dummy
_vector10: VEC_ENTRY _vec_dummy
_vector11: VEC_ENTRY _vec_dummy
_vector12: VEC_ENTRY _vec_dummy
_vector13: VEC_ENTRY _vec_dummy
_vector14: VEC_ENTRY _vec_dummy
_vector15: VEC_ENTRY _vec_dummy
gpTimer5_isr_dsp function is defined in other file. When i build the whole project, i got a link error #10234-D: unresolved symbols remain. Below is the output of the build. Why do i get a link error even though i already reference the function with ".ref" directive? am i missing something? any help is greatly appreciated. THANKS!
'Building target: Mentis_DSP.out'
'Invoking: C6000 Linker'
"C:/ti/ccsv5/tools/compiler/c6000_7.4.4/bin/cl6x" -mv64+ --abi=coffabi -g --define=dm3730 --define=DSP_CORE --display_error_number --diag_warning=225 --diag_wrap=off -k -z --stack_size=0x800 -m"Mentis_DSP.map" --heap_size=0x800 -i"C:/ti/ccsv5/tools/compiler/c6000_7.4.4/lib" -i"C:/ti/ccsv5/tools/compiler/c6000_7.4.4/include" --reread_libs --define=DSP_CORE=1 --warn_sections --display_error_number --diag_suppress=10063 --diag_wrap=off --xml_link_info="Mentis_DSP_linkInfo.xml" --entry_point=code_start --rom_model -o "Mentis_DSP.out" "./CPU_Peripheral/serial.obj" "./CPU_Peripheral/ns16550.obj" "./CPU_Peripheral/mailbox.obj" "./CPU_Peripheral/gpTimer.obj" "./CPU_Peripheral/dma.obj" "./printf.obj" "./DSP_main.obj" "./DSP_interruptASM.obj" "./DSP_interrupt.obj" "./DSP_codeStart.obj" "../DM3730.cmd" -l"libc.a"
<Linking>
undefined first referenced
symbol in file
--------- ----------------
gpTimer5_isr_dsp ./DSP_interruptASM.obj
error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "Mentis_DSP.out" not built