atmel-samd: Introduce board reset mechanic used on CircuitPlayground
Express to ensure the Neopixels are off after reloads.
This commit is contained in:
parent
3e23464b1e
commit
a715bf6bac
@ -44,3 +44,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -39,4 +39,7 @@ void board_init(void);
|
||||
// way.
|
||||
bool board_requests_safe_mode(void);
|
||||
|
||||
// Reset the state of off MCU components such as neopixels.
|
||||
void reset_board(void);
|
||||
|
||||
#endif // __MICROPY_INCLUDED_ATMEL_SAMD_BOARDS_BOARD_H__
|
||||
|
@ -24,9 +24,14 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "boards/board.h"
|
||||
#include "asf/sam0/drivers/port/port.h"
|
||||
#include "common-hal/microcontroller/Pin.h"
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#include "shared-bindings/neopixel_write/__init__.h"
|
||||
#include "samd21_pins.h"
|
||||
|
||||
void board_init(void)
|
||||
{
|
||||
@ -47,3 +52,14 @@ bool board_requests_safe_mode(void) {
|
||||
reset_pin(PIN_PA28);
|
||||
return safe_mode;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
uint8_t empty[30];
|
||||
memset(empty, 0, 30);
|
||||
digitalio_digitalinout_obj_t neopixel_pin;
|
||||
common_hal_digitalio_digitalinout_construct(&neopixel_pin, &pin_PB23);
|
||||
common_hal_digitalio_digitalinout_switch_to_output(&neopixel_pin, false,
|
||||
DRIVE_MODE_PUSH_PULL);
|
||||
common_hal_neopixel_write(&neopixel_pin, empty, 30);
|
||||
common_hal_digitalio_digitalinout_deinit(&neopixel_pin);
|
||||
}
|
||||
|
@ -33,3 +33,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -33,3 +33,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -33,3 +33,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -33,3 +33,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -44,3 +44,6 @@ void board_init(void)
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -26,10 +26,12 @@
|
||||
|
||||
#include "boards/board.h"
|
||||
|
||||
void board_init(void)
|
||||
{
|
||||
void board_init(void) {
|
||||
}
|
||||
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
@ -594,6 +594,7 @@ int main(void) {
|
||||
|
||||
// Reset everything and prep MicroPython to run boot.py.
|
||||
reset_samd21();
|
||||
reset_board();
|
||||
reset_mp();
|
||||
|
||||
// Turn on autoreload by default but before boot.py in case it wants to change it.
|
||||
@ -656,6 +657,7 @@ int main(void) {
|
||||
autoreload_enable();
|
||||
}
|
||||
reset_samd21();
|
||||
reset_board();
|
||||
reset_mp();
|
||||
}
|
||||
if (exit_code == PYEXEC_FORCED_EXIT) {
|
||||
@ -665,6 +667,7 @@ int main(void) {
|
||||
first_run = false;
|
||||
skip_repl = start_mp(safe_mode);
|
||||
reset_samd21();
|
||||
reset_board();
|
||||
reset_mp();
|
||||
} else if (exit_code != 0) {
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user