Forum: Mikrocontroller und Digitale Elektronik Schwierigkeiten mit SAM7-H64


von Antoine Kaufmann (Gast)


Lesenswert?

Hallo

ich versuche schon seiit rund einer Stunde die Statusled auf meinem 
SAM7-H64 von Olimex zum leuchten zu bringen. Der Code den ich verwende 
ist das Beispiel von Olimex, das ich leicht modifiziert habe, damit alle 
ports angeschaltet werden:

//it's a simple delay

void Delay (unsigned long a) { while (--a!=0); }



int main()

{

  //Init frequency

  InitFrec();

  //Init leds

  InitPeriphery();



  // loop forever

  while(1)

  {

    m_pPio->PIO_CODR = 0xFFFFFFFF;  //set reg to 0 (led2 on)

    Delay(800000);             //simple delay

    m_pPio->PIO_SODR = 0xFFFFFFFF;  //set reg to 1 (led2 off)

    Delay(800000);             //simple delay

  }

}




Auch die Pins an der Stiftleiste machen keinen Wank. Das flashen mit 
OpenOCD funktioniert einwandfrei.

Woran könnte das ligen?


Vielen Dank im Voraus

Gruss Antoine Kaufmann

von let (Gast)


Lesenswert?

Ich vermisse die Zuweisung an das 'Data Direction Register' des PIO
Controllers (m_pPio->PIO_OER = 0xffffffff ?). Wird vielleicht
in 'InitPeriphery()' gemacht. Nach einem Reset sind ja alle Ports als
Eingang konfiguriert.

Mit den SAMs kenne ich mich aber nicht aus, ich benutze einen
LPC2148. Und den auch erst seit kurzem.

 - Michael

von Antoine Kaufmann (Gast)


Lesenswert?

jo, das ist in dieser Funktion:

...
  p_pPio->PIO_PER = 0xFFFFFFFF;    //Enable PA17

  p_pPio->PIO_OER = 0xFFFFFFFF;    //Configure in Output
...

von Dirk D. (dirkd)


Lesenswert?

Hast Du auch die Clock für PIOA aktiviert?

//*--------------------------------------------------------------------- 
-------
//* \fn    AT91F_PMC_EnablePeriphClock
//* \brief Enable peripheral clock
//*--------------------------------------------------------------------- 
-------
__inline void AT91F_PMC_EnablePeriphClock (
  AT91PS_PMC pPMC, // \arg pointer to PMC controller
  unsigned int periphIds)  // \arg IDs of peripherals to enable
{
  pPMC->PMC_PCER = periphIds;
}

AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, ( 1 << AT91C_ID_PIOA ));

von Antoine Kaufmann (Gast)


Lesenswert?

jo hab ich auch:

//enable the clock of the PIO

p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;

von Martin Thomas (Gast)


Lesenswert?

Compileroptimierung eingeschaltet? Dann düfte das delay in der Form 
nicht seinen Zweck erfüllen (ist dann etwas too simple). Testweise statt 
void Delay (unsigned long a) { while (--a!=0); }
1
void Delay( unsigned long a ) 
2
{
3
  volatile unsigned long i;
4
  for ( i=0; i<a; i++ ) {
5
    ;
6
  }
7
}

Alle Port I/Os zu wackeln ist vielleicht auch keine gute Idee. 
Vielleicht beisst sich das mit weiteren Bauteilen auf dem Board. Besser 
nur an dem Pin "wackeln", an dem die LED angeschlossen ist.

Inititialisierung von p_pPMC und p_pPio wird nicht gezeigt - sicher mit 
richtiger Adresse initialisiert? InitFrec() wird nicht gezeigt - sicher, 
das diese Funktion nicht "hängt"? Einstellung zur Code-Generierung 
korrekt? Ist vielleicht auf "RAM-debugging" eingestellt? Dafür erzeugter 
Code kann dann nicht ohne Weiteres einfach ins Flash geschrieben werden. 
Compiler/Toolchain? Startup-Code?, Linker-Einstellung/Linker-Script?

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.