Suche Beispiel Blink-LED fuer STM32f407VG Discovery in Assembler

OP #4058779
Lesenswert?

Hallo,

ich habe bereits im Internt gesucht und auch hier im Forum, konnte 
bisher aber leider nichts genaues finden.

Ich versuche mich aktuell an Assembler-Programmierung für das 
Discovery-Board. Ich wuerde gerne mal eine LED anschalten. Hab schon 
versucht ein Programm zu machen, aber es passiert leider nichts.

Für ein Beispiel wäre ich sehr Dankbar.


Falls es jemand interessiert, hier mal mein Versuch:
1
    .section .vectortable,"a"   // vector table at begin of ROM
2

3
    .align  2
4
    .word   0x20004000      // initial Stack Pointer
5
    .word   0x00002001      // initial Program Counter
6

7

8

9
    .text                   // section .text
10

11
    .align  1
12
    .syntax unified
13
    .thumb
14
    .thumb_func
15
    .global init
16
    .type   init, %function
17
#----------------------------------------------------------------------------------------#
18
init:
19
    CPSID   i               // disable all interrupts
20

21
    MOVS    r0, #0          
22
    MOVS    r1, #0
23
    MOVS    r2, #0
24
    MOVS    r3, #0
25
    MOVS    r4, #0
26
    MOVS    r5, #0
27
    MOVS    r6, #0
28
    MOVS    r7, #0
29
    MOV     r8, r0
30
    MOV     r9, r0
31
    MOV     r10, r0
32
    MOV     r11, r0
33
    MOV     r12, r0
34

35
  CPSID   i                 // disable all interrupts
36

37
    .align  1
38
    .syntax unified
39
    .thumb
40
    .thumb_func
41
    .global main
42
    .type   main, %function
43

44
main:
45
   
46

47
    LDR r1, = 0x40023800            //RCC-BASE
48
    LDR r2, = 0x8                   //RCC_PortD
49
    LDR r0, [r1, 0x0]
50
    ORRS r0, r0 , r2
51
    STR r0, [r1, 0x0]               //enable clock
52

53

54
    LDR r1, = 0x40020C00            //load PERIPH BASE PORTD
55
    //ADDS    r1, r1, 0x00020000      // load AHPB1 Base
56
    //ADDS    r1, r1, 0x0C00          //Load PortD PeriphBase
57
    LDR r2, = 0x01000000            //LOAD MASK 0000:0001:24x0
58
    LDR r0, [r1, 0x00]              //load CRL value
59
    ORRS r0, r0, r2                 //enable GPIO Pin 12
60
    STR r0, [r1, 0x00]              //Ruckspeichern
61

62
    LDR r0, [r1, 0x04]              //load CRH value
63
    LDR r3, = 0x1000
64
    ORRS r0, r0, r3                 //enable Pin 12 PushPull Outpu
65
    STR r0, [r1, 0x04]              //Ruckspeichern
66

67
    LDR r0, [r1, 0x08]              //load Speed   RCC_AHB1Periph_GPIOD
68
    ORRS r0, r0, r2                 //enable Speed Medium
69
    STR r0, [r1, 0x08]              //Ruckspeichern
70

71
    LDR r0, [r1, 0x0C]              //load Pull Up Down
72
    ORRS r0, r0, r4                 //enable noPuPd
73
    STR r0, [r1, 0x0C]              //Ruckspeichern
74

75
    LDR r0, [r1, 0x18]              //load Pull Up Down
76
    ORRS r0, r0, r3                 //SET Output
77
    STR r0, [r1, 0x18]              //Ruckspeichern
78

79
#--- main loop
80
.L1:
81
   
82

83
    B       .L1                 // springe unbedingt nach .L1
84

85

86
    .align  1
87
    .syntax unified
88
    .thumb
89
    .thumb_func
90
    .global delay
91
    .type   delay, %function
92

93

94
    .align 1
95
    .global stop
96
stop:
97
    B       stop
98

99

100

101
.lp1:      
102
    .ltorg
103

104

105
    .end
OP #4058889
Lesenswert?

Hallo,

habe ich nun mal probiert. Das Problem ist, das ich dabei wenn ich die 
ST-Libarys verwende einen riesigen unübersichtlichen Code bekomme.
Ich bin ja gerade erst dabei in die Cortex Assembler Programmierung 
einzusteigen und bräuchte da mal was einfaches zum Verständnis der 
Arbeitsweise.
Moderator (Firma: Titel) Persönliche Seite #4058950
Lesenswert?

Daniel Frank schrieb:
> Das Problem ist, das ich dabei wenn ich die ST-Libarys verwende einen
> riesigen unübersichtlichen Code bekomme.
Dann lass sie weg...

Aber um Ernst: Du wirst dir ganz einfach mal ganz genau anschauen 
müssen, wie der Controller startet. Und dann überlegen, wo du mit deinen 
paar Assemblerbefehlen aufsetzen kannst.

> hier mal mein Versuch:
Worauf basiert der? Warum siehst du dir nicht einfach einen 
funktionierenden Startupcode an? Und machst dann ein wenig Reverse 
Engineering?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren