About SAM7 remapping

Guest #1171709
Rate this post
• ▲ useful
▼ not useful
I have received a question about the remapping code in my
AT91SAM7-"gamma" example (at
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_at91.html#at91_gamma
). I think it is interesting for others or maybe others can give better
or more detailed information so I have copied the question and my answer
into the forum.

---

>I have a question with regard to the SAM7 remap.
>Here is some assembler code you wrote from the following project
>AT91SAM7 SWI, Remap, GPIO, PIT and stdio Example ("Gamma") (last Updated
>4.Sept. 2006)

[mthomas: from the gamma-examle/Cstartup.S:]

/*---------------------------------------------------------------------- 
--------
/*- Remapping
/*---------------------------------------------------------------------- 
--------*/
.if (VECTREMAPPED)
                        .print "RCR setting for remapping enabled"
                        .equ    MC_BASE,0xFFFFFF00  /* MC Base Address
*/
                        .equ    MC_RCR, 0x00        /* MC_RCR Offset */
                        /* store first word in RAM into r4 */
                        ldr r0,=__FIRST_IN_RAM
                        ldr r4,[r0]
                        /* load value at address 0 into R2 */
                        ldr r1,=0x00000000
                        ldr r2,[r1]
                        /* xor value from address 0 (flip all bits),
                        store in R3 */
                        ldr r3,=0xffffffff
                        eor r3, r2, r3
                        /* write xored value to first word in RAM
                        if already remapped this will also change
                        the value at 0 */
                        str r3,[r0]
                        /* load from address 0 again into R3 */
                        ldr r3,[r1]
                        /* restore first value in RAM */
                        str r4,[r0]
                        /* compare */
                        cmp r3, r2
                        bne already_remapped
                        /* if both values have been equal the change of
the
                        RAM-value had no effect on the value at
0x00000000
                        so we are not remapping yet -> remap now: */
                        LDR     R0, =MC_BASE
                        MOV     R1, #1
                        STR     R1, [R0, #MC_RCR]
already_remapped:
.endif

[mthomas: end of "cited" code]

>First I assume that the above code is executing from flash and not from RAM.

Yes, I have wrapped this code between .if/.endif and it is ment to be
used for the "ROM_RUN" (=flash) target. Remap for target RAM_RUN is
usualy done by the debugging-software by writing directly into the
processor-registers so there is no option for remapping and "RAM_RUN" in
this example.

>After the remap instruction in red [mthomas: the lines
>LDR R0, =MC_BASE, MOV R1, #1 STR R1, [R0, #MC_RCR] ] above you don

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.