Skip to content

Commit d232056

Browse files
committed
atmel-samd: Update and enable neopixel_write for ASF4, tested on SAMD21 only.
1 parent 8065477 commit d232056

File tree

4 files changed

+7
-7
lines changed

4 files changed

+7
-7
lines changed

atmel-samd/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ SRC_COMMON_HAL = \
230230
microcontroller/__init__.c \
231231
microcontroller/Pin.c \
232232
microcontroller/Processor.c \
233+
neopixel_write/__init__.c \
233234
os/__init__.c \
234235
time/__init__.c
235236
# analogio/__init__.c \

atmel-samd/boards/circuitplayground_express/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,6 @@ void reset_board(void) {
6161
common_hal_digitalio_digitalinout_construct(&neopixel_pin, &pin_PB23);
6262
common_hal_digitalio_digitalinout_switch_to_output(&neopixel_pin, false,
6363
DRIVE_MODE_PUSH_PULL);
64-
// common_hal_neopixel_write(&neopixel_pin, empty, 30);
64+
common_hal_neopixel_write(&neopixel_pin, empty, 30);
6565
common_hal_digitalio_digitalinout_deinit(&neopixel_pin);
6666
}

atmel-samd/common-hal/neopixel_write/__init__.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2424
* THE SOFTWARE.
2525
*/
26+
#include "hpl_gpio.h"
2627

27-
#include "mphalport.h"
28+
#include "py/mphal.h"
2829

2930
#include "shared-bindings/neopixel_write/__init__.h"
3031

31-
#include "asf/common2/services/delay/delay.h"
32-
#include "asf/sam0/drivers/port/port.h"
3332

3433
void common_hal_neopixel_write(const digitalio_digitalinout_obj_t* digitalinout, uint8_t *pixels, uint32_t numBytes) {
3534
// This is adapted directly from the Adafruit NeoPixel library SAMD21G18A code:
@@ -45,7 +44,7 @@ void common_hal_neopixel_write(const digitalio_digitalinout_obj_t* digitalinout,
4544
NVMCTRL->CTRLB.bit.READMODE = NVMCTRL_CTRLB_READMODE_DETERMINISTIC_Val;
4645

4746
uint32_t pin = digitalinout->pin->pin;
48-
port = port_get_group_from_gpio_pin(pin);
47+
port = &PORT->Group[GPIO_PORT(pin)]; // Convert GPIO # to port register
4948
pinMask = (1UL << (pin % 32)); // From port_pin_set_output_level ASF code.
5049
ptr = pixels;
5150
end = ptr + numBytes;
@@ -83,5 +82,5 @@ void common_hal_neopixel_write(const digitalio_digitalinout_obj_t* digitalinout,
8382
// 50us delay to let pixels latch to the data that was just sent.
8483
// This could be optimized to only occur before pixel writes when necessary,
8584
// like in the Arduino library.
86-
delay_us(50);
85+
mp_hal_delay_us(50);
8786
}

atmel-samd/mpconfigport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ extern const struct _mp_obj_module_t usb_hid_module;
203203
// { MP_OBJ_NEW_QSTR(MP_QSTR_touchio), (mp_obj_t)&touchio_module },
204204
// { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module },
205205
// { MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module },
206-
// { MP_OBJ_NEW_QSTR(MP_QSTR_neopixel_write),(mp_obj_t)&neopixel_write_module },
207206
// { MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module },
208207
// { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module },
209208
// { MP_OBJ_NEW_QSTR(MP_QSTR_samd),(mp_obj_t)&samd_module },
@@ -213,6 +212,7 @@ extern const struct _mp_obj_module_t usb_hid_module;
213212
{ MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \
214213
{ MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \
215214
{ MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)&microcontroller_module }, \
215+
{ MP_OBJ_NEW_QSTR(MP_QSTR_neopixel_write),(mp_obj_t)&neopixel_write_module }, \
216216
{ MP_OBJ_NEW_QSTR(MP_QSTR_os), (mp_obj_t)&os_module }, \
217217
{ MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \
218218
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module },

0 commit comments

Comments
 (0)