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
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
jo, das ist in dieser Funktion: ... p_pPio->PIO_PER = 0xFFFFFFFF; //Enable PA17 p_pPio->PIO_OER = 0xFFFFFFFF; //Configure in Output ...
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 ));
jo hab ich auch: //enable the clock of the PIO p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.