Forum: Mikrocontroller und Digitale Elektronik Ausführung von ASM Code in startup.S nur im Debug-Modus?


von An S. (an_s)


Lesenswert?

Hallo zusammen,

ich habe ein STM32VL-Discovery Board und habe die Startup-Routine 
(startup_stm32f10x_md_vl.s()) insofern modiziert, dass zusätzlicher ASM 
Code am Anfang von Reset_Handler: eingefügt wurde. Dieser gibt einige 
Bytes auf USART1 aus.

Das ganze funktioniert nun prima, wenn ich im Debug-Modus bin. Sprich, 
im Debug-Modus werden die Bytes über USART gesendet und kann sie in 
RealTerm empfangen.

Wenn ich das Board allerdings "normal" laufen lasse, erhalte ich 
lediglich ein paar Null-Bytes und mehr nicht.

Woran kann dies liegen? Die Start-Up-Routine wird doch auch im 
"normalen" Modus durchlaufen, oder übersehe ich da etwas?

Hier der modifizierte Abschnitt der startup_stm32f10x_md_vl.s:

1
Reset_Handler    PROC
2
                 EXPORT  Reset_Handler             [WEAK]
3
     IMPORT  __main
4
     IMPORT  SystemInit
5
   
6
;------- Hier beginnt der von mir eingefügte Code
7
   
8
iu2             ldr     r0, =0x40021000
9
 
10
                ldr     r1, =0x00004004
11
                str     r1, [r0, #0x18]
12
 
13
                ldr     r0, =0x40010800
14
 
15
                ldr     r1, =0x444444B4
16
                str     r1, [r0, #4]
17
 
18
                ldr     r0, =0x40013800 ; UART1
19
 
20
                movs    r1, #0
21
                strh    r1, [r0, #4]    ;  +4 USART_DR
22
 
23
                movs    r1, #69         ; 8MHz / 69 == 115200
24
                strh    r1, [r0, #8]    ;  +8 USART_BR
25
 
26
                movs    r1, #0x0600
27
                strh    r1, [r0, #16]   ; +16 USART_CR2 = 0x600
28
 
29
                movs    r1, #0
30
                strh    r1, [r0, #16]   ; +16 USART_CR2 = 0
31
 
32
                movs    r1, #0
33
                strh    r1, [r0, #24]   ; +24 USART_GTPR = 0 - Prescaler
34
 
35
                movw    r1, #0x200C     ; 8-bit, no parity, enable TX,TX
36
                strh    r1, [r0, #12]   ; +12 USART_CR1
37
 
38
                ldr     r2, =0x2000     ; Size = Length (8K)
39
                ldr     r3, =0x20000000 ; Mem = RAM Address
40
iu1             ldrh    r1, [r0, #0]    ; USART->SR
41
                ands    r1, #0x80       ; TXE
42
                beq     iu1
43
                ldrb    r1, [r3], #1    ; [Mem++]
44
                strh    r1, [r0, #4]    ; USART->DR
45
                subs    r2, r2, #1      ; Size--
46
                bne     iu1
47
48
49
;------- Hier endet der von mir eingefügte Code
50
        
51
                LDR     R0, =SystemInit
52
                BLX     R0
53
                LDR     R0, =__main
54
                BX      R0
55
                ENDP

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.