Register einen Wert zuweisen; Arduino Due, SAM3X8E, in Atmel-Studio 7 / lvalue-Assignment

Gast #5358946
Lesenswert?

Hallo,

Ich stehe grade auf dem Schlauch... möchte einem Register einen Wert 
zuweisen.

dazu habe ich folgenden Code:
1
#include "sam.h"
2

3

4
int main(void)
5
{
6
    /* Initialize the SAM system */
7
    SystemInit();
8
  PIO_PER_P2 = 0x04000000;  //PIO-Enable
9
  PIO_OER_P2 = 0x04000000;  //Output-Enable
10
  PIO_SODR_P2 = 0x04000000;  //Set Output-Data
11
  PIO_OWER_P2 = 0x04000000;  //Output-Write-Enable
12
    /* Replace with your application code */
13
    while (1) 
14
    {
15
    PIO_SODR_P2 = 0x04000000;  //Set Output-Data
16
    PIO_CODR_P2 = 0x04000000;  //Clear Output-Data-Reg
17
    }
18
}

Problem:
lvalue required as left operand of assignment
--> Bei allen zuweisungen...

Ziel wäre es eine am Pin PortB_26 --> Arduino-Pin22
hängende LED zu schalten...

Stehe grade echt auf dem Schlauch, wäre super wenn mich jemand über den 
scheinbar offensichtlichen Fehler aufklären könnte ;)
Gast #5358985
Lesenswert?

Matze schrieb:
> Stehe grade echt auf dem Schlauch, wäre super wenn mich jemand über den
> scheinbar offensichtlichen Fehler aufklären könnte ;)

Wenn du mit Atmel Studio unterwegs bist dann nimm mal die
Datei <arduino_due_x.h>, darin sind die für dich relevanten
Defines vorhanden.

Ansonsten hat dir  dadie  bereits auf die "richtige" Art der
Zuweisung hingewiesen.

Beim Due gibt es PIOA...PIOD, aber das wirst du durch Studieren
der Header files (sam3x8e.h) selbst herausfinden.
Gast #5359003
Lesenswert?

dadie schrieb:
> Ich denke dir fehlt der Port:
> PIOB->PIO_PER = 0x04000000;
>
> Bin aber selber Neuling!

Vielen Dank :)

Das ist zumindest ein Teil der Lösung, es kann Compiliert werden.
leider kann zeigt die angeschlossene LED jedoch keine Reaktion...
1
#include "sam.h"
2
int main(void)
3
{
4
    /* Initialize the SAM system */
5
    SystemInit();
6
  PIOB->PIO_WPMR = 1;
7
  PIOB->PIO_PER = 0x04000000;  //PIO-Enable
8
  PIOB->PIO_OER = 0x04000000;  //Output-Enable
9
  PIOB->PIO_SODR = 0x04000000;  //Set Output-Data
10
  PIOB->PIO_OWER = 0x04000000;  //Output-Write-Enable
11
    /* Replace with your application code */
12
    while (1) 
13
    {
14
    PIOB->PIO_SODR = 0x04000000;  //Set Output-Data
15
    PIOB->PIO_CODR = 0x04000000;  //Clear Output-Data-Reg
16
    }
17
}

Sind (so ziemlich) meine ersten Gehversuche mit Cortex Controllern.

Wäre super wenn mir noch jemand zu einem ersten "Pinumschalten" 
verhelfen könnte :)

STM Apprentice schrieb:
> Wenn du mit Atmel Studio unterwegs bist dann nimm mal die
> Datei <arduino_due_x.h>, darin sind die für dich relevanten
> Defines vorhanden.

Hört ich interessant an, aber wo bekomm ich die her?
Ich finde hier:
http://asf.atmel.com/docs/latest/sam.drivers.adc.adc_temp_sensor_example.arduino_due_x/html/arduino__due__x_8h.html
nur die Doku zu den Headern...
Gast #5359016
Lesenswert?

Matze schrieb:
> Hört ich interessant an, aber wo bekomm ich die her?

Ist im Atmel Studio dabei.

Hältst du es nicht für notwendig mal selbst danach zu suchen?

Empfehlung: Beginne erst mal mit einem neuen Atmel Studio Projekt
mit Arduino Board als Einstieg. Damit bekommst du sehr viel
fertig vorgesetzt.
Gast #5359017
Lesenswert?

Sollte für die Onboard LED funktionieren
1
#include "sam.h"
2

3

4
int main(void)
5
{
6
    /* Initialize the SAM system */
7
    SystemInit();
8
  int Pinnumber= 27;
9
  PIOB->PIO_PER = 0x1 << Pinnumber;
10
  PIOB->PIO_OER = 0x1 << Pinnumber;
11
  PIOB->PIO_SODR= 0x1 << Pinnumber;
12
  int waittime= 1000000;
13
    /* Replace with your application code */
14
    while (1) 
15
    {
16
    PIOB->PIO_SODR=0x1<<Pinnumber;
17
    for (int i=0; i<waittime; i++)
18
    {
19
      
20
    }
21
    PIOB->PIO_CODR=0x1<<Pinnumber;
22
    for (int i=0; i<waittime; i++)
23
    {
24
      
25
    }
26
    }
27
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren