Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: Newbee: bootloader locked.

2006-03-21 by planiup

Hello:

First of all, thanks for your fast response.

I had tried what you say, but with the same results. What I do is 
include this file in my project (I'm not usign GNU-GCC but IAR):

MODE_BITS	DEFINE	0x1F		; Bit mask for mode bits in 
CPSR
USR_MODE	DEFINE	0x10		; User mode
FIQ_MODE	DEFINE	0x11		; Fast Interrupt Request mode
IRQ_MODE	DEFINE	0x12		; Interrupt Request mode
SVC_MODE	DEFINE	0x13		; Supervisor mode
ABT_MODE	DEFINE	0x17		; Abort mode
UND_MODE	DEFINE	0x1B		; Undefined Instruction mode
SYS_MODE	DEFINE	0x1F		; System mode
	

;---------------------------------------------------------------
; ?RESET
; Reset Vector.
; Normally, segment INTVEC is linked at address 0.
; For debugging purposes, INTVEC may be placed at other
; addresses.
; A debugger that honors the entry point will start the
; program in a normal way even if INTVEC is not at address 0.
;---------------------------------------------------------------

		MODULE	?RESET
		COMMON	INTVEC:CODE:NOROOT(2)
		PUBLIC  __program_start
		EXTERN	?cstartup
;		EXTERN	undef_handler, swi_handler, prefetch_handler
;		EXTERN	data_handler, fiq_handler
;		EXTERN	irq_handler
		CODE32	; Always ARM mode after reset	
		org	0x00
__program_start
		ldr	pc,=?cstartup  ; Absolute jump can reach 4 
GByte
;		ldr	b,?cstartup    ; Relative branch allows 
remap, limited to 32 MByte
		org	0x04
undef_handler	ldr	pc,=undef_handler
		org	0x08
swi_handler	ldr	pc,=swi_handler
		org	0x0c
prefetch_handler ldr	pc,=prefetch_handler
		org	0x10
data_handler	ldr	pc,=data_handler
		org	0x18
irq_handler	ldr	pc,=irq_handler
		org	0x1c
fiq_handler	ldr	pc,=fiq_handler

		; Constant table entries (for ldr pc) will be placed 
at 0x20
		org	0x20
		LTORG
;		ENDMOD	__program_start
                ENDMOD


;---------------------------------------------------------------
; ?CSTARTUP
;---------------------------------------------------------------
		MODULE	?CSTARTUP

		RSEG	IRQ_STACK:DATA(2)
		RSEG	SVC_STACK:DATA:NOROOT(2)
		RSEG	CSTACK:DATA(2)
		RSEG	ICODE:CODE:NOROOT(2)
		PUBLIC	?cstartup
		EXTERN	?main

; Execution starts here.
; After a reset, the mode is ARM, Supervisor, interrupts disabled.


		CODE32
?cstartup

; Add initialization nedded before setup of stackpointers here


; Initialize the stack pointers.
; The pattern below can be used for any of the exception stacks:
; FIQ, IRQ, SVC, ABT, UND, SYS.
; The USR mode uses the same stack as SYS.
; The stack segments must be defined in the linker command file,
; and be declared above.
                mrs     r0,cpsr                             ; 
Original PSR value
                bic     r0,r0,#MODE_BITS                    ; Clear 
the mode bits
                orr     r0,r0,#IRQ_MODE                     ; Set IRQ 
mode bits
                msr     cpsr_c,r0                           ; Change 
the mode
                ldr     sp,=SFE(IRQ_STACK) & 0xFFFFFFF8     ; End of 
IRQ_STACK

                bic     r0,r0,#MODE_BITS                    ; Clear 
the mode bits
                orr     r0,r0,#SYS_MODE                     ; Set 
System mode bits
                msr     cpsr_c,r0                           ; Change 
the mode
                ldr     sp,=SFE(CSTACK) & 0xFFFFFFF8        ; End of 
CSTACK

#ifdef __ARMVFP__
; Enable the VFP coprocessor.
                mov     r0, #0x40000000                 ; Set EN bit 
in VFP
                fmxr    fpexc, r0                       ; FPEXC, 
clear others.

; Disable underflow exceptions by setting flush to zero mode.
; For full IEEE 754 underflow compliance this code should be removed
; and the appropriate exception handler installed.
                mov     r0, #0x01000000		        ; Set FZ bit 
in VFP
                fmxr    fpscr, r0                       ; FPSCR, 
clear others.
#endif

; Add more initialization here


; Continue to ?main for more IAR specific system startup

                ldr     r0,=?main
                bx      r0

                LTORG

                ENDMOD


                END


This is a file called TinyC_Start_LPC210X or something similar and 
that cames with IAR, and they use for they LPC2106 demo project.

Anyway, I could not work with my program, since it still runs the 
bootloader. In the dissasembly window, I could see that:

__program_start:
  00000000  00000000  ANDEQ        R0, R0, R0               ; RESET 
undef_handler ldr pc,=undef_handler
undef_handler:
  00000004  00000004  ANDEQ        R0, R0, R4               ; UND   
swi_handler ldr pc,=swi_handler
swi_handler:
  00000008  00000008  ANDEQ        R0, R0, R8               ; SWI   
prefetch_handler ldr pc,=prefetch_handler
prefetch_handler:
  0000000C  0000000C  ANDEQ        R0, R0, R12              ; P ABT 
data_handler ldr pc,=data_handler
data_handler:
  00000010  00000010  ANDEQ        R0, R0, R0, LSL R0       ; D ABT 
  00000014  00000014  ANDEQ        R0, R0, R4, LSL R0
irq_handler ldr pc,=irq_handler
irq_handler:
  00000018  00000018  ANDEQ        R0, R0, R8, LSL R0       ; IRQ   
fiq_handler ldr pc,=fiq_handler
fiq_handler:
  0000001C  0000001C  ANDEQ        R0, R0, R12, LSL R0      ; FIQ   
_?0:
  00000020  00000020  ANDEQ        R0, R0, R0, LSR #32
_?1:
  00000024  00000024  ANDEQ        R0, R0, R4, LSR #32
_?2:
  00000028  00000028  ANDEQ        R0, R0, R8, LSR #32
_?3:
  0000002C  0000002C  ANDEQ        R0, R0, R12, LSR #32
_?4:
  00000030  00000030  ANDEQ        R0, R0, R0, LSR R0
_?5:
  00000034  00000034  ANDEQ        R0, R0, R4, LSR R0
_?6:
  00000038  00000038  ANDEQ        R0, R0, R8, LSR R0
  0000003C  0000003C  ANDEQ        R0, R0, R12, LSR R0

so this looks like the checksum is not loaded.

Any suggestions?

Thanks again,

Guillem Planisi.

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.