Forum: Mikrocontroller und Digitale Elektronik Interrupt mit LPC1347


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Nouda (Gast)


Lesenswert?

Hallo
Ich versuche nun schon ne ganze Weile eine LED zum blinken zu bekommen 
xD
Nun zum eigentlichen Problem, ich möchte auf meinem uC Board eine LED 
blinken lassen, die heartBeat LED, diese dient einfach dazu, dass man 
sieht, er läuft.
Dafür möchte ich den integrierten 48bit RI counter verwenden. Dieser 
soll mir einen Interrupt auslösen und in der ISR die LED toggeln.
Nun habe ich aber das Problem, dass der uC gar nicht in die ISR 
hineingeht. Ich finde aber keinen Fehler in meinem Code^^
Hier der Code meiner main.c, die LED wird hier durch die ISR nur 
ausgeschaltet, um zu sehen, ob die überhaupt einmal ausgeführt wird, was 
nicht der Fall ist.

Hat schon jm. erfahrungen mit diesem uC und kann mir da helfen?

DANKE

Gruss Nouda

Ich verwende diese Board: 
http://www.embeddedartists.com/products/lpcxpresso/lpc1347_xpr.php

Mit
1
HALConfigApp::s_heartBeat.setGPIO(GPIO::GPIO_STATE::OFF);
 wird die LED ausgeschaltet und
mit
1
HALConfigApp::s_heartBeat.setGPIO(GPIO::GPIO_STATE::ON);
 eingeschaltet.

1
#include "LPC13Uxx.h"
2
3
#include <stdio.h>
4
#include <cr_section_macros.h>
5
#include "HardwareSetup.h"
6
#include "GPIO.h"
7
#include "SystemClock.h"
8
#include "HALConfigApp.h"
9
10
int LED;
11
12
void OSTIMER_IRQHandler(void){
13
14
   // Clear interrupt
15
  LPC_RITIMER->CTRL |= (1<< 0);   // Write RITINT to clear
16
17
  HALConfigApp::s_heartBeat.setGPIO(GPIO::GPIO_STATE::OFF);
18
19
}
20
21
void RIT_IRQHandler(void) {
22
   // Clear interrupt
23
  LPC_RITIMER->CTRL |= (1<< 0);   // Write RITINT to clear
24
25
  HALConfigApp::s_heartBeat.setGPIO(GPIO::GPIO_STATE::OFF);
26
}
27
28
int main(void) {
29
  SystemCoreClockUpdate();
30
31
  __enable_irq();  
32
  __enable_fault_irq();
33
34
  //Stop RI Timer
35
  LPC_RITIMER->CTRL = 0;
36
37
  //Init RI Timer
38
  LPC_RITIMER->COMPVAL = 6000000;    //setting compare Value to 6kk -> 2Hz
39
  LPC_RITIMER->COMPVAL_H = 0;
40
41
  //Reset RI Timer
42
  LPC_RITIMER->COUNTER = 0;
43
  LPC_RITIMER->COUNTER_H = 0;
44
45
  //set RI Timer to clear on match, halt on debug, RITEN -> start
46
  LPC_RITIMER->CTRL = (1<< 1) | (1<< 2) | (1<< 3);
47
48
  //Enable RIT interrupt
49
  NVIC_EnableIRQ(RIT_IRQn);
50
51
52
  HALConfigApp::s_heartBeat.setGPIO(GPIO::GPIO_STATE::ON);
53
  //LED = 1;
54
55
  while(1){
56
57
  }
58
59
    return 0 ;
60
}

von Achim S. (Gast)


Lesenswert?

Wenn bei mir eine simple Sache auf dem ARM nicht läuft, habe ich 
meistens vergessen, die CLK für den entsprechenden Hardwareblock 
freizuschalten (Register SYSAHBCLKCTRL). Wie siehts damit bei dir aus? 
Werden die GPIOs überhaupt getaktet?

Der LPC-Link bietet übrigens die Möglichkeit zum Debuggen. Du kannst 
dich schrittweise durchs Programm hangeln, die Registerinhalte 
anschauen, ...

von Nouda (Gast)


Lesenswert?

Da bin ich grad drann, der counter zählt, aber mit dem Vergleich scheint 
etwas nicht zu funktionieren, muss mir das mal genauer anschauen.^^

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.