Forum: Mikrocontroller und Digitale Elektronik ImageCraft cortex_vectors Vektortabelle STM32F401RE


von Christoph E. (qfnr)


Lesenswert?

Hallo,
ich hoffe das ich hier jemanden finde der den ImageCraft Compiler nutzt. 
Ich habe ein Problem mit der Vektor Tabelle bei Imagecraft. Wenn ich den 
USART6 Interrupt aktiviere, (steht ganz unten in der Tabelle) stürzt der 
Controller anscheint beim Auslösen des Interrupts ab. Gleiches gilt beim 
Interrupt DMA2_Stream5. Dort kann ich ziemlich genau verfolgen, dass er 
genau beim ISR abstürzt und dass sonst alles korrekt funktioniert. Ich 
glaube, dass irgendwo unter dem USART1 IRQn ein Fehler ist, da dieser 
noch funktioniert. Die Beispieltabelle des Beispielprojektes haben mir 
leider auch nicht geholfen. Hier mal die Tabelle und ein Beispiel, wie 
ich den USART6 ISR aktiviere.
Gruß
Christopher

1
NVIC_EnableIRQ(USART6_IRQn);
2
USART6->CR1 |= Bit5; // RX ISR ENABLE
1
  .area vectors(rom,rel)
2
__vectors::
3
  ; you must use the .paddr directive so the correct form of the
4
        ; function address (i.e. with the low bit ON) is used
5
  .paddr  _NMI_Handler    ; NMI_Handler
6
  .paddr  _HardFault_Handler  ; HardFault_Handler
7
  .paddr  _MemManage_Handler  ; MemManage_Handler
8
  .paddr  _BusFault_Handler  ; BusFault_Handler
9
  .paddr  _UsageFault_Handler  ; UsageFault_Handler
10
  .long  0              ; ARM RESERVED
11
  .long  0
12
  .long  0
13
  .long  0
14
  .paddr  _SVC_Handler    ; SVC_Handler
15
  .paddr  _DebugMon_Handler  ; DebugMon_Handler
16
  .long  0      ;
17
  .paddr  _PendSV_Handler    ; PendSV_Handler
18
  .paddr  _SysTick_Handler    ;
19
  .paddr  _WWDG_IRQ_Handler   ;0
20
  .paddr  _PVD_IRQ_Handler    ;1
21
  .paddr  _TAMPER_IRQ_Handler ;2
22
  .paddr  _RTC_IRQ_Handler    ;3
23
  .paddr  _FLASH_IRQ_Handler   ;4
24
  .paddr  _RCC_IRQ_Handler    ;5
25
  .paddr  _EXTI0_IRQ_Handler  ;6
26
  .paddr  _EXTI1_IRQ_Handler   ;7
27
  .paddr  _EXTI2_IRQ_Handler   ;8
28
  .paddr  _EXTI3_IRQ_Handler   ;9
29
  .paddr  _EXTI4_IRQ_Handler   ;10
30
  .paddr  _DMA1_Channel0_IRQ_Handler   ;11
31
  .paddr  _DMA1_Channel1_IRQ_Handler   ;12
32
  .paddr  _DMA1_Channel2_IRQ_Handler   ;13
33
  .paddr  _DMA1_Channel3_IRQ_Handler   ;14
34
  .paddr  _DMA1_Channel4_IRQ_Handler   ;15
35
  .paddr  _DMA1_Channel5_IRQ_Handler   ;16
36
  .paddr  _DMA1_Channel6_IRQ_Handler   ;17
37
  .paddr  _ADC1_2_IRQ_Handler          ;18
38
  .paddr  _ADC2_IRQ_Handler  ;19
39
  .paddr  _ADC3_IRQ_Handler  ;20
40
  .paddr  _ADC4_IRQ_Handler  ;21
41
  .paddr  _ADC5_IRQ_Handler  ;22
42
  .paddr  _EXIT9_5_IRQ_Handler ;23
43
  .paddr  _TIM1_BRK_IRQ_Handler  ;24
44
  .paddr  _TIM1_UP_IRQ_Handler   ;25
45
  .paddr  _TIM1_TRG_COM_IRQ_Handler  ;26
46
  .paddr  _TIM1_CC_IRQ_Handler   ;27
47
  .paddr  _TIM2_IRQ_Handler   ;28
48
  .paddr  _TIM3_IRQ_Handler    ;29
49
  .paddr  _TIM4_IRQ_Handler  ;30
50
    .paddr  _I2C1_EV_IRQn_Handler                  ; 31,
51
    .paddr  _I2C1_ER_IRQn_Handler                ; 32,
52
    .paddr  _I2C2_EV_IRQn_Handler                ; 33,
53
    .paddr  _I2C2_ER_IRQn_Handler                ; 34,
54
    .paddr  _SPI1_IRQn_Handler                   ; 35,
55
    .paddr  _SPI2_IRQn_Handler                   ; 36,
56
    .paddr  _USART1_IRQn_Handler                 ; 37,
57
    .paddr  _USART2_IRQn_Handler                 ; 38,
58
    .paddr  _EXTI15_10_IRQn_Handler              ; 40,
59
    .paddr  _RTC_Alarm_IRQn_Handler              ; 41,
60
    .paddr  _OTG_FS_WKUP_IRQn_Handler            ; 42,
61
    .paddr  _DUMMYIRQ                            ; 43,
62
    .paddr  _DUMMYIRQ                            ; 44,
63
    .paddr  _DUMMYIRQ                            ; 45,
64
    .paddr  _DUMMYIRQ                            ; 46,
65
    .paddr  _DMA1_Stream7_IRQn_Handler           ; 47,
66
    .paddr  _DUMMYIRQ                            ; 48,
67
    .paddr  _SDIO_IRQn_Handler                   ; 49,
68
    .paddr  _TIM5_IRQn_Handler                   ; 50,
69
    .paddr  _SPI3_IRQn_Handler                   ; 51,
70
    .paddr  _DUMMYIRQ                            ; 52,
71
    .paddr  _DUMMYIRQ                            ; 53,
72
    .paddr  _DUMMYIRQ                            ; 54,
73
    .paddr  _DUMMYIRQ                            ; 55,
74
    .paddr  _DMA2_Stream0_IRQn_Handler           ; 56,
75
    .paddr  _DMA2_Stream1_IRQn_Handler           ; 57,
76
    .paddr  _DMA2_Stream2_IRQn_Handler           ; 58,
77
    .paddr  _DMA2_Stream3_IRQn_Handler           ; 59,
78
    .paddr  _DMA2_Stream4_IRQn_Handler           ; 60,
79
    .paddr  _DUMMYIRQ                            ; 61,
80
    .paddr  _DUMMYIRQ                            ; 62,
81
    .paddr  _DUMMYIRQ                            ; 63,
82
    .paddr  _DUMMYIRQ                            ; 64,
83
    .paddr  _DUMMYIRQ                            ; 65,
84
    .paddr  _DUMMYIRQ                            ; 66,
85
    .paddr  _OTG_FS_IRQn_Handler                 ; 67,
86
    .paddr  _DMA2_Stream5_IRQn_Handler           ; 68,
87
    .paddr  _DMA2_Stream6_IRQn_Handler           ; 69,
88
    .paddr  _DMA2_Stream7_IRQn_Handler           ; 70,
89
    .paddr  _USART6_IRQn_Handler                 ; 71,
90
    .paddr  _I2C3_EV_IRQn_Handler                ; 72,
91
    .paddr  _I2C3_ER_IRQn_Handler                ; 73,
92
  ;  .long  0
93
  ;  .long  0
94
  ;  .long  0
95
  ;  .long  0
96
  ;  .long  0
97
  ;  .long  0
98
  ;  .long  0
99
    .paddr  _FPU_IRQn_Handler                    ; 81, SPI4 FEGKT
100
  ;  .long  0
101
  ;  .long  0
102
    .paddr  _SPI4_IRQn_Handler ; 84

von hp-freund (Gast)


Lesenswert?

Ich kenne den ImageCraft Compiler nicht, aber wo ist der Vector Nr.39?
Nach Ref. Manual muss da ein Platzhalter hin.

siehe: RM0368

von hp-freund (Gast)


Lesenswert?

Nachtrag:
Du darfst auch keine Einträge auskommentieren wenn Du danach noch 
Vectoren nutzen willst. Dadurch verschiebt sich die gesamte Zuordnung.

von Hardfault (Gast)


Lesenswert?

Genau, da ist ein Offestfehler durch die fehlende 39 und später durch 
die Auskommentierung.

Pauschal lohnt sich immer den Hardfault zu bedienen. Dann landen viele 
Fehler des Programmieres. :-)

von Christoph E. (qfnr)


Lesenswert?

Hallo,

danke für die Antwort. Die Nummer 39 hab ich glatt übersehen. Jetzt 
kommt der USART6 ISR also scheint die Anortnung soweit korrekt zu sein. 
Leider stürzt der Mikrokontroller immer noch ab wenn ich den DMA_Stream 
ISR Auslösen lasse aber ich denke da liegt der fehler an einer anderen 
stelle.

Weis jemand ob es überhaubt fuktioniert das ich bei einem DMA den 
Transfer complete interrupt  aktiviere wenn ich diesem Im Circular mode 
betreibe?

Denn dass wollte ich eigentlich machen dass er Circular läuft und bei 
null immer ein Interrupt auslösst damit ich kontrollieren kann das er 
noch läuft.

Gruß

von Purzel H. (hacky)


Lesenswert?

Imagecraft hat excellenten Support. Schreib da eine email hin, ausser du 
hast eine Raubkopie

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.