Forum: Mikrocontroller und Digitale Elektronik ARM7 LPC2136 Timer0


von Peter Lang (Gast)


Lesenswert?

Hallo,
ihr seid meine letzte Hoffnung,
Ich weiß mittlerweile nicht mehr weiter und hoffe um eure Hilfe.
Ich arbeite mit einem ARM7 von Philips (LPC2136) und möchte den Timer0
aktivieren und über einen Interrupt laufen lassen.

Ich habe folgende Konfigurationen.

#include "lpc21xx.h"                            /* LPC21xx
definitions */
#include "VIC.h"
long timeval;

// mein Interrupt
__irq void tc0 (void)
{
  ++timeval;
  T0IR        = 1;                            // Clear interrupt flag
  VICVectAddr = 0;                            // Acknowledge Interrupt
}


// main
int main (void)  {
  unsigned int j;                               /* LED var */

  T0MR0 = 149999;                             // 10mSec = 150.000-1
counts
  T0MCR = 3;                                  // Interrupt and Reset on
MR0

  VIC_Init();
  T0TCR = 1;                                  // Timer0 Enable
  T0IR        = 1;                            // Clear interrupt flag


  while (1)  {                                  /* Loop forever */
    for (j = 0x010000; j < 0x800000; j <<= 1) { /* Blink LED
0,1,2,3,4,5,6 */
      IOSET1 = j;                               /* Turn on LED */
function */
      IOCLR1 = j;                               /* Turn off LED */
    }
    for (j = 0x800000; j > 0x010000; j >>=1 ) { /* Blink LED
7,6,5,4,3,2,1 */
      IOSET1 = j;                               /* Turn on LED */
function */
      IOCLR1 = j;                               /* Turn off LED */
    }
  }
}

// VIC init
void VIC_Init(void)
{
  VICVectAddr0 = (unsigned long)tc0;          // set interrupt vector
in 0
  VICVectCntl0 = 0x20 + 4;                    // use it for Timer 0
Interrupt
  VICIntEnable = 0x00000010;                  // Enable Timer0
Interrupt
}

Dieser Code entspricht einem Keil-beispiel die mitgeliefert war. Wenn
ich das Projekt von Keil ausführe funktioniert das Programm auch und
der Interrupt wird aufgerufen. Wenn ich ein eigenes Projekt erstelle
und den Code einbinde funktioniert das nicht. es wird zwar der Timer
konfiguriert und im TOIR Register das InterruptFlag ausgelöst, das
Programm springt aber nie in den __irq tc0. Ich bin schon etwas
verzweifelt. Habe ich irgendetwas übersehen? Bitte um Hilfe.

Danke
Peter

von Peter Lang (Gast)


Lesenswert?

Bitte ist niemand da der mir helfen kann?

von Dietmar (Gast)


Lesenswert?

Schau doch mal auf der Homepage von Keil, dort gibt es Beispielcode zum
LPC2000 mit Timer 0 und Interrupt (heißt Blinky IRQ).

Hier kannst du dieses Beispiel kostenlos und ohne Registrierung
downloaden:

http://www.keil.com/download/docs/232.asp

Es ist hardwareseitig auf das Keil Evaluation Board MCB2100 angepasst,
welches den LPC2129 verwendet, steuert dort ein paar LED's an. Für
andere Hardware und mit LPC2136 sind meines Erachtens nur geringe
Änderungen des Beispiels nötig, z.B. I/O-Ports.

Gruß

Dietmar

von Dietmar (Gast)


Lesenswert?

Sorry, habe übersehen, daß du das Beispiel schon hast.

Dort ist aber einiges wegrationalisiert, wie ich sehe:

1. Du solltest mal das LPC213x.h für den LPC2136 includen. LPC21xx.h
ist für LPC2114, 2119, 2124, 2129, 2194, aber das wird es sicher nicht
sein.

2. Was steht denn in VIC.h? Das File braucht man meines Erachtens
nicht, da die VIC Informationen in den Headerfiles für den Controller
mit drinstehen.

3. Die I/O-Direction ist nirgendwo definiert. Im Keil Beispiel steht in
der Initialisierung noch der Befehl:

IODIR1 = 0xFF0000;  /* P1.16..23 defined as Outputs */

4. und die Pin Selections auch nicht. Aber die Pin Selections stehen
default sowieso auf I/O, da macht es nichts.

5. Ist eigentlich die originale Startup.s mit unveränderten
Interruptvektoren eingebunden?

6. Das Main-Programm (while(1)) läuft nur nacheinander die 2
for-Schleifen ab. Dort ist kein Zusammenhang mehr mit dem
Timer-Interrupt. Bei Keil war da noch eine Funktion wait() mit drin.

7. Welche Hardware verwendest du überhaupt? Welche Tools zum Flash
Download? Simulator? Welche Programmieroberfläche?

8. Wird in den anderen eingebundenen Files eine VIC Register
überschrieben?

Gruß

Dietmar

von Peter Lang (Gast)


Lesenswert?

Ja das stimmt, daß ich da was wegrationalisiert habe. Es geht mir
nämlich in erster linie nur darum, daß der Interrupt aufgerufen wird.
Die originale Startup.s ist eingebunden, wobei ich etwas dazu sagen muß
- ich habe festgestellt, daß wenn ich unter
Project/Components-Environments-Books/Folders-Extensions "Use
RealViewCompiler" eingestellt habe funktioniert der Interrupt nicht.
Wenn ich jedoch ein Projekt erstelle und bei den ARM Development Tools
"Use Keil CARM Compiler" einstelle. funktioniert das Programm und der
Interrupt wird ausgelöst. Das sagt mir, daß das Projekt ansich
funktioniert und ich alles richtig konfiguriert habe. nur mit dem
RealViewCompiler funktioniert das nicht.

Gruß Peter

von Dietmar (Gast)


Lesenswert?

Die Umstellung auf RealView steht mir auch gerade bevor, schiebe es
schon eine Weile vor mir her, da die guten alten Keil-Tools noch nicht
allzu alt sind und gut funktionieren.

Anscheinend steht ein kompletter Umbau von Assemblerfiles, C-Files,
Header, Konfiguration etc. bevor, Syntaxänderungen überall, und das
scheue ich noch etwas.

Bin ehemals von GNU nach Keil umgestiegen und sehr verwöhnt worden,
z.B. Handhabung von SWI Exceptions, was unter GNU völlig umständlich zu
konfigurieren ist und bei Keil die Toolchain selbst erledigt. Ob das
unter RealView noch so sein wird?

So wie es aussieht, versteht RealView die Definition des Interrupts
nicht oder falsch.

Ich scheue mich gelegentlich nicht davor, auch den Keil Support
anzurufen, zumindest solange die Lizenz gilt.

Ansonsten, poste dein Problem doch mal im Keil Diskussionsforum.

Gruß

Dietmar

von Peter Lang (Gast)


Lesenswert?

Danke dir,
Werde ich machen. Falls ich eine Lösung gefunden habe, poste ich diese
hier. Erstmals danke.

Gruß
Peter

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.