Hallo zusammen,
Ich habe eine Frage bezüglich des Interrupt Handlings des o.g.
Controllers.
Die o.g. IRQ EXTI15_10_IRQHandler händelt ja alle Interrupts auf den
Line 10-15, sprich auf den Pins 10-15 der Ports.
Jetzt wollte ich den Pin 13 von Port D als Interrupt (Falling edge)
konfigurieren.
Allerdings springt der Controller nun IMMER (Pin-Status unabhängig) in
diese ISR rein. Wenn ich dort den Port abfrage welcher den Ir auslöst
funktioniert diese Abfrage so wie sie soll, was ein Hardwarefehler
ausschließen sollte.
Hier der Code
•
1 | main.h
|
2 |
|
3 | #define EXTI_LINE_OVC_LID EXTI_Line13
|
4 |
|
5 | #define LID_OVC_PIN GPIO_Pin_13
|
6 | #define LID_OVC_SPEED GPIO_Speed_50MHz
|
7 | #define LID_OVC_MODE GPIO_Mode_IN_FLOATING;
|
8 | #define LID_OVC_PORT GPIOD
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | main.c
|
16 |
|
17 | GPIO_InitStructure.GPIO_Pin = LID_OVC_PIN;
|
18 | GPIO_InitStructure.GPIO_Mode = LID_OVC_MODE;
|
19 | GPIO_InitStructure.GPIO_Speed = LID_OVC_SPEED;
|
20 | GPIO_Init(LID_OVC_PORT, &GPIO_InitStructure);
|
21 | GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
|
22 |
|
23 |
|
24 | EXTI_InitStructure.EXTI_Line = EXTI_LINE_OVC_LID;
|
25 | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
26 | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
|
27 | EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
28 | EXTI_Init(&EXTI_InitStructure);
|
29 |
|
30 |
|
31 | /* Enable the EXTI15_10 Interrupt */
|
32 | NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
|
33 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
|
34 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
35 | NVIC_Init(&NVIC_InitStructure);
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | stm32f10x_it.c
|
42 | void EXTI15_10_IRQHandler(void)
|
43 | {
|
44 | if(EXTI_GetITStatus(EXTI_LINE_OVC_LID) != RESET)
|
45 | {
|
46 | if(GPIO_ReadInputDataBit(LID_OVC_PORT, LID_OVC_PIN) == 0x00)
|
47 | test=1;
|
48 | else
|
49 | test=2;
|
50 |
|
51 | // Clear the power fail EXTI line pending bit
|
52 | EXTI_ClearFlag(EXTI_LINE_OVC_LID);
|
53 | EXTI_ClearITPendingBit(EXTI_LINE_OVC_LID);
|
54 | }
|
55 | }
|