Forum: Mikrocontroller und Digitale Elektronik SK6812 LED mit light_ws2812 auf ARM Cortex-M0


von Marvin (Gast)


Lesenswert?

Hallo zusammen,

nachdem hier die Bibliothek vorgestellt und reichlich diskutiert wurde,
dachte ich es ist der richtige Ort um meine Frage zu stellen.

Ich verwende den µC LPC11C24 von NXP, der auf einem ARM Cortex-M0
basiert,
daher möchte ich die light_ws2812_ARM bentutzen.
Da das Vorgehen in der Readme ganz gut beschrieben ist bin ich auch nach
ihr vorgegangen.
Allerdins habe ich folgendes Problem:
In der Readme steht:
- Change i/o pin settings according to the I/O pin you are using:
  - Define `LIGHT_WS2812_GPIO_PIN=XXX`
  - Define `LIGHT_WS2812_GPIO_PORT=XXX`

Im Code dann:

  #define ws2812_port_set ((uint32_t*)&LIGHT_WS2812_GPIO_PORT->SET0)  // 
Address of the data port register to set the pin
  #define ws2812_port_clr ((uint32_t*)&LIGHT_WS2812_GPIO_PORT->CLR0)  // 
Address of the data port register to clear the pin


Die Adresse des von mir verwendeten Port ist 0x40044084, was ich
anstelle von &LIGHT_WS2812_GPIO_PORT eingefügt habe. Jedoch ohne Erfolg.
Kann mir jemand ein Beispiel liefern wie die Umsetzung richtig ist ?

Vielen Dank im Voraus.

von holger (Gast)


Lesenswert?

>Die Adresse des von mir verwendeten Port ist 0x40044084, was ich
>anstelle von &LIGHT_WS2812_GPIO_PORT eingefügt habe.

Wieso fügst du nicht einfach den Portnamen ein?

von Marvin (Gast)


Lesenswert?

Es geht um den Port PIO3_0, habe es direkt eingegeben und in CMSIS 
nachgeschaut, aber nichts gefunden wie ich ihn so ansprechen kann.

von Jim M. (turboj)


Lesenswert?

Da ist mehr Portierarbeit nötig, denn da wird nur LPC8xx unterstüzt. Die 
anderen LPC Familien kennen kein SET0 und CLR0 Register im GPIO Port.

Wenn ich das richtig sehe, müsste stattdessen jeweils das DATA Register 
mit dem richtigen Index benutzt werden:
1
 #define LIGHT_WS2812_GPIO_PORT LPC_GPIO[3]
2
3
 #define ws2812_port_set ((uint32_t*)&LIGHT_WS2812_GPIO_PORT->DATA[1<<LIGHT_WS2812_GPIO_PIN]
4
 #define ws2812_port_clr ((uint32_t*)&LIGHT_WS2812_GPIO_PORT->DATA[1<<LIGHT_WS2812_GPIO_PIN]
5
6
  #define ws2812_mask_set  (1<<LIGHT_WS2812_GPIO_PIN)  // Bitmask to set the data out pin
7
  #define ws2812_mask_clr  (0)  // Bitmask to clear the data out pin

Die Definition von LIGHT_WS2812_GPIO_PORT ist erstmal geraten.

: Bearbeitet durch User
von Marvin (Gast)


Lesenswert?

Hallo turboj,

vielen Dank für deine Antwort und die guten Ansätze.

Ich habe den Code übernommen. Leider kann der Compiler nichts mit
1
 LPC_GPIO[3]
anfangen...

Was würdest du zudem für
1
 LIGHT_WS2812_GPIO_PIN

definieren ? Das taucht hier nicht auf.

Liebe Grüße

von Marvin (Gast)


Lesenswert?

Problem ist mittlerweile gelöst, falls jemand Hilfe dabei braucht kann 
er/sie sie gerne einen Ausschnitt des Codes bekommen.

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.