4747#include "mxc_delay.h"
4848#include "rtc.h"
4949
50+ // Externs defined by linker .ld file
51+ extern uint32_t _stack , _heap , _estack , _eheap ;
52+ extern uint32_t _ebss ;
53+
54+ // From boards/$(BOARD)/board.c
55+ extern const mxc_gpio_cfg_t pb_pin [];
56+ extern const int num_pbs ;
57+ extern const mxc_gpio_cfg_t led_pin [];
58+ extern const int num_leds ;
59+
5060//todo: define an LED HAL
5161// #include "peripherals/led.h"
5262
53- #ifdef MAX32690
54- // Board-level setup for MAX32690
55- // clang-format off
56- const mxc_gpio_cfg_t pb_pin [] = {
57- { MXC_GPIO1 , MXC_GPIO_PIN_27 , MXC_GPIO_FUNC_IN , MXC_GPIO_PAD_NONE , MXC_GPIO_VSSEL_VDDIOH , MXC_GPIO_DRVSTR_0 },
58- };
59- const unsigned int num_pbs = (sizeof (pb_pin ) / sizeof (mxc_gpio_cfg_t ));
60-
61- const mxc_gpio_cfg_t led_pin [] = {
62- { MXC_GPIO2 , MXC_GPIO_PIN_1 , MXC_GPIO_FUNC_OUT , MXC_GPIO_PAD_NONE , MXC_GPIO_VSSEL_VDDIO , MXC_GPIO_DRVSTR_0 },
63- { MXC_GPIO0 , MXC_GPIO_PIN_11 , MXC_GPIO_FUNC_OUT , MXC_GPIO_PAD_NONE , MXC_GPIO_VSSEL_VDDIO , MXC_GPIO_DRVSTR_0 },
64- { MXC_GPIO0 , MXC_GPIO_PIN_12 , MXC_GPIO_FUNC_OUT , MXC_GPIO_PAD_NONE , MXC_GPIO_VSSEL_VDDIO , MXC_GPIO_DRVSTR_0 },
65- };
66- const unsigned int num_leds = (sizeof (led_pin ) / sizeof (mxc_gpio_cfg_t ));
67- // clang-format on
68- #endif
69-
7063// For caching rtc data for ticks
7164static uint32_t subsec , sec = 0 ;
7265
@@ -96,7 +89,7 @@ safe_mode_t port_init(void) {
9689 }
9790
9891 // Turn on one LED to indicate Sign of Life
99- MXC_GPIO_OutSet (led_pin [0 ].port , led_pin [0 ].mask );
92+ MXC_GPIO_OutSet (led_pin [2 ].port , led_pin [2 ].mask );
10093
10194 // Init RTC w/ 0sec, 0subsec
10295 // Driven by 32.768 kHz ERTCO, with ssec= 1/4096 s
@@ -120,23 +113,9 @@ void reset_cpu(void) {
120113
121114// Reset MCU state
122115void reset_port (void ) {
123- int err ;
124- // Reset GPIO Ports
125- // Enable GPIO (enables clocks + common init for ports)
126- for (int i = 0 ; i < MXC_CFG_GPIO_INSTANCES ; i ++ ){
127- err = MXC_GPIO_Reset (0x1 << i );
128- if (err ) {
129- // todo: indicate some gpio error
130- continue ;
131- }
132- }
133-
134- // TODO: Reset peripheral clocks
116+ reset_all_pins ();
135117
136- // Reset 1/1024 tick timer
137- MXC_RTC_Stop ();
138- MXC_RTC_ClearFlags (0xFFFFFFFF );
139- MXC_RTC_Init (0 ,0 );
118+ // todo: may need rtc-related resets here later
140119}
141120
142121// Reset to the bootloader
@@ -154,22 +133,19 @@ void reset_to_bootloader(void) {
154133 * Return variables defined by linkerscript.
155134 */
156135uint32_t * port_stack_get_limit (void ) {
157- // ignore array bounds GCC warnings for stack here
136+ // ignore array bounds GCC warnings
158137 #pragma GCC diagnostic push
159138 #pragma GCC diagnostic ignored "-Warray-bounds"
160139
161140 // NOTE: Only return how much stack we have alloted for CircuitPython
162- return (uint32_t * )(port_stack_get_top () - (CIRCUITPY_DEFAULT_STACK_SIZE + CIRCUITPY_EXCEPTION_STACK_SIZE ) / sizeof (uint32_t ));
163- // return _estack;
164-
165- // end GCC diagnostic disable
141+ return port_stack_get_top () - (CIRCUITPY_DEFAULT_STACK_SIZE + CIRCUITPY_EXCEPTION_STACK_SIZE ) / sizeof (uint32_t );
166142 #pragma GCC diagnostic pop
167143}
168144uint32_t * port_stack_get_top (void ) {
169- return ( uint32_t * ) __stack ;
145+ return & _stack ;
170146}
171147uint32_t * port_heap_get_bottom (void ) {
172- return ( uint32_t * ) __heap ;
148+ return & _heap ;
173149}
174150uint32_t * port_heap_get_top (void ) {
175151 return port_stack_get_limit ();
0 commit comments