Hallo zusammen,
ich stehe gerade wieder vor einem Problem mit meinem STM32.
Ich habe ein Array mit den Werten 0 oder 1 und möchte das jetzt so
schnell wie möglich auf einem Pin ausgeben.
Eine Möglichkeit wäre es jetzt z.b. so: (ptr ist ein Pointer auf das
Array)
1 | if(*ptr++ == 1)
|
2 | GPIOE->BSRR = GPIO_Pin_3;
|
3 | else
|
4 | GPIOE->BRR = GPIO_Pin_3;
|
5 |
|
6 | if(*ptr++ == 1)
|
7 | GPIOE->BSRR = GPIO_Pin_3;
|
8 | else
|
9 | GPIOE->BRR = GPIO_Pin_3;
|
10 |
|
11 | .
|
12 | .
|
13 | .
|
Zu gunsten der Geschwindigkeit und weil es nur 12 bit sind die gesetzt
werden müssen würde ich es untereinander schreiben und in keiner
Schleife.
Das Problem ist allerdings, dass auch die if-Abfrage Zeit kostet.
Gibt es eine Möglichkeit die Pins direkt anzusprechen?
Also in etwa so:
1 | GPIOE->GPIO_Pin_3 = *ptr++;
|
Oder kann ich auch einfach auf den ganzen Port ein 16bit Wort legen,
wobei eben nur die Bits durchkommen, wo der entsprechende Pin auch auf
Ausgang geschlaten ist, also in etwa so:
1 | GPIOE = 0x8; //0000 0000 0000 1000
|
Habe im Internet dazu leider nichs gefunden.
Danke für die Bemühungen :)
Gruß