Krolyxon
Commit 1d55752

Branches

Tags

Refs →

orion-rf.piolibdepsesp32-s3-n16r8Adafruit NeoPixelpsoc6.c

87 lines · 3.1 KB · C

1#if defined(ARDUINO_ARCH_PSOC6)
2
3#include "Arduino.h"
4#include "cy_syslib.h"
5#include "cyhal_gpio.h"
6#include "cyhal_system.h"
7
8void psoc6_show(uint8_t pin, uint8_t *pixels, uint32_t numBytes,
9 bool is800KHZ) {
10 if (!pixels)
11 return;
12 noInterrupts();
13 GPIO_PRT_Type *base = CYHAL_GET_PORTADDR(mapping_gpio_pin[pin]);
14 uint32_t pinNum = CYHAL_GET_PIN(mapping_gpio_pin[pin]);
15 if (is800KHZ) {
16 for (uint16_t i = 0; i < numBytes; i++) {
17 uint8_t b = pixels[i];
18 for (uint8_t j = 0; j < 8; j++) {
19 bool bit = (b & 0x80) != 0;
20 b <<= 1;
21 switch (bit) {
22 case 1:
23 // Send a 1-bit
24 Cy_GPIO_Write(base, pinNum, 1);
25 Cy_GPIO_Write(base, pinNum, 1);
26 Cy_GPIO_Write(base, pinNum, 1);
27 Cy_GPIO_Write(base, pinNum, 1);
28 Cy_GPIO_Write(base, pinNum, 0);
29 Cy_GPIO_Write(base, pinNum, 0);
30 break;
31 case 0:
32 // Send a 0-bit
33 Cy_GPIO_Write(base, pinNum, 1);
34 Cy_GPIO_Write(base, pinNum, 1);
35 Cy_GPIO_Write(base, pinNum, 0);
36 Cy_GPIO_Write(base, pinNum, 0);
37 Cy_GPIO_Write(base, pinNum, 0);
38 Cy_GPIO_Write(base, pinNum, 0);
39 Cy_GPIO_Write(base, pinNum, 0);
40 break;
41 }
42 }
43 }
44 } else {
45 for (size_t i = 0; i < numBytes; i++) {
46 uint8_t b = pixels[i];
47 for (uint8_t j = 0; j < 8; j++) {
48 bool bit = (b & 0x80) != 0;
49 b <<= 1;
50 switch (bit) {
51 case 1:
52 // Send a 1-bit
53 Cy_GPIO_Write(base, pinNum, 1);
54 Cy_GPIO_Write(base, pinNum, 1);
55 Cy_GPIO_Write(base, pinNum, 1);
56 Cy_GPIO_Write(base, pinNum, 1);
57 Cy_GPIO_Write(base, pinNum, 1);
58 Cy_GPIO_Write(base, pinNum, 1);
59 Cy_GPIO_Write(base, pinNum, 1);
60 Cy_GPIO_Write(base, pinNum, 1);
61 Cy_GPIO_Write(base, pinNum, 0);
62 Cy_GPIO_Write(base, pinNum, 0);
63 Cy_GPIO_Write(base, pinNum, 0);
64 break;
65 case 0:
66 // Send a 0-bit
67 Cy_GPIO_Write(base, pinNum, 1);
68 Cy_GPIO_Write(base, pinNum, 1);
69 Cy_GPIO_Write(base, pinNum, 1);
70 Cy_GPIO_Write(base, pinNum, 1);
71 Cy_GPIO_Write(base, pinNum, 0);
72 Cy_GPIO_Write(base, pinNum, 0);
73 Cy_GPIO_Write(base, pinNum, 0);
74 Cy_GPIO_Write(base, pinNum, 0);
75 Cy_GPIO_Write(base, pinNum, 0);
76 Cy_GPIO_Write(base, pinNum, 0);
77 Cy_GPIO_Write(base, pinNum, 0);
78 break;
79 }
80 }
81 }
82 }
83 interrupts();
84 delayMicroseconds(50);
85 return;
86}
87#endif