@@ -1017,7 +1017,151 @@ void Adafruit_NeoPixel::show(void) {
1017
1017
// ESP8266 show() is external to enforce ICACHE_RAM_ATTR execution
1018
1018
espShow (pin, pixels, numBytes, is800KHz);
1019
1019
1020
- #endif // ESP8266
1020
+ #elif defined(__ARDUINO_ARC__)
1021
+
1022
+ // Arduino 101 -----------------------------------------------------------
1023
+
1024
+ PinDescription *pindesc = &g_APinDescription[pin];
1025
+ uint8_t *p = pixels, *end = p + numBytes;
1026
+ register uint8_t pix, mask;
1027
+
1028
+ if (pindesc->ulGPIOType == SS_GPIO) {
1029
+ register uint32_t reg = pindesc->ulGPIOBase + SS_GPIO_SWPORTA_DR;
1030
+ register uint32_t reg_val = __builtin_arc_lr ((volatile uint32_t )reg);
1031
+ register uint32_t reg_bit_high = reg_val | (1 << pindesc->ulGPIOId );
1032
+ register uint32_t reg_bit_low = reg_val & ~(1 << pindesc->ulGPIOId );
1033
+
1034
+ while (p < end) {
1035
+ pix = *p++;
1036
+ for (mask = 0x80 ; mask; mask >>= 1 ) {
1037
+ __builtin_arc_sr (reg_bit_high, (volatile uint32_t )reg);
1038
+ if (pix & mask) {
1039
+ __builtin_arc_nop ();
1040
+ __builtin_arc_nop ();
1041
+ __builtin_arc_nop ();
1042
+ __builtin_arc_nop ();
1043
+ __builtin_arc_nop ();
1044
+ __builtin_arc_nop ();
1045
+ __builtin_arc_nop ();
1046
+ __builtin_arc_nop ();
1047
+ __builtin_arc_nop ();
1048
+ __builtin_arc_nop ();
1049
+ __builtin_arc_nop ();
1050
+ __builtin_arc_nop ();
1051
+ __builtin_arc_nop ();
1052
+ __builtin_arc_nop ();
1053
+ __builtin_arc_nop ();
1054
+ __builtin_arc_nop ();
1055
+ __builtin_arc_sr (reg_bit_low, (volatile uint32_t )reg);
1056
+ __builtin_arc_nop ();
1057
+ __builtin_arc_nop ();
1058
+ __builtin_arc_nop ();
1059
+ __builtin_arc_nop ();
1060
+ __builtin_arc_nop ();
1061
+ __builtin_arc_nop ();
1062
+ __builtin_arc_nop ();
1063
+ __builtin_arc_nop ();
1064
+ } else {
1065
+ __builtin_arc_nop ();
1066
+ __builtin_arc_nop ();
1067
+ __builtin_arc_nop ();
1068
+ __builtin_arc_nop ();
1069
+ __builtin_arc_nop ();
1070
+ __builtin_arc_nop ();
1071
+ __builtin_arc_nop ();
1072
+ __builtin_arc_nop ();
1073
+ __builtin_arc_nop ();
1074
+ __builtin_arc_nop ();
1075
+ __builtin_arc_sr (reg_bit_low, (volatile uint32_t )reg);
1076
+ __builtin_arc_nop ();
1077
+ __builtin_arc_nop ();
1078
+ __builtin_arc_nop ();
1079
+ __builtin_arc_nop ();
1080
+ __builtin_arc_nop ();
1081
+ __builtin_arc_nop ();
1082
+ __builtin_arc_nop ();
1083
+ __builtin_arc_nop ();
1084
+ __builtin_arc_nop ();
1085
+ __builtin_arc_nop ();
1086
+ __builtin_arc_nop ();
1087
+ __builtin_arc_nop ();
1088
+ __builtin_arc_nop ();
1089
+ __builtin_arc_nop ();
1090
+ __builtin_arc_nop ();
1091
+ __builtin_arc_nop ();
1092
+ }
1093
+ }
1094
+ }
1095
+ } else if (pindesc->ulGPIOType == SOC_GPIO) {
1096
+ register uint32_t reg = pindesc->ulGPIOBase + SOC_GPIO_SWPORTA_DR;
1097
+ register uint32_t reg_val = MMIO_REG_VAL (reg);
1098
+ register uint32_t reg_bit_high = reg_val | (1 << pindesc->ulGPIOId );
1099
+ register uint32_t reg_bit_low = reg_val & ~(1 << pindesc->ulGPIOId );
1100
+
1101
+ while (p < end) {
1102
+ pix = *p++;
1103
+ for (mask = 0x80 ; mask; mask >>= 1 ) {
1104
+ MMIO_REG_VAL (reg) = reg_bit_high;
1105
+ if (pix & mask) {
1106
+ __builtin_arc_nop ();
1107
+ __builtin_arc_nop ();
1108
+ __builtin_arc_nop ();
1109
+ __builtin_arc_nop ();
1110
+ __builtin_arc_nop ();
1111
+ __builtin_arc_nop ();
1112
+ __builtin_arc_nop ();
1113
+ __builtin_arc_nop ();
1114
+ __builtin_arc_nop ();
1115
+ __builtin_arc_nop ();
1116
+ __builtin_arc_nop ();
1117
+ __builtin_arc_nop ();
1118
+ __builtin_arc_nop ();
1119
+ __builtin_arc_nop ();
1120
+ __builtin_arc_nop ();
1121
+ __builtin_arc_nop ();
1122
+ MMIO_REG_VAL (reg) = reg_bit_low;
1123
+ __builtin_arc_nop ();
1124
+ __builtin_arc_nop ();
1125
+ __builtin_arc_nop ();
1126
+ __builtin_arc_nop ();
1127
+ __builtin_arc_nop ();
1128
+ __builtin_arc_nop ();
1129
+ __builtin_arc_nop ();
1130
+ __builtin_arc_nop ();
1131
+ } else {
1132
+ __builtin_arc_nop ();
1133
+ __builtin_arc_nop ();
1134
+ __builtin_arc_nop ();
1135
+ __builtin_arc_nop ();
1136
+ __builtin_arc_nop ();
1137
+ __builtin_arc_nop ();
1138
+ __builtin_arc_nop ();
1139
+ __builtin_arc_nop ();
1140
+ __builtin_arc_nop ();
1141
+ __builtin_arc_nop ();
1142
+ MMIO_REG_VAL (reg) = reg_bit_low;
1143
+ __builtin_arc_nop ();
1144
+ __builtin_arc_nop ();
1145
+ __builtin_arc_nop ();
1146
+ __builtin_arc_nop ();
1147
+ __builtin_arc_nop ();
1148
+ __builtin_arc_nop ();
1149
+ __builtin_arc_nop ();
1150
+ __builtin_arc_nop ();
1151
+ __builtin_arc_nop ();
1152
+ __builtin_arc_nop ();
1153
+ __builtin_arc_nop ();
1154
+ __builtin_arc_nop ();
1155
+ __builtin_arc_nop ();
1156
+ __builtin_arc_nop ();
1157
+ __builtin_arc_nop ();
1158
+ __builtin_arc_nop ();
1159
+ }
1160
+ }
1161
+ }
1162
+ }
1163
+
1164
+ #endif
1021
1165
1022
1166
1023
1167
// END ARCHITECTURE SELECT ------------------------------------------------
0 commit comments