Forum: Mikrocontroller und Digitale Elektronik ARM LPC29XX unter Linux programmieren. (standalone)


von Christian (Gast)


Lesenswert?

Hallo,

Gibt es hier jemanden, der Erfahrung mit dem LPC29XX von NXP hat und 
unter Linux programmiert?

Ich hab den Chip noch nicht und würde ihn eventuell gerne auf meiner 
Platine einsetzen.

Aktuell habe ich den armel-gcc Compiler installiert und die 
Beispieldateien von NXP modifiziert (Groß-/Kleinschreibung der includes, 
#define NOP asm volatile("nop")).

Das einzige was aktuell nicht geht, ist das __irq makro.

Ich habe versucht es wie unten steht versucht zu definieren
1
#define __irq    void __attribute__ ((interrupt("IRQ")))
2
3
//...
4
5
//Die Funktionen die __irq benötigen:
6
7
void __irq IRQ_Exception( void )
8
{
9
  DWORD regVal, index;
10
  HandlerAddr irqHandler;
11
12
  regVal = INT_VECTOR_1;
13
  index = regVal >> 3;
14
  if ( index == 0 )
15
  {
16
  /* no-interrupt handler for IRQ */
17
  return;
18
  }
19
  irqHandler = IRQ_VectorTable[index].Isr;
20
  (*irqHandler)();
21
  return;
22
}
23
24
/******************************************************************************
25
** Function name:    FIQ_Exception
26
**
27
** Descriptions:    Interrupt Handler
28
** parameters:      None 
29
** Returned value:    None
30
** 
31
******************************************************************************/
32
void __irq FIQ_Exception( void )
33
{
34
  DWORD regVal, index;
35
  HandlerAddr fiqHandler;
36
37
  regVal = INT_VECTOR_0;
38
  index = regVal >> 3;
39
  if ( index == 0 )
40
  {
41
  /* no-interrupt handler for FIQ. */
42
  return;
43
  }
44
  fiqHandler = FIQ_VectorTable[index].Isr;
45
  (*fiqHandler)();
46
}

Funktioniert aber leider nicht.
(error: two or more data types in declaration specifiers)


Zum Test habe ich den hinteren Teil auskommentiert:
1
#define __irq // ...


Bin ich da auf dem richtigen weg? Würde das, sofern ich den Chip hätte, 
funktionieren (mal vom Interrupt abgesehen)?

Die Binary wird nun erzeugt.

(Der Code ist aus: AN10899 complete package 20100113)
http://www.nxp.com/documents/application_note/AN10899_complete_package_20100113.zip

von Fabian G. (kjion) Benutzerseite


Lesenswert?

> (error: two or more data types in declaration specifiers)

In deinem __irq Makro ist ein void zuviel, so könnte es eher 
funktionieren:
1
#define __irq    __attribute__((interrupt("IRQ")))

Ob der Rest so korrekt ist kann ich dir aber auch nicht sagen.

von Christian (Gast)


Lesenswert?

Ups, stimmt, da hast du wohl recht ...
:D

Danke.

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.