1 change: 1 addition & 0 deletions atmel-samd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ SRC_C = \
main.c \
moduos.c \
mphalport.c \
reset.c \
samd21_pins.c \
shared_dma.c \
rgb_led_status.c \
Expand Down
5 changes: 4 additions & 1 deletion atmel-samd/boards/arduino_zero/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
5 changes: 4 additions & 1 deletion atmel-samd/boards/circuitplayground_express/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
5 changes: 4 additions & 1 deletion atmel-samd/boards/feather_m0_adalogger/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
5 changes: 4 additions & 1 deletion atmel-samd/boards/feather_m0_basic/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
5 changes: 4 additions & 1 deletion atmel-samd/boards/feather_m0_express/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
9 changes: 6 additions & 3 deletions atmel-samd/boards/gemma_m0/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand All @@ -19,9 +21,9 @@
#endif

#ifndef USB_DEVICE_PRODUCT_NAME
# define USB_DEVICE_PRODUCT_NAME "Metro M0 with Flash (Experimental)"
# define USB_DEVICE_PRODUCT_NAME "Gemma M0"
#endif
// #define USB_DEVICE_SERIAL_NAME "12...EF"

#define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number
#define USB_DEVICE_GET_SERIAL_NAME_LENGTH 32
extern char serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH];
Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
6 changes: 3 additions & 3 deletions atmel-samd/boards/gemma_m0/mpconfigboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Gemma M0"
#define MICROPY_HW_MCU_NAME "samd21e18"

#define MICROPY_HW_APA102_MOSI (&pin_PA04)
#define MICROPY_HW_APA102_SCK (&pin_PA05)
#define MICROPY_HW_APA102_MOSI (&pin_PA00)
#define MICROPY_HW_APA102_SCK (&pin_PA01)

// #define CIRCUITPY_BITBANG_APA102

#define MICROPY_PORT_A (PORT_PA04 | PORT_PA05 | PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_A (PORT_PA00 | PORT_PA01 | PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_B (0)

#include "internal_flash.h"
Expand Down
2 changes: 1 addition & 1 deletion atmel-samd/boards/gemma_m0/mpconfigboard.mk
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PID = 0x801D

FLASH_IMPL = internal_flash.c

Expand Down
20 changes: 16 additions & 4 deletions atmel-samd/boards/gemma_m0/pins.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
#include "samd21_pins.h"

STATIC const mp_map_elem_t board_global_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_A1), (mp_obj_t)&pin_PA05 }, // pad 1
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA05 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_RX), (mp_obj_t)&pin_PA05 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCL), (mp_obj_t)&pin_PA05 },

{ MP_OBJ_NEW_QSTR(MP_QSTR_A2), (mp_obj_t)&pin_PA04 }, // pad 0
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA04 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_TX), (mp_obj_t)&pin_PA04 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), (mp_obj_t)&pin_PA04 },

{ MP_OBJ_NEW_QSTR(MP_QSTR_A0), (mp_obj_t)&pin_PA02 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D1), (mp_obj_t)&pin_PA02 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA09 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA08 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_MOSI), (mp_obj_t)&pin_PA04 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_SCK), (mp_obj_t)&pin_PA05 },

{ MP_OBJ_NEW_QSTR(MP_QSTR_L), (mp_obj_t)&pin_PA23 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D13), (mp_obj_t)&pin_PA23 },

{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_MOSI), (mp_obj_t)&pin_PA00 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_SCK), (mp_obj_t)&pin_PA01 },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
7 changes: 5 additions & 2 deletions atmel-samd/boards/metro_m0_express/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand All @@ -19,7 +21,7 @@
#endif

#ifndef USB_DEVICE_PRODUCT_NAME
# define USB_DEVICE_PRODUCT_NAME "Metro M0 with Flash (Experimental)"
# define USB_DEVICE_PRODUCT_NAME "Metro M0 Express"
#endif
// #define USB_DEVICE_SERIAL_NAME "12...EF"
#define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number
Expand Down Expand Up @@ -55,7 +57,8 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)
#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
8 changes: 6 additions & 2 deletions atmel-samd/boards/trinket_m0/conf_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "asf/common/services/usb/class/cdc/usb_protocol_cdc.h"

#ifndef CONF_USB_H_INCLUDED
#define CONF_USB_H_INCLUDED

Expand All @@ -19,7 +21,7 @@
#endif

#ifndef USB_DEVICE_PRODUCT_NAME
# define USB_DEVICE_PRODUCT_NAME "Metro M0 with Flash (Experimental)"
# define USB_DEVICE_PRODUCT_NAME "Trinket M0"
#endif
// #define USB_DEVICE_SERIAL_NAME "12...EF"
#define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number
Expand Down Expand Up @@ -55,7 +57,9 @@ extern void mp_cdc_disable(uint8_t port);

#define UDI_CDC_RX_NOTIFY(port) usb_rx_notify()
void usb_rx_notify(void);
#define UDI_CDC_SET_CODING_EXT(port,cfg)

#define UDI_CDC_SET_CODING_EXT(port,cfg) usb_coding_notify(port, cfg)
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding);
#define UDI_CDC_SET_DTR_EXT(port,set) usb_dtr_notify(port, set)
void usb_dtr_notify(uint8_t port, bool set);
#define UDI_CDC_SET_RTS_EXT(port,set) usb_rts_notify(port, set)
Expand Down
6 changes: 3 additions & 3 deletions atmel-samd/boards/trinket_m0/mpconfigboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
#define MICROPY_HW_MCU_NAME "samd21e18"

// Rev B - Black
#define MICROPY_HW_APA102_MOSI (&pin_PA04)
#define MICROPY_HW_APA102_SCK (&pin_PA05)
#define MICROPY_HW_APA102_MOSI (&pin_PA00)
#define MICROPY_HW_APA102_SCK (&pin_PA01)

#define MICROPY_PORT_A (PORT_PA04 | PORT_PA05 | PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_A (PORT_PA00 | PORT_PA01 | PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_B (0)

#include "internal_flash.h"
Expand Down
2 changes: 1 addition & 1 deletion atmel-samd/boards/trinket_m0/mpconfigboard.mk
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PID = 0x801F

FLASH_IMPL = internal_flash.c

Expand Down
13 changes: 9 additions & 4 deletions atmel-samd/boards/trinket_m0/pins.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
#include "samd21_pins.h"

STATIC const mp_map_elem_t board_global_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA04 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA08 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), (mp_obj_t)&pin_PA08 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D1), (mp_obj_t)&pin_PA02 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA05 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_A0), (mp_obj_t)&pin_PA02 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA09 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCL), (mp_obj_t)&pin_PA09 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D4), (mp_obj_t)&pin_PA06 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_TX), (mp_obj_t)&pin_PA06 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D3), (mp_obj_t)&pin_PA07 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_RX), (mp_obj_t)&pin_PA07 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D13),(mp_obj_t)&pin_PA10 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_MOSI), (mp_obj_t)&pin_PA04 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_SCK), (mp_obj_t)&pin_PA05 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_MOSI), (mp_obj_t)&pin_PA00 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_APA102_SCK), (mp_obj_t)&pin_PA01 },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
10 changes: 9 additions & 1 deletion atmel-samd/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,15 @@ void init_flash_fs(void) {
if (res == FR_NO_FILESYSTEM) {
// no filesystem so create a fresh one

res = f_mkfs("/flash", 0, 0);
// XOR the serial number together to create a 32-bit id.
uint32_t volume_id = 0;
uint32_t* addresses[4] = {(uint32_t *) 0x0080A00C, (uint32_t *) 0x0080A040,
(uint32_t *) 0x0080A044, (uint32_t *) 0x0080A048};
for (int i = 0; i < 4; i++) {
volume_id ^= *(addresses[i]);
}

res = f_mkfs("/flash", 0, 0, volume_id);
// Flush the new file system to make sure its repaired immediately.
flash_flush();
if (res != FR_OK) {
Expand Down
1 change: 1 addition & 0 deletions atmel-samd/mpconfigport.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
#define MICROPY_CPYTHON_COMPAT (0)
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT)
#define MICROPY_STREAMS_NON_BLOCK (1)

// fatfs configuration used in ffconf.h
#define MICROPY_FATFS_ENABLE_LFN (1)
Expand Down
38 changes: 21 additions & 17 deletions atmel-samd/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,38 +39,42 @@ extern struct usart_module usart_instance;

// Read by main to know when USB is connected.
volatile bool mp_msc_enabled = false;
bool mp_msc_enable()
{
mp_msc_enabled = true;
return true;
bool mp_msc_enable() {
mp_msc_enabled = true;
return true;
}

void mp_msc_disable()
{
mp_msc_enabled = false;
void mp_msc_disable() {
mp_msc_enabled = false;
}

bool mp_cdc_enable(uint8_t port)
{
mp_cdc_enabled = false;
return true;
bool mp_cdc_enable(uint8_t port) {
mp_cdc_enabled = false;
return true;
}

void mp_cdc_disable(uint8_t port)
{
mp_cdc_enabled = false;
void mp_cdc_disable(uint8_t port) {
mp_cdc_enabled = false;
}

volatile bool reset_on_disconnect = false;

void usb_dtr_notify(uint8_t port, bool set) {
mp_cdc_enabled = set;
mp_cdc_enabled = set;
if (!set && reset_on_disconnect) {
reset_to_bootloader();
}
}

void usb_rts_notify(uint8_t port, bool set) {
return;
}

void usb_rx_notify(void)
{
void usb_coding_notify(uint8_t port, usb_cdc_line_coding_t* coding) {
reset_on_disconnect = coding->dwDTERate == 1200;
}

void usb_rx_notify(void) {
irqflags_t flags;
if (mp_cdc_enabled) {
while (udi_cdc_is_rx_ready()) {
Expand Down
Loading