/* ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio. This file is part of ChibiOS. ChibiOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. ChibiOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** * @file ARMv8-M-ML/chcore.c * @brief ARMv8-M mainline port code. * * @addtogroup ARMV8M_ML_CORE * @{ */ #include "ch.h" /*===========================================================================*/ /* Module local definitions. */ /*===========================================================================*/ /*===========================================================================*/ /* Module exported variables. */ /*===========================================================================*/ /*===========================================================================*/ /* Module local types. */ /*===========================================================================*/ /*===========================================================================*/ /* Module local variables. */ /*===========================================================================*/ /*===========================================================================*/ /* Module local functions. */ /*===========================================================================*/ /*===========================================================================*/ /* Module exported functions. */ /*===========================================================================*/ /** * @brief Tail ISR context switch code. * * @return The thread being switched-in. */ thread_t *port_schedule_next(void) { thread_t *ntp; chSysLock(); /* TODO statistics, tracing etc */ ntp = chSchSelectFirstI(); chSysUnlock(); return ntp; } /** * @brief Port-related initialization code. */ void port_init(void) { /* Starting in a known IRQ configuration.*/ port_suspend(); /* Initializing priority grouping.*/ NVIC_SetPriorityGrouping(CORTEX_PRIGROUP_INIT); /* DWT cycle counter enable.*/ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; /* Initialization of the system vectors used by the port.*/ NVIC_SetPriority(SVCall_IRQn, CORTEX_PRIORITY_SVCALL); NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV); } /** @} */