I want to create a boot loader that will be loaded/executed at
device startup which will determine if the firmware application is
present and if so, jump (start) the application firmware. Else, it
will spin waiting of USB commands to update the firmware (virgin
boot). The ultimate goal is to have a device that is field
programmable for firmware updates. My project utilizes the
Infineon XC161CJ-16F processor and uVision3 V3.60 development tool.
Here are my questions:
1. What are the steps to creating Program A (boot loader) to start at
0xC00000 and Program B (application) to start at 0xC04000? My
confusion is getting the "Options for Target" dialog settings
correct. Are there any examples?
2. Can I download both the boot loader and application firmware
separately using my ULINK without stepping on each
otherâ€™s toes? I assume if the addressing is setup
correctly this will be possible.
Your approach is the one I am currently working on. There are some
explanations as to how to implement this.
Refer to http://www.keil.com/support/docs/132.htm
Basically you need to relocate your code not your boot loader)
somewhere else and vector your interrupts which are hard coded to the
beggining of the flash. But do it for all of them except the reset
0000H (you use this to jump to your boot loader to determine if the
firmware is valid). Once you determine if your firmware is valid you
jump to it using function pointers.
Ininclude some code:
#pragma iv(0x400) // Force the compiler to relocate the code
#pragma src // Creates the src file
#pragma asm // ASM code to redirect the interrupts.
OFFSET EQU 400H
CSEG AT 0003H ; External Interrupt 0 LJMP OFFSET + 0003H
CSEG AT 000BH ; Timer 0 overflow LJMP OFFSET + 000BH
CSEG AT 0013H ; External Interrupt 1 LJMP OFFSET + 0013H
CSEG AT 001BH ; Timer 1 overflow LJMP OFFSET + 001BH
CSEG AT 0023H ; UART LJMP OFFSET + 0023H
CSEG AT 002BH ; Timer 2 overflow LJMP OFFSET + 002BH
CSEG AT 0033H ; SPIO LJMP OFFSET + 0033H
CSEG AT 003BH ; SMB0 LJMP OFFSET + 003BH
CSEG AT 0053H ; ADC0 LJMP OFFSET + 0053H
CSEG AT 005BH ; Programmable counter array LJMP OFFSET + 005BH
CSEG AT 0063H ; Comparator0 LJMP OFFSET + 0063H
CSEG AT 0073H ; Timer 3 overflow LJMP OFFSET + 0073H
Let me know about your progress.
View all questions in Keil forum