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.

F28M36P63C2: Concerto Controller m3 Side Branching not working Properly

Part Number: F28M36P63C2
Other Parts Discussed in Thread: TMS320F28335

Dear All,

I am porting my secondary boot loader software from TMS320F28335 controller to Concerto controller.   335 controller i am using below instruction

    __asm("    LB     #0x3100000");

I want to execute above instruction in concerto controller m3 side.

I am new to ARM controller i want to go to specific address location in m3 side. I am getting problem with the below instruction.

    __asm("    bl     #0x00240000");//Flash I Address location

Build without any errors but after executing above instruction control goes to Boot ROM(I verified from Disassembly window).

I also tested below instructions in m3 side:

1.   __asm("    bl     Test_Function"); Specific memory given to  Test_Function working fine.(But this is not Recommended i.e.not supported to my application)

2.   __asm("    blx     #0x00240000");  with this instruction control goes to specified location but after executing opcode in that address location  control goes to unknown location.

2.   __asm("    pc    #0x00240000");  after executing this instruction also PC not changed still it has next line address location.

Thanks and Regards

Rakesh D

  • Rakesh,
    on Cortex M3, the bit 0 of the address branching to should be a '1', when using a compiler generated symbol or a function name, the LSB (bit 0) of the address is set to '1', so the branch to Test_function works.

    When you want to use an address directly, try ORing the address with a 0x1 before the branch. Please refer to Cortex M3 assembly guild for details on the assembler instructions you can use.

    Hope this helps.

    Best Regards
    Santosh Athuru
  • Dear Santosh,
    I tried below two options but not working.

    Option 1:

    __asm(" bl #0x00280001"); //bit0: added with 1

    disassembly window:
    Addr Loc Data(Opcode)
    002FD0F8: F280F000 bl #0x97D0F8

    after executing above instruction control goes to unknown location


    Option 2:
    __asm(" mov.w R0,#0x00280001"); //bit0: added with 1
    __asm(" blx R0"); //

    I am getting an error Invalid Immediate Operand at Line mov.w R0,#0x00280001

    In above statement instead of 0x00280001 if i give 0x00280000 build without any errors.
    But after going to R0 location control goes to unknown location.


    Kindly provide how to ORing the Bit0 position i want to go to specific address location 0x00280000.


    And also provide any link related to Cortex M3 assembly guild for assembler instructions.


    Thanks & Regards ,
    Rakesh D
  • Rakesh,
    you will have to refer to ARM documentation and learn the assembly instructions as needed. You can write C code and when you build, you can choose to keep the assembly generated files and inspect them and/or you can load the program and inspect the assembly in the debugger dis-assembly window as well.

    infocenter.arm.com/.../index.jsp


    Best Regards
    Santosh Athuru