Luminary LM3S6965 - GPIO / Button Interrupt geht nicht.

Gast #909962
Lesenswert?

Hallo,
ich verzweifle etwas mit dem Interrupt.
Vielleicht kann mir jemand von euch weiter helfen .
Ich kopiere am besten mal das Programm hinein. Irgendetwas wird wohl an 
der Init. nicht stimmen :|
1
void main()
2
{ 
3
  
4
  // Button Select (PF1) als digitalen Eingang 
5
  GPIO_PORTF_DIR_R &= ~ BIT1;      // Eingang
6
  GPIO_PORTF_DEN_R |=  BIT1;       // Digitale Funktion (0: Nein 1: Ja)
7
   
8
  GPIO_PORTF_IEV_R |=  BIT1;       // steigende Flanke
9
  GPIO_PORTF_IBE_R &= ~  BIT1;     // single Flanke
10
  GPIO_PORTF_IS_R &= ~  BIT1;       // Int. Sense: edge
11
  GPIO_PORTF_IM_R &= ~  BIT1;      // Interrupt enabled 
12
   
13
  GPIO_PORTF_PUR_R |=  BIT1;       // Pull Up
14
  
15

16
  // Enable processor interrupts.
17
  IntMasterEnable();
18
  
19
  while(1)
20
    asm("nop");
21
}
22

23
void PORTF_ISR(void)
24
{
25
  asm("nop");
26
}

In der startup.c habe ich folgende Zeile der Vektor TAbelle geändert.
PORTF_ISR,           // GPIO Port F

Wenn ich Select drücke (PF1) dann seh ich, dass Data auf 0 wechselt aber 
er springt nicht in die PORTF_ISR()

Ich weiß leider nemmer weiter

Gruß Timo
Persönliche Seite #910043
Lesenswert?

Folgendes disabled den Interrupt:
1
GPIO_PORTF_IM_R &= ~  BIT1;      // Interrupt enabled

Man muss auch noch die Peripherie einschalten:
1
//system clock
2
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); //8 MHz
3

4
//peripherie clock
5
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
6

7
//pin setup
8
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_1);
9
GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_RISING_EDGE);
10
GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_1);
11

12
GPIOPortIntRegister(GPIO_PORTF_BASE, PORTF_ISR);
13

14
IntMasterEnable();
Gast #910058
Lesenswert?

Hallo,
danke für die Antwort,

ja clock init hab ich auch, hab ich nur entfernt damit es nicht alzulang 
wird...habe über ne pll nen 40Mhz clock

hab nun periphrie clock und pin setupo cvon dir übernommen, leider aber 
bei
GPIOPortIntRegister(GPIO_PORTF_BASE, PORTF_ISR);

compiler fehler , da er PORTF_ISR nicht kennt, das ist ja eigentlich der 
name meiner interrupt routine, kann man die nicht beliebig verändern und 
muss denen ihre vorgaben nehmen?

gruß und schonmal danke
timo
Gast #910395
Lesenswert?

Muss mich doch wieder zu Wort melden.
obwohl ich vor der initialisierung der ports die main interrupts 
deaktiviere und bevor ich diese wieder aktiviere, setze ich den irq vom 
port zurück springt er mir einmal in die isr routine rein.
beim debuggen habe ich festgestellt, dass das während der funktion
GPIOPortIntRegister(GPIO_PORTF_BASE, PORT_F_ISR); passiert

woran liegt das und wie kann ich daas verhinden?!

gruß
Gast #910398
Lesenswert?

Ok hatte doch noch den nerv alles einzeln durchzugehen und habe nun 
gelesen,
dass ich noch steigende flanke drin hatte, hab dies nun auch auf fallend 
geändert und es geht,

aber wieso geht es mit der steigenden nicht, das blick ich noch net ganz 
aber is ja auch schon spät ;)


gn8

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