This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/MSP430F6736: No source available for "0x21008"

Part Number: MSP430F6736
Other Parts Discussed in Thread: MSP430WARE

Tool/software: Code Composer Studio

Hello,

I am trying to debug my code on TI's EVM launchpad emeter. My code enters into SD24 ISR but when returning from ISR shows me this error.    No source available for "0x21008". Anyone help how to fix this.

  • The message "no source available..." means that the location of the program counter (0x21008 in this case) doesn't match with any of the source used to build your program so CCS was not able to open the corresponding source file.

    Are you able to set a breakpoint in the ISR and then step through and try to figure out how you are ending up at 0x21008?
  • Thanks for reply john,
    yes i am able to put break point in ISR, it breaks successfully, once it reaches to the closing brace of ISR and i try to step the execution it shows me this error suggesting to view disassembly which shows 021008: FFFF FFFF, meaning nothing is there on flash but how come it reaches to that point. Logically it should return to the main execution routine where it was interrupted by ISR. Unable to figure out.
  • Gaurav Kumar44 said:
    Logically it should return to the main execution routine where it was interrupted by ISR.

    Can you show the code of your ISR?

  • ISR(SD24B, adc_interrupt)
    {
    signed short int SD24BSample[2], noofsamples=0;
    /*Raw Samples*/
    SD24BSample[0] = (signed short int)SD24BMEMH0;
    SD24BSample[1] = (signed short int)SD24BMEMH1;
    noofsamples++;
    }
    just to check if ISR working
  • Gaurav Kumar44 said:
    ISR(SD24B, adc_interrupt)

    I assume ISR is a macro to define a function as an interrupt handler. Can you show the definition of the ISR macro as I don't recognize it as one of the standard macros from the CCS or MSP430ware include files.

    Also, are you using the TI MSP430 compiler, or a different compiler?

  • #pragma vector = SD24B_VECTOR
    ISR(SD24B, adc_interrupt)
    {
    signed short int SD24BSample[2], noofsamples=0;
    /*Raw Samples*/
    SD24BSample[0] = (signed short int)SD24BMEMH0;
    SD24BSample[1] = (signed short int)SD24BMEMH1;
    noofsamples++;
    }
    Sorry given like this...
  • using TI MSP430 compiler only
  • Gaurav Kumar44 said:
    #pragma vector = SD24B_VECTOR
    ISR(SD24B, adc_interrupt)
    {
    signed short int SD24BSample[2], noofsamples=0;
    /*Raw Samples*/
    SD24BSample[0] = (signed short int)SD24BMEMH0;
    SD24BSample[1] = (signed short int)SD24BMEMH1;
    noofsamples++;
    }

    I looked at the assembler generated by the TI v16.9.2.LTS compiler for that code. A function named ISR was created which was registered as the handler for the SD24_B interrupt source. However, the ISR function ended with a RETA instruction. For the correct operation of an interrupt handler the function must end with a RETI (return from interrupt) instruction. The fact that the function ended with a RETA instruction explains the crash on return from the function.

    Instead try the following method to defined the interrupt handler by using the __interrupt qualifier, which is that the MSP430ware examples do. I checked the generated assembler and the function ends with the expected RETI instruction:

    #pragma vector = SD24B_VECTOR
    __interrupt void SD24BISR(void)
    {
        signed short int SD24BSample[2], noofsamples=0;
        /*Raw Samples*/
        SD24BSample[0] = (signed short int)SD24BMEMH0;
        SD24BSample[1] = (signed short int)SD24BMEMH1;
        noofsamples++;
    }

  • yes it worked, thanks chester...