Forum: Mikrocontroller und Digitale Elektronik Rowley Crossworks AT91sam7x-ek PIO


von Tom K. (thokuc)


Lesenswert?

Hallo,

ich arbeite mit (zum ersten mal) einem Atmel  AT91SAM7x-EK Board in 
verbindung mit dem Rowley Crossworks 1.7.
Bisher läuft darauf FreeRTOS 4.5. Ich habe einen extra Task erstellt, 
der auch läuft. Mit diesem Task möchte ich mit einem Infineon Sensor 
kommunizieren (SENT Protokoll)

Jetzt hab ich gewisse Probleme den PIO Controller richtig anzusprechen.

Mein Problem ist, dass ich das System, wie man mit den einzelnen 
Funktionen der I/O Ports umgeht etc. nicht verstehe. Gibt es dazu eine 
gut verständliche Dokumentation? Ideal wäre natürlich deutsch, aber ich 
möchte nicht anmasend sein ;)
Ich mein aber nicht die 670 Seiten Boardbeschreibung mit den einzelnen 
Funktionen, die versteh ich schon. Mein Problem liegt wiegesagt beim 
Programmieren

Erste versuche Register zu aktivieren etc. schauen so aus.
1
void vCheckit (void *pvParameters){
2
3
4
5
  ( void ) pvParameters; //for unused params
6
  AT91C_BASE_PIOA->PIO_PDR = SENSIN; //disables Register PIOA5
7
  AT91C_BASE_PIOA->PIO_PER = SENSIN; //enables Register PIOA5
8
  AT91C_BASE_PIOA->PIO_IFSR = SENSIN; //Set Register to Output
9
10
11
  if (AT91C_BASE_PIOA->PIO_IFSR == '1'){
12
  const int state = 1
13
    }
14
15
16
  for(;;){
17
}
18
}
Sehr primitiv, aber irgendwie muss man ja den Einstieg finden ;)

Für Ratschläge wäre ich sehr Dankbar, evtl ergänzend auch 
Literaturempfehlung ?

von Jörn K. (joern)


Lesenswert?

Deine PIO Kontroller Einstellungen sind etwas seltsam.

1) Takt für PIO Kontroller freischalten

  AT91C_BASE_PMC->PMC_PCER = 0x00000004  # Bit 2 for PIOA

2) Entsprechende Pins einschalten

  AT91C_BASE_PIOA->PIO_PER = SENSIN; //enables Register PIOA5

3) Pins als Ausgang konfigurieren

  AT91C_BASE_PIOA->PIO_OER = SENSIN; // PIOA5 as output

4) Pins toggeln

  AT91C_BASE_PIOA->PIO_CODR = SENSIN; // clear PIOA5
  AT91C_BASE_PIOA->PIO_SODR = SENSIN; // set PIOA5

Ich hoffe das hilft für den Anfang.

von Tom (Gast)


Lesenswert?

Danke schonmal :)
Der takt wurde glaube ich, wenn ich das richtig sehe schon im main 
freigeschaltet mit:

 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;

Daher brauch ich das hier nicht mehr oder?

Sorry für die dummen Fragen ;) Aber ist echt nicht grad leicht da rein 
zu kommen.
Gäbe es evtl noch Tips für online Dokumentationen womit man da mal 
durchsteigen kann? Sitz jetzt schon recht lang dran und komm immer nur 
in mini Schritten vorran.

von Jörn K. (joern)


Lesenswert?

> Der takt wurde glaube ich, wenn ich das richtig sehe schon im main
> freigeschaltet mit:
>
>  AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
>
> Daher brauch ich das hier nicht mehr oder?

Ja, dann kannst du dir die Zeile sparen

> Sorry für die dummen Fragen ;) Aber ist echt nicht grad leicht da rein
> zu kommen.

Ich finde beim PIO Controller das Blockdiagramm im Datenblatt sehr 
nützlich.

> Gäbe es evtl noch Tips für online Dokumentationen womit man da mal
> durchsteigen kann?

Learning by doing ;) Schau mal hier vorbei:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/

von gerhard (Gast)


Lesenswert?

>gäbe es evtl noch Tips für online Dokumentationen womit man da mal
>durchsteigen kann? Sitz jetzt schon recht lang dran und komm immer nur
>in mini Schritten vorran.
unter u.a. link findest du zu fast allen peripherals examples:
http://www.atmel.com/dyn/general/tech_doc.asp?doc_id=11319&family_id=605

gruss
gerhard

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.