absolute jump to application from bootloader

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

absolute jump to application from bootloader

Jump to solution
2,042 Views
nordic56
Contributor I

Hi,

 

I´m looking for a solution for  my bootloader.

I´m using 56F8025 and CW_forDSC56800E V8.2

 

After downloading the firmware I want the program to jump to an absolute address.

The absolute address is the entry point of the application, stored in the downloaded relocated vector table.

 

Since I´m not familiar with assembler for dsc 56f800/E, is there any idea how to manage this absolute jump for the dsc56F800 family?

 

 

thanks in advance.

Labels (1)
Tags (1)
0 Kudos
1 Solution
322 Views
FTSolutions
Contributor III

I am not as familiar with the 56f8025, but on the 56f8367 and 56f8357s I use, the codewarrior PE tool will store the user's starting address in the top 32bits of dataflash memory - if you have the PE license it does this automatically if you check "Bootloader support = Yes" in the processor expert.  IF you don't have PE license, you could do the similar thing with your app code with the address of main().   You must loadthe 32-bit address value into an unsigned long "StartAddress".

 

The bootloader then just does the following (in the '357 and '367 anyhow):

#define USER_INTERRUPT_VECTOR_ADDRESS (0x00000000UL)

#define INTC_VBA                      *((volatile word *)0x0000F1AA)

 

  /****************************************************************************
  / change base address of the interrupt vector table for user's application
  /****************************************************************************/
   setReg(INTC_VBA, USER_INTERRUPT_VECTOR_ADDRESS >> 8);
   asm(nop);
   asm(nop);
  /****************************************************************************
  / call user's application
  /****************************************************************************/
   asm(move.l StartAddress, N);
   asm(jmp (N));                       // and off we go to application
   asm(nop);
   asm(nop);

 

Hope this helps - my apologies if I misunderstood your question.

 

View solution in original post

0 Kudos
1 Reply
323 Views
FTSolutions
Contributor III

I am not as familiar with the 56f8025, but on the 56f8367 and 56f8357s I use, the codewarrior PE tool will store the user's starting address in the top 32bits of dataflash memory - if you have the PE license it does this automatically if you check "Bootloader support = Yes" in the processor expert.  IF you don't have PE license, you could do the similar thing with your app code with the address of main().   You must loadthe 32-bit address value into an unsigned long "StartAddress".

 

The bootloader then just does the following (in the '357 and '367 anyhow):

#define USER_INTERRUPT_VECTOR_ADDRESS (0x00000000UL)

#define INTC_VBA                      *((volatile word *)0x0000F1AA)

 

  /****************************************************************************
  / change base address of the interrupt vector table for user's application
  /****************************************************************************/
   setReg(INTC_VBA, USER_INTERRUPT_VECTOR_ADDRESS >> 8);
   asm(nop);
   asm(nop);
  /****************************************************************************
  / call user's application
  /****************************************************************************/
   asm(move.l StartAddress, N);
   asm(jmp (N));                       // and off we go to application
   asm(nop);
   asm(nop);

 

Hope this helps - my apologies if I misunderstood your question.

 

0 Kudos