I'm pretty sure this problem was a product of my use of equates (.equ) in my code. I use aliases for register names to make my code more readable, but in the segment below I was using the aliases incorrectly, using ADBitsToShift in one case and ADBitsToSend in another.
At any rate, I've solved my problem!
Hello.
I am using CCS 5 under Windows XP and writing assembly language. I recently started getting the following error message:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
H:\MSP430\CCS Program Source\ccsv5\utils\bin\gmake -k all
'Building file: ../ComTest.asm'
'Invoking: MSP430 Compiler'
"H:/MSP430/CCS Program Source/ccsv5/tools/compiler/msp430_4.1.0/bin/cl430" -vmsp --abi=coffabi -g --include_path="H:/MSP430/CCS Program Source/ccsv5 /ccs_base/msp430/include" --include_path="H:/MSP430/CCS Program Source/ccsv5/tools/compiler/msp430_4.1.0/include" --advice:power=all --define=__MSP430G2353__ --diag_warning=225 --display_error_number --printf_support=minimal -k --asm_listing --syms_ignore_case --preproc_with_compile --preproc_dependency="ComTest.pp" "../ComTest.asm"
"../ComTest.asm", INTERNAL ERROR!: AZ1 defined differently in each pass
This may be a serious problem. Please contact customer support with a
description of the problem and a sample of the sourcefile that caused this
message to appear.
>> Compilation failure
gmake: *** [ComTest.obj] Error 1
gmake: Target `all' not remade because of errors.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The code section that is causing the problem looks like this:
ADS9850Short:
mov.b &RxTxCount,RB ; get the command modifier from RxTxCount as set by Dispatch routine
rla.w RB ; multiply by two for word offset
and.b #0FEh,RB ; make sure lsb is zero
mov.w ADSCommands(RB),PC ; jump to the command routine via the ADLongCommands
ADSCommands:
.word AD2F0 ; 0 Multiply the saved F0 settings by 2 and send it
.word AD2F1 ; 2 Multiply the saved F1 settings by 2 and send it
.word ADDF0 ; 4 Divide the saved F0 by 2 and send it
.word ADDF1 ; 6 Divide the saved F1 by 2 and send it
.word AZ0 ; 8 Send F0
.word AZ1 ; A Send F1
.word XMITErr ; go transmit error response 7
.word XMITErr ; go transmit error response 8
AD2F0:
mov.w #F04,ADSPointer ; point to the LSB of the stored frequency setting (highest address)
jmp AD2Exit
AD2F1:
mov.w #F14,ADSPointer ; point to the LSB of the stored frequency setting (highest address)
AD2Exit:
push ADSPointer ; save the highest address pointer
mov.b #04h,ADSBitsToShift ; set number of bytes to shift -- always 4
call #LongShiftLeft ; shift it one bit left = multiply it by 2
ADSExit:
pop ADSPointer
jmp ADSendControl
ADDF0:
mov.w #F01,ADSPointer ; point to the MSB of the stored frequency setting (lowest address)
jmp ADDExit
ADDF1:
mov.w #F11,ADSPointer ; point to the MSB of the stored frequency setting (lowest address)
ADDExit:
mov.b #04,ADBitsToSend
call #LongShiftRight
jmp ADSendControl
AZ0:
AZ1:
jmp xmiterr
If anyone can give me any hints about what might be going on, they would be very much appreciated -- I'm stumped.