Add support with PLUS-F5270 Board
This commit is contained in:
30
board/MM32F5270/BSP/Inc/board_init.h
Normal file
30
board/MM32F5270/BSP/Inc/board_init.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __BOARD_INIT_H__
|
||||
#define __BOARD_INIT_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "hal_common.h"
|
||||
#include "hal_rcc.h"
|
||||
#include "hal_uart.h"
|
||||
|
||||
#include "clock_init.h"
|
||||
#include "pin_init.h"
|
||||
|
||||
/* DEBUG UART. */
|
||||
#define BOARD_DEBUG_UART_PORT UART1
|
||||
#define BOARD_DEBUG_UART_IRQ UART1_IRQn
|
||||
#define BOARD_DEBUG_UART_BAUDRATE 115200u
|
||||
#define BOARD_DEBUG_UART_FREQ CLOCK_APB2_FREQ
|
||||
|
||||
void BOARD_Init(void);
|
||||
|
||||
#endif /* __BOARD_INIT_H__ */
|
21
board/MM32F5270/BSP/Inc/clock_init.h
Normal file
21
board/MM32F5270/BSP/Inc/clock_init.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __CLOCK_INIT_H__
|
||||
#define __CLOCK_INIT_H__
|
||||
|
||||
#include "hal_common.h"
|
||||
|
||||
#define CLOCK_SYS_FREQ 120000000u
|
||||
#define CLOCK_SYSTICK_FREQ (CLOCK_SYS_FREQ/8u)
|
||||
#define CLOCK_AHB1_FREQ 120000000u
|
||||
#define CLOCK_APB1_FREQ 60000000u
|
||||
#define CLOCK_APB2_FREQ 60000000u
|
||||
|
||||
void BOARD_InitBootClocks(void);
|
||||
|
14
board/MM32F5270/BSP/Inc/pin_init.h
Normal file
14
board/MM32F5270/BSP/Inc/pin_init.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __PIN_INIT_H__
|
||||
#define __PIN_INIT_H__
|
||||
|
||||
void BOARD_InitPins(void);
|
||||
|
||||
#endif /* __PIN_INIT_H__ */
|
179
board/MM32F5270/BSP/Src/board_init.c
Normal file
179
board/MM32F5270/BSP/Src/board_init.c
Normal file
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#include "board_init.h"
|
||||
#include "hal_gpio.h"
|
||||
#include "tos_shell.h"
|
||||
|
||||
/*
|
||||
* Definitions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Declerations.
|
||||
*/
|
||||
void BOARD_InitDebugConsole(void);
|
||||
|
||||
/*
|
||||
* Functions.
|
||||
*/
|
||||
void BOARD_Init(void)
|
||||
{
|
||||
BOARD_InitBootClocks();
|
||||
BOARD_InitPins();
|
||||
|
||||
BOARD_InitDebugConsole();
|
||||
}
|
||||
|
||||
void BOARD_InitDebugConsole(void)
|
||||
{
|
||||
UART_Init_Type uart_init;
|
||||
|
||||
uart_init.ClockFreqHz = BOARD_DEBUG_UART_FREQ;
|
||||
uart_init.BaudRate = BOARD_DEBUG_UART_BAUDRATE;
|
||||
uart_init.WordLength = UART_WordLength_8b;
|
||||
uart_init.StopBits = UART_StopBits_1;
|
||||
uart_init.Parity = UART_Parity_None;
|
||||
uart_init.XferMode = UART_XferMode_RxTx;
|
||||
uart_init.HwFlowControl = UART_HwFlowControl_None;
|
||||
UART_Init(BOARD_DEBUG_UART_PORT, &uart_init);
|
||||
UART_EnableInterrupts(BOARD_DEBUG_UART_PORT, UART_ISR_RXINTF_MASK, true);
|
||||
UART_Enable(BOARD_DEBUG_UART_PORT, true);
|
||||
|
||||
NVIC_SetPriority(BOARD_DEBUG_UART_IRQ, (1UL << __NVIC_PRIO_BITS) - 2UL);
|
||||
}
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
int fputc(int c, FILE *f)
|
||||
{
|
||||
(void)(f);
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, (uint8_t)(c));
|
||||
return c;
|
||||
}
|
||||
|
||||
int fgetc(FILE *f)
|
||||
{
|
||||
(void)(f);
|
||||
while ( 0u == (UART_STATUS_RX_DONE & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
return UART_GetData(BOARD_DEBUG_UART_PORT);
|
||||
}
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
/*
|
||||
* Called by libc stdio fwrite functions
|
||||
*/
|
||||
int _write(int fd, char *ptr, int len)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
/*
|
||||
* write "len" of char from "ptr" to file id "fd"
|
||||
* Return number of char written.
|
||||
*
|
||||
* Only work for STDOUT, STDIN, and STDERR
|
||||
*/
|
||||
if (fd > 2)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (*ptr && (i < len))
|
||||
{
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, (uint8_t)(*ptr));
|
||||
i++;
|
||||
ptr++;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/*
|
||||
* Called by the libc stdio fread fucntions
|
||||
*
|
||||
* Implements a buffered read with line editing.
|
||||
*/
|
||||
int _read(int fd, char *ptr, int len)
|
||||
{
|
||||
int my_len;
|
||||
|
||||
if (fd > 2)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
my_len = 0;
|
||||
while (len > 0)
|
||||
{
|
||||
while ( 0u == (UART_STATUS_RX_DONE & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
*ptr = UART_GetData(BOARD_DEBUG_UART_PORT);
|
||||
len--;
|
||||
my_len++;
|
||||
|
||||
if ( (*ptr == '\r') || (*ptr == '\n') || (*ptr == '\0') )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ptr++;
|
||||
}
|
||||
|
||||
return my_len; /* return the length we got */
|
||||
}
|
||||
|
||||
|
||||
int putchar(int c)
|
||||
{
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, (uint8_t)(c));
|
||||
return c;
|
||||
}
|
||||
|
||||
int getchar(void)
|
||||
{
|
||||
while ( 0u == (UART_STATUS_RX_DONE & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
return UART_GetData(BOARD_DEBUG_UART_PORT);
|
||||
}
|
||||
|
||||
#elif (defined(__ICCARM__))
|
||||
/* These function __write and __read is used to support IAR toolchain to printf and scanf. */
|
||||
|
||||
int fputc(int ch, FILE *f)
|
||||
{
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, (uint8_t)(ch));
|
||||
return ch;
|
||||
}
|
||||
|
||||
int fgetc(FILE *f)
|
||||
{
|
||||
while ( 0u == (UART_STATUS_RX_DONE & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
return UART_GetData(BOARD_DEBUG_UART_PORT);
|
||||
}
|
||||
|
||||
#endif
|
||||
void UART1_IRQHandler(void)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
if (UART_ISR_RXINTF_MASK & UART_GetInterruptStatus(BOARD_DEBUG_UART_PORT))
|
||||
{
|
||||
data = UART_GetData(BOARD_DEBUG_UART_PORT);
|
||||
tos_shell_input_byte(data);
|
||||
}
|
||||
}
|
||||
/* EOF. */
|
117
board/MM32F5270/BSP/Src/clock_init.c
Normal file
117
board/MM32F5270/BSP/Src/clock_init.c
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright 2021 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include "hal_common.h"
|
||||
#include "clock_init.h"
|
||||
#include "tos_k.h"
|
||||
#include "tos_shell.h"
|
||||
|
||||
#include "hal_rcc.h"
|
||||
|
||||
void CLOCK_ResetToDefault(void);
|
||||
void CLOCK_BootToHSI96MHz(void);
|
||||
void CLOCK_BootToHSE96MHz(void);
|
||||
void CLOCK_BootToHSE120MHz(void);
|
||||
|
||||
void BOARD_InitBootClocks(void)
|
||||
{
|
||||
CLOCK_ResetToDefault();
|
||||
CLOCK_BootToHSE120MHz();
|
||||
|
||||
/* UART1. */
|
||||
RCC_EnableAPB2Periphs(RCC_APB2_PERIPH_UART1, true);
|
||||
RCC_ResetAPB2Periphs(RCC_APB2_PERIPH_UART1);
|
||||
|
||||
/* GPIOB. */
|
||||
RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOB, true);
|
||||
RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOB);
|
||||
|
||||
/* GPIOI. */
|
||||
RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOI, true);
|
||||
RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOI);
|
||||
}
|
||||
|
||||
/* Switch to HSI. */
|
||||
void CLOCK_ResetToDefault(void)
|
||||
{
|
||||
/* Switch to HSI. */
|
||||
RCC->CR |= RCC_CR_HSION_MASK; /* Make sure the HSI is enabled. */
|
||||
while ( RCC_CR_HSIRDY_MASK != (RCC->CR & RCC_CR_HSIRDY_MASK) )
|
||||
{
|
||||
}
|
||||
RCC->CFGR = RCC_CFGR_SW(0u); /* Reset other clock sources and switch to HSI. */
|
||||
while ( RCC_CFGR_SWS(0u) != (RCC->CFGR & RCC_CFGR_SWS_MASK) ) /* Wait while the SYSCLK is switch to the HSI. */
|
||||
{
|
||||
}
|
||||
|
||||
/* Reset all other clock sources. */
|
||||
RCC->CR = RCC_CR_HSION_MASK;
|
||||
|
||||
/* Disable all interrupts and clear pending bits. */
|
||||
RCC->CIR = RCC->CIR; /* clear flags. */
|
||||
RCC->CIR = 0u; /* disable interrupts. */
|
||||
}
|
||||
|
||||
/* Enable the PLL1 and use the HSE as input clock source. */
|
||||
void CLOCK_BootToHSE120MHz(void)
|
||||
{
|
||||
RCC->APB1ENR |= (1u << 28u); /* enable PWR/DBG. */
|
||||
PWR->CR1 = (PWR->CR1 & ~PWR_CR1_VOS_MASK) | PWR_CR1_VOS(3u); /* 1.7V. */
|
||||
|
||||
/* enable HSE. */
|
||||
RCC->CR |= RCC_CR_HSEON_MASK;
|
||||
while ( RCC_CR_HSERDY_MASK != (RCC->CR & RCC_CR_HSERDY_MASK) )
|
||||
{
|
||||
}
|
||||
|
||||
RCC->PLL1CFGR = RCC_PLL1CFGR_PLL1SRC(1) /* (pllsrc == 1) ? HSE : HSI. */
|
||||
| RCC_PLL1CFGR_PLL1MUL(19) /* (12 * (19 + 1)) / 2 = 120. */
|
||||
| RCC_PLL1CFGR_PLL1DIV(1)
|
||||
| RCC_PLL1CFGR_PLL1LDS(1)
|
||||
| RCC_PLL1CFGR_PLL1ICTRL(3)
|
||||
;
|
||||
|
||||
/* Enable PLL1. */
|
||||
RCC->CR |= RCC_CR_PLL1ON_MASK;
|
||||
while((RCC->CR & RCC_CR_PLL1RDY_MASK) == 0)
|
||||
{
|
||||
}
|
||||
|
||||
/* Enable the FLASH prefetch. */
|
||||
RCC->AHB1ENR |= (1u << 13u); /* enable the access to FLASH. */
|
||||
FLASH->ACR = FLASH_ACR_LATENCY(4u) /* setup divider. */
|
||||
| FLASH_ACR_PRFTBE_MASK /* enable flash prefetch. */
|
||||
;
|
||||
|
||||
/* Setup the dividers for each bus. */
|
||||
RCC->CFGR = RCC_CFGR_HPRE(0) /* div=1 for AHB freq. */
|
||||
| RCC_CFGR_PPRE1(0x4) /* div=2 for APB1 freq. */
|
||||
| RCC_CFGR_PPRE2(0x4) /* div=2 for APB2 freq. */
|
||||
| RCC_CFGR_MCO(7) /* use PLL1 as output. */
|
||||
;
|
||||
|
||||
/* Switch the system clock source to PLL. */
|
||||
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW(2); /* use PLL as SYSCLK */
|
||||
|
||||
|
||||
/* Wait till PLL is used as system clock source. */
|
||||
while ( (RCC->CFGR & RCC_CFGR_SWS_MASK) != RCC_CFGR_SWS(2) )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
if (tos_knl_is_running())
|
||||
{
|
||||
tos_knl_irq_enter();
|
||||
tos_tick_handler();
|
||||
tos_knl_irq_leave();
|
||||
}
|
||||
}
|
||||
|
||||
/* EOF. */
|
37
board/MM32F5270/BSP/Src/pin_init.c
Normal file
37
board/MM32F5270/BSP/Src/pin_init.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2022 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#include "pin_init.h"
|
||||
#include "hal_rcc.h"
|
||||
#include "hal_gpio.h"
|
||||
|
||||
void BOARD_InitPins(void)
|
||||
{
|
||||
/* PB7 - UART1_TX. */
|
||||
GPIO_Init_Type gpio_init;
|
||||
gpio_init.Pins = GPIO_PIN_6;
|
||||
gpio_init.PinMode = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_PushPull
|
||||
gpio_init.Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOB, &gpio_init);
|
||||
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);
|
||||
|
||||
/* PB6 - UART1_RX. */
|
||||
gpio_init.Pins = GPIO_PIN_7;
|
||||
gpio_init.PinMode = GPIO_PinMode_In_Floating; //GPIO_PinMode_In_Floating
|
||||
gpio_init.Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOB, &gpio_init);
|
||||
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);
|
||||
|
||||
/* PI0 - GPIO. */
|
||||
gpio_init.Pins = GPIO_PIN_0;
|
||||
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
|
||||
gpio_init.Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOI, &gpio_init);
|
||||
GPIO_WriteBit(GPIOI, GPIO_PIN_0, 1);
|
||||
}
|
||||
|
184
board/MM32F5270/BSP/Src/syscalls.c
Normal file
184
board/MM32F5270/BSP/Src/syscalls.c
Normal file
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
*****************************************************************************
|
||||
**
|
||||
** File : syscalls.c
|
||||
**
|
||||
** Author : Auto-generated by STM32CubeIDE
|
||||
**
|
||||
** Abstract : STM32CubeIDE Minimal System calls file
|
||||
**
|
||||
** For more information about which c-functions
|
||||
** need which of these lowlevel functions
|
||||
** please consult the Newlib libc-manual
|
||||
**
|
||||
** Environment : STM32CubeIDE MCU
|
||||
**
|
||||
** Distribution: The file is distributed as is, without any warranty
|
||||
** of any kind.
|
||||
**
|
||||
*****************************************************************************
|
||||
**
|
||||
** <h2><center>© COPYRIGHT(c) 2018 STMicroelectronics</center></h2>
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without modification,
|
||||
** are permitted provided that the following conditions are met:
|
||||
** 1. Redistributions of source code must retain the above copyright notice,
|
||||
** this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
** this list of conditions and the following disclaimer in the documentation
|
||||
** and/or other materials provided with the distribution.
|
||||
** 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
** may be used to endorse or promote products derived from this software
|
||||
** without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**
|
||||
**
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes */
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/times.h>
|
||||
|
||||
|
||||
/* Variables */
|
||||
//#undef errno
|
||||
extern int errno;
|
||||
extern int __io_putchar(int ch) __attribute__((weak));
|
||||
extern int __io_getchar(void) __attribute__((weak));
|
||||
|
||||
register char * stack_ptr asm("sp");
|
||||
|
||||
char *__env[1] = { 0 };
|
||||
char **environ = __env;
|
||||
|
||||
|
||||
/* Functions */
|
||||
void initialise_monitor_handles()
|
||||
{
|
||||
}
|
||||
|
||||
int _getpid(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int _kill(int pid, int sig)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void _exit (int status)
|
||||
{
|
||||
_kill(status, -1);
|
||||
while (1) {} /* Make sure we hang here */
|
||||
}
|
||||
|
||||
__attribute__((weak)) int _read(int file, char *ptr, int len)
|
||||
{
|
||||
int DataIdx;
|
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++)
|
||||
{
|
||||
*ptr++ = __io_getchar();
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
__attribute__((weak)) int _write(int file, char *ptr, int len)
|
||||
{
|
||||
int DataIdx;
|
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++)
|
||||
{
|
||||
__io_putchar(*ptr++);
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
int _close(int file)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int _fstat(int file, struct stat *st)
|
||||
{
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _isatty(int file)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int _lseek(int file, int ptr, int dir)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _open(char *path, int flags, ...)
|
||||
{
|
||||
/* Pretend like we always fail */
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _wait(int *status)
|
||||
{
|
||||
errno = ECHILD;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _unlink(char *name)
|
||||
{
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _times(struct tms *buf)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _stat(char *file, struct stat *st)
|
||||
{
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _link(char *old, char *new)
|
||||
{
|
||||
errno = EMLINK;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _fork(void)
|
||||
{
|
||||
errno = EAGAIN;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _execve(char *name, char **argv, char **env)
|
||||
{
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
}
|
234
board/MM32F5270/GCC/hello_world/Makefile
Normal file
234
board/MM32F5270/GCC/hello_world/Makefile
Normal file
@@ -0,0 +1,234 @@
|
||||
##########################################################################################################################
|
||||
# File automatically-generated by tool: [projectgenerator] version: [3.3.0] date: [Mon Aug 05 10:29:11 CST 2019]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
# Generic Makefile (based on gcc)
|
||||
#
|
||||
# ChangeLog :
|
||||
# 2022-08-17 - Port to MM32F250
|
||||
# 2022-04-13 - Port to GD32F310-START
|
||||
# 2017-02-10 - Several enhancements + project update mode
|
||||
# 2015-07-22 - first version
|
||||
# ------------------------------------------------
|
||||
|
||||
######################################
|
||||
# target
|
||||
######################################
|
||||
TARGET = TencentOS_tiny
|
||||
|
||||
|
||||
######################################
|
||||
# building variables
|
||||
######################################
|
||||
# debug build?
|
||||
DEBUG = 1
|
||||
# optimization
|
||||
OPT = -O0
|
||||
|
||||
TOP_DIR = ../../../..
|
||||
#######################################
|
||||
# paths
|
||||
#######################################
|
||||
# Build path
|
||||
BUILD_DIR = build
|
||||
|
||||
######################################
|
||||
# source
|
||||
######################################
|
||||
# C sources
|
||||
KERNEL_SRC = \
|
||||
${wildcard $(TOP_DIR)/kernel/core/*.c}
|
||||
C_SOURCES += $(KERNEL_SRC)
|
||||
|
||||
ARCH_SRC = \
|
||||
${wildcard $(TOP_DIR)/arch/arm/arm-v8m/star-mc1/gcc/*.c} \
|
||||
${wildcard $(TOP_DIR)/arch/arm/arm-v8m/common/*.c}
|
||||
C_SOURCES += $(ARCH_SRC)
|
||||
|
||||
BOARD_SRC = \
|
||||
${wildcard $(TOP_DIR)/board/MM32F5270/BSP/Src/*.c} \
|
||||
${wildcard $(TOP_DIR)/board/MM32F5270/GCC/hello_world/main.c}
|
||||
|
||||
HAL_DRIVER_SRC = $(BOARD_SRC) \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/system_mm32f5277e.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_dma.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_exti.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_gpio.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_power.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_rcc.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_syscfg.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_tim.c \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers/hal_uart.c
|
||||
|
||||
C_SOURCES += $(HAL_DRIVER_SRC)
|
||||
|
||||
# ASM sources
|
||||
ASM_SOURCES_S = \
|
||||
$(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/armgcc/startup_mm32f5277e.S
|
||||
|
||||
ASM_SOURCES_S += \
|
||||
$(TOP_DIR)/arch/arm/arm-v8m/star-mc1/gcc/port_s.S
|
||||
|
||||
COMPONENTS_SRC = \
|
||||
$(TOP_DIR)/components/shell/tos_shell.c \
|
||||
$(TOP_DIR)/components/shell/tos_shell_commands.c
|
||||
C_SOURCES += $(COMPONENTS_SRC)
|
||||
|
||||
#######################################
|
||||
# binaries
|
||||
#######################################
|
||||
PREFIX = arm-none-eabi-
|
||||
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
|
||||
# either it can be added to the PATH environment variable.
|
||||
ifdef GCC_PATH
|
||||
CC = $(GCC_PATH)/$(PREFIX)gcc
|
||||
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
|
||||
CP = $(GCC_PATH)/$(PREFIX)objcopy
|
||||
SZ = $(GCC_PATH)/$(PREFIX)size
|
||||
else
|
||||
CC = $(PREFIX)gcc
|
||||
AS = $(PREFIX)gcc -x assembler-with-cpp
|
||||
CP = $(PREFIX)objcopy
|
||||
SZ = $(PREFIX)size
|
||||
endif
|
||||
HEX = $(CP) -O ihex
|
||||
BIN = $(CP) -O binary -S
|
||||
|
||||
#######################################
|
||||
# CFLAGS
|
||||
#######################################
|
||||
# cpu
|
||||
CPU = -mcpu=cortex-m33
|
||||
|
||||
# fpu
|
||||
FPU = -mfpu=fpv4-sp-d16
|
||||
|
||||
# float-abi
|
||||
FLOAT-ABI = -mfloat-abi=hard
|
||||
|
||||
# asm extra flags
|
||||
ASM_EXTRA_FLAGS = -DDEBUG -D__STARTUP_CLEAR_BSS -D__STARTUP_INITIALIZE_NONCACHEDATA -g -fno-common -ffreestanding -fno-builtin -mapcs -std=gnu99
|
||||
|
||||
# C extra flags
|
||||
C_EXTRA_FLAGS = -MMD -MP -fno-common -ffreestanding -fno-builtin -mapcs -std=gnu99
|
||||
|
||||
# C++ extra flags
|
||||
CXX_EXTRA_FLAGS = -MMD -MP -fno-common -ffreestanding -fno-builtin -mapcs -fno-rtti -fno-exceptions
|
||||
|
||||
# mcu
|
||||
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
|
||||
|
||||
# macros for gcc
|
||||
# AS defines
|
||||
AS_DEFS =
|
||||
|
||||
# C defines
|
||||
C_DEFS = \
|
||||
-DMM32F5270
|
||||
|
||||
# AS includes
|
||||
AS_INCLUDES =
|
||||
|
||||
# C includes
|
||||
KERNEL_INC = \
|
||||
-I $(TOP_DIR)/kernel/core/include \
|
||||
-I $(TOP_DIR)/kernel/pm/include \
|
||||
-I $(TOP_DIR)/kernel/hal/include \
|
||||
-I $(TOP_DIR)/arch/arm/arm-v8m/common/include \
|
||||
-I $(TOP_DIR)/arch/arm/arm-v8m/star-mc1/gcc \
|
||||
-I $(TOP_DIR)/board/MM32F5270/TOS-CONFIG
|
||||
C_INCLUDES += $(KERNEL_INC)
|
||||
|
||||
CMSIS_INC = \
|
||||
-I $(TOP_DIR)/osal/cmsis_os \
|
||||
-I $(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527 \
|
||||
-I $(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/CMSIS/Include
|
||||
|
||||
C_INCLUDES += $(CMSIS_INC)
|
||||
|
||||
HAL_DRIVER_INC = \
|
||||
-I $(TOP_DIR)/board/MM32F5270/BSP/Inc \
|
||||
-I $(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/drivers
|
||||
C_INCLUDES += $(HAL_DRIVER_INC)
|
||||
|
||||
COMPONENTS_INC = \
|
||||
-I $(TOP_DIR)/components/shell/include
|
||||
C_INCLUDES += $(COMPONENTS_INC)
|
||||
|
||||
# compile gcc flags
|
||||
ASFLAGS = $(MCU) $(ASM_EXTRA_FLAGS) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
|
||||
|
||||
CFLAGS = $(MCU) $(C_EXTRA_FLAGS) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -g -gdwarf-2
|
||||
endif
|
||||
|
||||
|
||||
# Generate dependency information
|
||||
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
|
||||
|
||||
|
||||
#######################################
|
||||
# LDFLAGS
|
||||
#######################################
|
||||
# link script
|
||||
LDSCRIPT = $(TOP_DIR)/platform/vendor_bsp/MindMotion/MM32F527/armgcc/linker/mm32f5277e_flash.ld
|
||||
|
||||
# libraries
|
||||
LIBS = -lc -lm -lnosys
|
||||
LIBDIR =
|
||||
LDFLAGS = $(MCU) -specs=nosys.specs -specs=nano.specs -fno-common -ffunction-sections -fdata-sections -ffreestanding -fno-builtin -mthumb -mapcs -Xlinker --gc-sections -Xlinker -static -Xlinker -z -Xlinker muldefs -Xlinker -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
|
||||
|
||||
# default action: build all
|
||||
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
|
||||
|
||||
|
||||
#######################################
|
||||
# build the application
|
||||
#######################################
|
||||
# list of objects
|
||||
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
|
||||
vpath %.c $(sort $(dir $(C_SOURCES)))
|
||||
# list of ASM program objects
|
||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
|
||||
vpath %.s $(sort $(dir $(ASM_SOURCES)))
|
||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES_S:.S=.o)))
|
||||
vpath %.S $(sort $(dir $(ASM_SOURCES_S)))
|
||||
|
||||
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
|
||||
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
|
||||
$(AS) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)
|
||||
$(AS) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
|
||||
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
|
||||
$(SZ) $@
|
||||
|
||||
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
|
||||
$(HEX) $< $@
|
||||
|
||||
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
|
||||
$(BIN) $< $@
|
||||
@cp $@ ./$(notdir $@)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir $@
|
||||
|
||||
#######################################
|
||||
# clean up
|
||||
#######################################
|
||||
clean:
|
||||
-rm -fR $(BUILD_DIR)
|
||||
|
||||
#######################################
|
||||
# dependencies
|
||||
#######################################
|
||||
-include $(wildcard $(BUILD_DIR)/*.d)
|
||||
|
||||
# *** EOF ***
|
57
board/MM32F5270/GCC/hello_world/main.c
Normal file
57
board/MM32F5270/GCC/hello_world/main.c
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2021 MindMotion Microelectronics Co., Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include "board_init.h"
|
||||
#include "tos_shell.h"
|
||||
#include "hal_gpio.h"
|
||||
|
||||
#define APPLICATION_TASK_STK_SIZE 0x1000
|
||||
k_task_t application_task;
|
||||
uint8_t application_task_stk[APPLICATION_TASK_STK_SIZE];
|
||||
static char gs_cmd_buffer[32];
|
||||
|
||||
__attribute__ ((__weak__)) void application_entry(void *arg)
|
||||
{
|
||||
NVIC_EnableIRQ(BOARD_DEBUG_UART_IRQ);
|
||||
while (1) {
|
||||
GPIO_WriteBit(GPIOI, GPIO_PIN_0, 0);
|
||||
tos_task_delay(1000);
|
||||
GPIO_WriteBit(GPIOI, GPIO_PIN_0, 1);
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
static void board_shell_output_t(const char ch)
|
||||
{
|
||||
if (ch == '\n')
|
||||
{
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, '\r');
|
||||
}
|
||||
while ( 0u == (UART_STATUS_TX_EMPTY & UART_GetStatus(BOARD_DEBUG_UART_PORT)) )
|
||||
{}
|
||||
UART_PutData(BOARD_DEBUG_UART_PORT, ch);
|
||||
}
|
||||
|
||||
/*
|
||||
* Functions.
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
BOARD_Init();
|
||||
|
||||
tos_knl_init();
|
||||
tos_task_create(&application_task, "main_task", application_entry, NULL, 1, application_task_stk, APPLICATION_TASK_STK_SIZE, 0);
|
||||
tos_shell_init(gs_cmd_buffer, sizeof(gs_cmd_buffer), board_shell_output_t, NULL);
|
||||
tos_knl_start();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF. */
|
||||
|
12
board/MM32F5270/GCC/hello_world/readme.md
Normal file
12
board/MM32F5270/GCC/hello_world/readme.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# hello_world
|
||||
|
||||
## 实验过程
|
||||
|
||||
+ 打印“tshell>”
|
||||
+ 用户通过串口向设备发送任意字符,设备通过串口返回用户发送的字符。
|
||||
|
||||
## 实验结果
|
||||
|
||||
tshell>ps
|
||||
|
||||
LED4 以周期 1s 闪烁
|
41
board/MM32F5270/TOS-CONFIG/tickless/tos_config.h
Normal file
41
board/MM32F5270/TOS-CONFIG/tickless/tos_config.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef _TOS_CONFIG_H_
|
||||
#define _TOS_CONFIG_H_
|
||||
|
||||
#include "stm32l4xx.h"
|
||||
|
||||
#define TOS_CFG_TASK_PRIO_MAX 10u
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 1u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
#define TOS_CFG_MMBLK_EN 1u
|
||||
|
||||
#define TOS_CFG_MMHEAP_EN 1u
|
||||
|
||||
#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x6000
|
||||
|
||||
#define TOS_CFG_MUTEX_EN 1u
|
||||
|
||||
#define TOS_CFG_TIMER_EN 1u
|
||||
|
||||
#define TOS_CFG_PWR_MGR_EN 1u
|
||||
|
||||
#define TOS_CFG_TICKLESS_EN 1u
|
||||
|
||||
#define TOS_CFG_SEM_EN 1u
|
||||
|
||||
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u
|
||||
|
||||
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u
|
||||
|
||||
#define TOS_CFG_CPU_CLOCK (SystemCoreClock)
|
||||
|
||||
#define TOS_CFG_TIMER_AS_PROC 1u
|
||||
|
||||
#endif
|
||||
|
47
board/MM32F5270/TOS-CONFIG/tos_config.h
Normal file
47
board/MM32F5270/TOS-CONFIG/tos_config.h
Normal file
@@ -0,0 +1,47 @@
|
||||
#ifndef _TOS_CONFIG_H_
|
||||
#define _TOS_CONFIG_H_
|
||||
|
||||
#include "mm32f5277e.h"
|
||||
|
||||
#define TOS_CFG_TASK_PRIO_MAX 10u
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 1u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
#define TOS_CFG_MMBLK_EN 1u
|
||||
|
||||
#define TOS_CFG_MMHEAP_EN 0u
|
||||
|
||||
#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x400
|
||||
|
||||
#define TOS_CFG_MUTEX_EN 1u
|
||||
|
||||
#define TOS_CFG_TIMER_EN 1u
|
||||
|
||||
#define TOS_CFG_PWR_MGR_EN 0u
|
||||
|
||||
#define TOS_CFG_TICKLESS_EN 0u
|
||||
|
||||
#define TOS_CFG_SEM_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN 1u
|
||||
|
||||
#define TOS_CFG_FAULT_BACKTRACE_EN 1u
|
||||
|
||||
#define TOS_CFG_IDLE_TASK_STK_SIZE 1024u
|
||||
|
||||
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u
|
||||
|
||||
#define TOS_CFG_CPU_CLOCK (120000000)
|
||||
|
||||
#define TOS_CFG_TIMER_AS_PROC 1u
|
||||
|
||||
#define TOS_CFG_MAIL_QUEUE_EN 1u
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user