summaryrefslogtreecommitdiff
path: root/ports
diff options
context:
space:
mode:
authorsommersoft <sommersoft@gmail.com>2019-03-01 21:24:30 -0600
committersommersoft <sommersoft@gmail.com>2019-03-01 21:24:30 -0600
commita44bfc2730c246738dd8d636d18ffb6591673864 (patch)
tree786621e0549a8f2dee327fc0d04bd2c5786c8d10 /ports
parent4d47ce5c60d5e024b9a95f58372bfbb27772ef1a (diff)
parent17bf2afa414d605676643be301a05d74c3b68290 (diff)
Merge branch 'master' of https://github.com/adafruit/circuitpython into new_freq_in
Diffstat (limited to 'ports')
-rw-r--r--ports/atmel-samd/boards/pewpew10/board.c37
-rw-r--r--ports/atmel-samd/boards/pewpew10/mpconfigboard.h34
-rw-r--r--ports/atmel-samd/boards/pewpew10/mpconfigboard.mk22
-rw-r--r--ports/atmel-samd/boards/pewpew10/pins.c35
-rw-r--r--ports/atmel-samd/boards/pyportal/pins.c15
-rw-r--r--ports/atmel-samd/common-hal/pulseio/PWMOut.c38
-rw-r--r--ports/atmel-samd/supervisor/port.c8
-rw-r--r--ports/atmel-samd/timer_handler.c17
-rw-r--r--ports/atmel-samd/timer_handler.h2
9 files changed, 174 insertions, 34 deletions
diff --git a/ports/atmel-samd/boards/pewpew10/board.c b/ports/atmel-samd/boards/pewpew10/board.c
new file mode 100644
index 000000000..d7e856d61
--- /dev/null
+++ b/ports/atmel-samd/boards/pewpew10/board.c
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "boards/board.h"
+
+void board_init(void) {
+}
+
+bool board_requests_safe_mode(void) {
+ return false;
+}
+
+void reset_board(void) {
+}
diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h
new file mode 100644
index 000000000..09618431b
--- /dev/null
+++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h
@@ -0,0 +1,34 @@
+#define MICROPY_HW_BOARD_NAME "PewPew 10.2"
+#define MICROPY_HW_MCU_NAME "samd21e18"
+
+#define MICROPY_PORT_A (PORT_PA24 | PORT_PA25)
+#define MICROPY_PORT_B (0)
+#define MICROPY_PORT_C (0)
+
+#define CIRCUITPY_INTERNAL_NVM_SIZE 0
+
+#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000)
+
+
+#define IGNORE_PIN_PB00 1
+#define IGNORE_PIN_PB01 1
+#define IGNORE_PIN_PB02 1
+#define IGNORE_PIN_PB03 1
+#define IGNORE_PIN_PB04 1
+#define IGNORE_PIN_PB05 1
+#define IGNORE_PIN_PB06 1
+#define IGNORE_PIN_PB07 1
+#define IGNORE_PIN_PB08 1
+#define IGNORE_PIN_PB09 1
+#define IGNORE_PIN_PB10 1
+#define IGNORE_PIN_PB11 1
+#define IGNORE_PIN_PB12 1
+#define IGNORE_PIN_PB13 1
+#define IGNORE_PIN_PB14 1
+#define IGNORE_PIN_PB15 1
+#define IGNORE_PIN_PB16 1
+#define IGNORE_PIN_PB17 1
+#define IGNORE_PIN_PB22 1
+#define IGNORE_PIN_PB23 1
+#define IGNORE_PIN_PB30 1
+#define IGNORE_PIN_PB31 1
diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk b/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk
new file mode 100644
index 000000000..983e48e21
--- /dev/null
+++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk
@@ -0,0 +1,22 @@
+LD_FILE = boards/samd21x18-bootloader.ld
+USB_VID = 0x239A
+USB_PID = 0x801D
+USB_PRODUCT = "PewPew 10.2"
+USB_MANUFACTURER = "Radomir Dopieralski"
+
+INTERNAL_FLASH_FILESYSTEM = 1
+LONGINT_IMPL = NONE
+
+CHIP_VARIANT = SAMD21E18A
+CHIP_FAMILY = samd21
+
+FROZEN_MPY_DIRS += $(TOP)/frozen/pew-pewpew-standalone-10.x
+
+CIRCUITPY_PEW = 1
+CIRCUITPY_ANALOGIO = 1
+CIRCUITPY_MATH = 1
+CIRCUITPY_NEOPIXEL_WRITE = 1
+CIRCUITPY_RTC = 0
+CIRCUITPY_SAMD = 0
+CIRCUITPY_USB_MIDI = 0
+CIRCUITPY_SMALL_BUILD = 1
diff --git a/ports/atmel-samd/boards/pewpew10/pins.c b/ports/atmel-samd/boards/pewpew10/pins.c
new file mode 100644
index 000000000..4a8225ad9
--- /dev/null
+++ b/ports/atmel-samd/boards/pewpew10/pins.c
@@ -0,0 +1,35 @@
+#include "shared-bindings/board/__init__.h"
+
+#include "supervisor/shared/board_busses.h"
+
+STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
+ { MP_ROM_QSTR(MP_QSTR__R1), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR__R2), MP_ROM_PTR(&pin_PA11) },
+ { MP_ROM_QSTR(MP_QSTR__R3), MP_ROM_PTR(&pin_PA28) },
+ { MP_ROM_QSTR(MP_QSTR__R4), MP_ROM_PTR(&pin_PA09) },
+ { MP_ROM_QSTR(MP_QSTR__R5), MP_ROM_PTR(&pin_PA16) },
+ { MP_ROM_QSTR(MP_QSTR__R6), MP_ROM_PTR(&pin_PA27) },
+ { MP_ROM_QSTR(MP_QSTR__R7), MP_ROM_PTR(&pin_PA17) },
+ { MP_ROM_QSTR(MP_QSTR__R8), MP_ROM_PTR(&pin_PA22) },
+
+ { MP_ROM_QSTR(MP_QSTR__C8), MP_ROM_PTR(&pin_PA10) },
+ { MP_ROM_QSTR(MP_QSTR__C7), MP_ROM_PTR(&pin_PA18) },
+ { MP_ROM_QSTR(MP_QSTR__C6), MP_ROM_PTR(&pin_PA19) },
+ { MP_ROM_QSTR(MP_QSTR__C5), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR__C4), MP_ROM_PTR(&pin_PA23) },
+ { MP_ROM_QSTR(MP_QSTR__C3), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR__C2), MP_ROM_PTR(&pin_PA14) },
+ { MP_ROM_QSTR(MP_QSTR__C1), MP_ROM_PTR(&pin_PA15) },
+
+ { MP_ROM_QSTR(MP_QSTR_P1), MP_ROM_PTR(&pin_PA30) },
+ { MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_PA31) },
+ { MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_PA00) },
+ { MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_PA01) },
+ { MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_PA02) },
+ { MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_PA03) },
+ { MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_PA04) },
+
+ { MP_ROM_QSTR(MP_QSTR__BUTTONS), MP_ROM_PTR(&pin_PA08) },
+
+};
+MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
diff --git a/ports/atmel-samd/boards/pyportal/pins.c b/ports/atmel-samd/boards/pyportal/pins.c
index 24ebd92bb..6a4736a11 100644
--- a/ports/atmel-samd/boards/pyportal/pins.c
+++ b/ports/atmel-samd/boards/pyportal/pins.c
@@ -11,18 +11,21 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_AUDIO_OUT), MP_ROM_PTR(&pin_PA02) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) }, // analog out/in
{ MP_OBJ_NEW_QSTR(MP_QSTR_SPEAKER_ENABLE), MP_ROM_PTR(&pin_PA27) },
+
+ // Light sensor
{ MP_OBJ_NEW_QSTR(MP_QSTR_LIGHT), MP_ROM_PTR(&pin_PA07) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA07) },
// STEMMA connectors
- { MP_OBJ_NEW_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PA04) }, // D3
- { MP_OBJ_NEW_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA04) }, // A1/D3
- { MP_OBJ_NEW_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA05) }, // D4
- { MP_OBJ_NEW_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA05) }, // A4/D4
+ { MP_OBJ_NEW_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PA04) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA04) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA05) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA05) },
// Indicator LED
- { MP_OBJ_NEW_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA27) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_PA27) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PB23) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_PB23) },
+
{ MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL),MP_ROM_PTR(&pin_PB22) },
// LCD pins
diff --git a/ports/atmel-samd/common-hal/pulseio/PWMOut.c b/ports/atmel-samd/common-hal/pulseio/PWMOut.c
index 19daaa14f..dd85e8c02 100644
--- a/ports/atmel-samd/common-hal/pulseio/PWMOut.c
+++ b/ports/atmel-samd/common-hal/pulseio/PWMOut.c
@@ -328,32 +328,29 @@ extern void common_hal_pulseio_pwmout_set_duty_cycle(pulseio_pwmout_obj_t* self,
#endif
#ifdef SAMD51
Tc* tc = tc_insts[t->index];
- while (tc->COUNT16.SYNCBUSY.bit.CC1 != 0) {
- // Wait for a previous value to be written. This can wait up to one period so we do
- // other stuff in the meantime.
- #ifdef MICROPY_VM_HOOK_LOOP
- MICROPY_VM_HOOK_LOOP
- #endif
- }
+ while (tc->COUNT16.SYNCBUSY.bit.CC1 != 0) {}
tc->COUNT16.CCBUF[1].reg = adjusted_duty;
#endif
} else {
uint32_t adjusted_duty = ((uint64_t) tcc_periods[t->index]) * duty / 0xffff;
uint8_t channel = tcc_channel(t);
Tcc* tcc = tcc_insts[t->index];
- while ((tcc->SYNCBUSY.vec.CC & (1 << channel)) != 0) {
- // Wait for a previous value to be written. This can wait up to one period so we do
- // other stuff in the meantime.
- #ifdef MICROPY_VM_HOOK_LOOP
- MICROPY_VM_HOOK_LOOP
- #endif
- }
+
+ // Write into the CC buffer register, which will be transferred to the
+ // CC register on an UPDATE (when period is finished).
+ // Do clock domain syncing as necessary.
+
+ while (tcc->SYNCBUSY.reg != 0) {}
+
+ // Lock out double-buffering while updating the CCB value.
+ tcc->CTRLBSET.bit.LUPD = 1;
#ifdef SAMD21
tcc->CCB[channel].reg = adjusted_duty;
#endif
#ifdef SAMD51
tcc->CCBUF[channel].reg = adjusted_duty;
#endif
+ tcc->CTRLBCLR.bit.LUPD = 1;
}
}
@@ -368,7 +365,12 @@ uint16_t common_hal_pulseio_pwmout_get_duty_cycle(pulseio_pwmout_obj_t* self) {
Tcc* tcc = tcc_insts[t->index];
uint8_t channel = tcc_channel(t);
uint32_t cv = 0;
+
+ while (tcc->SYNCBUSY.bit.CTRLB) {}
+
#ifdef SAMD21
+ // If CCBV (CCB valid) is set, the CCB value hasn't yet been copied
+ // to the CC value.
if ((tcc->STATUS.vec.CCBV & (1 << channel)) != 0) {
cv = tcc->CCB[channel].reg;
} else {
@@ -425,9 +427,7 @@ void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self,
tc->COUNT16.CC[0].reg = new_top;
#endif
#ifdef SAMD51
- while (tc->COUNT16.SYNCBUSY.reg != 0) {
- /* Wait for sync */
- }
+ while (tc->COUNT16.SYNCBUSY.reg != 0) {}
tc->COUNT16.CCBUF[0].reg = new_top;
#endif
} else {
@@ -438,14 +438,12 @@ void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self,
tcc->CTRLA.bit.PRESCALER = new_divisor;
tcc_set_enable(tcc, true);
}
+ while (tcc->SYNCBUSY.reg != 0) {}
tcc_periods[t->index] = new_top;
#ifdef SAMD21
tcc->PERB.bit.PERB = new_top;
#endif
#ifdef SAMD51
- while (tcc->SYNCBUSY.reg != 0) {
- /* Wait for sync */
- }
tcc->PERBUF.bit.PERBUF = new_top;
#endif
}
diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c
index aee082de0..8d25806b7 100644
--- a/ports/atmel-samd/supervisor/port.c
+++ b/ports/atmel-samd/supervisor/port.c
@@ -68,9 +68,10 @@
#include "tusb.h"
-#ifdef CIRCUITPY_GAMEPAD_TICKS
+#if CIRCUITPY_GAMEPAD
#include "shared-module/gamepad/__init__.h"
#endif
+#include "shared-module/_pew/PewPew.h"
extern volatile bool mp_msc_enabled;
@@ -222,9 +223,12 @@ void reset_port(void) {
reset_gclks();
-#ifdef CIRCUITPY_GAMEPAD_TICKS
+#if CIRCUITPY_GAMEPAD
gamepad_reset();
#endif
+#if CIRCUITPY_PEW
+ pew_reset();
+#endif
reset_event_system();
diff --git a/ports/atmel-samd/timer_handler.c b/ports/atmel-samd/timer_handler.c
index 7f68e4a92..059d4330e 100644
--- a/ports/atmel-samd/timer_handler.c
+++ b/ports/atmel-samd/timer_handler.c
@@ -30,7 +30,7 @@
#include "timer_handler.h"
#include "common-hal/pulseio/PulseOut.h"
-#include "common-hal/frequencyio/FrequencyIn.h"
+#include "shared-module/_pew/PewPew.h"
static uint8_t tc_handler[TC_INST_NUM];
@@ -45,10 +45,17 @@ void shared_timer_handler(bool is_tc, uint8_t index) {
// Make sure to add the handler #define to timer_handler.h
if (is_tc) {
uint8_t handler = tc_handler[index];
- if (handler == TC_HANDLER_PULSEOUT) {
- pulseout_interrupt_handler(index);
- } else if (handler == TC_HANDLER_FREQUENCYIN) {
- frequencyin_interrupt_handler(index);
+ switch(handler) {
+ case TC_HANDLER_PULSEOUT:
+ pulseout_interrupt_handler(index);
+ break;
+ case TC_HANDLER_PEW:
+#if CIRCUITPY_PEW
+ pewpew_interrupt_handler(index);
+#endif
+ break;
+ default:
+ break;
}
}
}
diff --git a/ports/atmel-samd/timer_handler.h b/ports/atmel-samd/timer_handler.h
index a495e21f2..e249fca36 100644
--- a/ports/atmel-samd/timer_handler.h
+++ b/ports/atmel-samd/timer_handler.h
@@ -28,7 +28,7 @@
#define TC_HANDLER_NO_INTERRUPT 0x0
#define TC_HANDLER_PULSEOUT 0x1
-#define TC_HANDLER_FREQUENCYIN 0x2
+#define TC_HANDLER_PEW 0x2
void set_timer_handler(bool is_tc, uint8_t index, uint8_t timer_handler);
void shared_timer_handler(bool is_tc, uint8_t index);