mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM7 LPC2136 Timer0


Autor: Peter Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte ist niemand da der mir helfen kann?

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Lang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Lang (Gast)
Datum:

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

Gruß
Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.