1+ #if defined(ARDUINO_ARCH_PSOC6 )
2+
3+ #include "cyhal_gpio.h"
4+ #include "cyhal_system.h"
5+ #include "cy_syslib.h"
6+ #include "Arduino.h"
7+
8+ void psoc6_show (uint8_t pin , uint8_t * pixels , uint32_t numBytes , bool is800KHZ )
9+ {
10+ if (!pixels ) return ;
11+ noInterrupts ();
12+ GPIO_PRT_Type * base = CYHAL_GET_PORTADDR (mapping_gpio_pin [pin ]);
13+ uint32_t pinNum = CYHAL_GET_PIN (mapping_gpio_pin [pin ]);
14+ if (is800KHZ ){
15+ for (uint16_t i = 0 ; i < numBytes ; i ++ ) {
16+ uint8_t b = pixels [i ];
17+ for (uint8_t j = 0 ; j < 8 ; j ++ ) {
18+ bool bit = (b & 0x80 ) != 0 ;
19+ b <<= 1 ;
20+ switch (bit ) {
21+ case 1 :
22+ // Send a 1-bit
23+ Cy_GPIO_Write (base , pinNum , 1 );
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 , 0 );
28+ Cy_GPIO_Write (base , pinNum , 0 );
29+ break ;
30+ case 0 :
31+ // Send a 0-bit
32+ Cy_GPIO_Write (base , pinNum , 1 );
33+ Cy_GPIO_Write (base , pinNum , 1 );
34+ Cy_GPIO_Write (base , pinNum , 0 );
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+ break ;
40+ }
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
0 commit comments