Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(CMSIS): MAX32657 bring up #1285

Merged
merged 16 commits into from
Dec 17, 2024
Merged
3 changes: 2 additions & 1 deletion Examples/MAX32657/Bluetooth/BLE5_ctr/project.mk
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,5 @@ BLE_CONTROLLER = 1
# TRACE option
# Set to 0 to disable
# Set to 2 to enable serial port trace messages
TRACE = 2
TRACE = 0
DEBUG = 1
4 changes: 3 additions & 1 deletion Libraries/Boards/MAX32657/EvKit_V1/Source/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ extern uint32_t SystemCoreClock;
// clang-format off
const mxc_gpio_cfg_t pb_pin[] = {
// TODO(ME30): Add push-buttons
{ MXC_GPIO0, MXC_GPIO_PIN_0, MXC_GPIO_FUNC_IN, MXC_GPIO_PAD_PULL_UP, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }
};
const unsigned int num_pbs = (sizeof(pb_pin) / sizeof(mxc_gpio_cfg_t));

const mxc_gpio_cfg_t led_pin[] = {
// TODO(ME30): Add LEDs
// TODO(ME30): Add LED pins
{ MXC_GPIO0, MXC_GPIO_PIN_1, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }
};
const unsigned int num_leds = (sizeof(led_pin) / sizeof(mxc_gpio_cfg_t));
// clang-format on
Expand Down
86 changes: 86 additions & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/Include/board.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/******************************************************************************
*
* Copyright (C) 2024 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/

/**
* @file board.h
* @brief Board support package API.
*/

#include <stdio.h>

#ifndef LIBRARIES_BOARDS_MAX32657_WLP_BENCH_INCLUDE_BOARD_H_
#define LIBRARIES_BOARDS_MAX32657_WLP_BENCH_INCLUDE_BOARD_H_

#ifdef __cplusplus
extern "C" {
#endif

#ifndef CONSOLE_UART
#define CONSOLE_UART 0 /// UART instance to use for console
#endif

#ifndef CONSOLE_BAUD
#define CONSOLE_BAUD 115200 /// Console baud rate
#endif

#ifdef LED_OFF
#undef LED_OFF
#endif
#define LED_OFF 1 /// Override inactive state of LEDs

#ifdef LED_ON
#undef LED_ON
#endif
#define LED_ON 0 /// Override active state of LEDs

#define LED1 0
#define LED_RED LED1

#define LED2 1
#define LED_GREEN LED2

/**
* \brief Initialize the BSP and board interfaces.
* \returns #E_NO_ERROR if everything is successful
*/
int Board_Init(void);

/**
* \brief Initialize or reinitialize the console. This may be necessary if the
* system clock rate is changed.
* \returns #E_NO_ERROR if everything is successful
*/
int Console_Init(void);

/**
* \brief Shutdown the console.
* \returns #E_NO_ERROR if everything is successful
*/
int Console_Shutdown(void);

/**
* \brief Attempt to prepare the console for sleep.
* \returns #E_NO_ERROR if ready to sleep, #E_BUSY if not ready for sleep.
*/
int Console_PrepForSleep(void);

#ifdef __cplusplus
}
#endif

#endif // LIBRARIES_BOARDS_MAX32657_WLP_BENCH_INCLUDE_BOARD_H_
126 changes: 126 additions & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/Source/board.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
/******************************************************************************
*
* Copyright (C) 2024 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/

#include <stdio.h>
#include "mxc_device.h"
#include "mxc_sys.h"
#include "mxc_assert.h"
#include "board.h"
#include "uart.h"
#include "gpio.h"
#include "mxc_pins.h"
#include "led.h"
#include "pb.h"

/***** Global Variables *****/
mxc_uart_regs_t *ConsoleUart = MXC_UART_GET_UART(CONSOLE_UART);
extern uint32_t SystemCoreClock;

// clang-format off
const mxc_gpio_cfg_t pb_pin[] = {
// TODO(ME30): Add push-buttons
{ MXC_GPIO0, MXC_GPIO_PIN_0, MXC_GPIO_FUNC_IN, MXC_GPIO_PAD_PULL_UP, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }
};
const unsigned int num_pbs = (sizeof(pb_pin) / sizeof(mxc_gpio_cfg_t));

const mxc_gpio_cfg_t led_pin[] = {
// System LED
{ MXC_GPIO0, MXC_GPIO_PIN_1, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 },
{ MXC_GPIO0, MXC_GPIO_PIN_8, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 },

//BLE Debug
{ MXC_GPIO0, MXC_GPIO_PIN_10, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }, // TX
{ MXC_GPIO0, MXC_GPIO_PIN_11, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }, // RX
{ MXC_GPIO0, MXC_GPIO_PIN_12, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }, // RX OK
{ MXC_GPIO0, MXC_GPIO_PIN_13, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }, // RX Timeout
{ MXC_GPIO0, MXC_GPIO_PIN_2, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }, // RX CRC FAIL
{ MXC_GPIO0, MXC_GPIO_PIN_7, MXC_GPIO_FUNC_OUT, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 } // BB ISR
};
const unsigned int num_leds = (sizeof(led_pin) / sizeof(mxc_gpio_cfg_t));
// clang-format on

/***** File Scope Variables *****/

/******************************************************************************/
void mxc_assert(const char *expr, const char *file, int line)
{
printf("MXC_ASSERT %s #%d: (%s)\n", file, line, expr);

while (1) {}
}

/******************************************************************************/
/**
* NOTE: This weak definition is included to support Push Button interrupts in
* case the user does not define this interrupt handler in their application.
**/
__weak void GPIO0_IRQHandler(void)
{
MXC_GPIO_Handler(MXC_GPIO_GET_IDX(MXC_GPIO0));
}

/******************************************************************************/
int Board_Init(void)
{
int err;

if ((err = Console_Init()) < E_NO_ERROR) {
return err;
}

if ((err = PB_Init()) != E_NO_ERROR) {
MXC_ASSERT_FAIL();
return err;
}

if ((err = LED_Init()) != E_NO_ERROR) {
MXC_ASSERT_FAIL();
return err;
}

return E_NO_ERROR;
}

/******************************************************************************/
int Console_Init(void)
{
int err;

if ((err = MXC_UART_Init(ConsoleUart, CONSOLE_BAUD, MXC_UART_APB_CLK)) != E_NO_ERROR) {
return err;
}

return E_NO_ERROR;
}

int Console_Shutdown(void)
{
int err;

if ((err = MXC_UART_Shutdown(ConsoleUart)) != E_NO_ERROR) {
return err;
}

return E_NO_ERROR;
}

/******************************************************************************/
void NMI_Handler(void)
{
__NOP();
}
2 changes: 2 additions & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/adapters.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CMSIS-DAP, interface/cmsis-dap.cfg
MAX32625_PICO, interface/cmsis-dap.cfg
41 changes: 41 additions & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/board.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
###############################################################################
#
# Copyright (C) 2024 Analog Devices, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################

ifeq "$(BOARD_DIR)" ""
BOARD_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
endif

# Source files for this test (add path to VPATH below)
SRCS += board.c
SRCS += stdio.c
SRCS += led.c
SRCS += pb.c

MISC_DRIVERS_DIR ?= $(MAXIM_PATH)/Libraries/MiscDrivers

# Where to find BSP source files
VPATH += $(BOARD_DIR)/Source
VPATH += $(MISC_DRIVERS_DIR)
VPATH += $(MISC_DRIVERS_DIR)/LED
VPATH += $(MISC_DRIVERS_DIR)/PushButton

# Where to find BSP header files
IPATH += $(BOARD_DIR)/Include
IPATH += $(MISC_DRIVERS_DIR)
IPATH += $(MISC_DRIVERS_DIR)/LED
IPATH += $(MISC_DRIVERS_DIR)/PushButton
1 change: 1 addition & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/examples.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TODO: Add list of supported examples
1 change: 1 addition & 0 deletions Libraries/Boards/MAX32657/WLP_Bench/target.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
max32657.cfg
2 changes: 2 additions & 0 deletions Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.mk
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ MCPU := cortex-m33
# Single-precision with 16 double-word registers
MFPU := fpv5-sp-d16

PROJ_CFLAGS += -mno-unaligned-access

# Include the rules and goals for building
include $(CMSIS_ROOT)/Device/Maxim/GCC/gcc.mk

Expand Down
77 changes: 77 additions & 0 deletions Libraries/CMSIS/Device/Maxim/MAX32657/Source/heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <malloc.h>

/*
sbrk
Expand Down Expand Up @@ -48,3 +49,79 @@ caddr_t _sbrk(int incr)

return (caddr_t)prev_heap_end;
}

// struct mallinfo {
// size_t arena; /* total space allocated from system */
// size_t ordblks; /* number of non-inuse chunks */
// size_t smblks; /* unused -- always zero */
// size_t hblks; /* number of mmapped regions */
// size_t hblkhd; /* total space in mmapped regions */
// size_t usmblks; /* unused -- always zero */
// size_t fsmblks; /* unused -- always zero */
// size_t uordblks; /* total allocated space */
// size_t fordblks; /* total non-inuse space */
// size_t keepcost; /* top-most, releasable (via malloc_trim) space */
// };

/*
The structure fields contain the following information:

arena The total amount of memory allocated by means other than
mmap(2) (i.e., memory allocated on the heap). This figure
includes both in-use blocks and blocks on the free list.

ordblks
The number of ordinary (i.e., non-fastbin) free blocks.

smblks The number of fastbin free blocks (see mallopt(3)).

hblks The number of blocks currently allocated using mmap(2).
(See the discussion of M_MMAP_THRESHOLD in mallopt(3).)

hblkhd The number of bytes in blocks currently allocated using
mmap(2).

usmblks
This field is unused, and is always 0. Historically, it
was the "highwater mark" for allocated space—that is, the
maximum amount of space that was ever allocated (in
bytes); this field was maintained only in nonthreading
environments.

fsmblks
The total number of bytes in fastbin free blocks.

uordblks
The total number of bytes used by in-use allocations.

fordblks
The total number of bytes in free blocks.

keepcost
The total amount of releasable free space at the top of
the heap. This is the maximum number of bytes that could
ideally (i.e., ignoring page alignment restrictions, and
so on) be released by malloc_trim(3).
*/

struct mallinfo mallinfo(void)
{
struct mallinfo temp_mallinfo;

if (heap_end == 0) {
heap_end = (caddr_t)&__HeapBase;
}

temp_mallinfo.arena = ((size_t)&__HeapLimit - (size_t)&__HeapBase);
temp_mallinfo.ordblks = 0; /* Unused */
temp_mallinfo.smblks = 0; /* Unused */
temp_mallinfo.hblks = 0; /* Unused */
temp_mallinfo.hblkhd = 0; /* Unused */
temp_mallinfo.usmblks = 0; /* Unused */
temp_mallinfo.fsmblks = 0; /* Unused */
temp_mallinfo.uordblks = (size_t)heap_end - (size_t)&__HeapBase;
temp_mallinfo.fordblks = (size_t)&__HeapLimit - (size_t)heap_end;
temp_mallinfo.keepcost = 0 /* Unused */;

return temp_mallinfo;
}
Loading
Loading