From c8ffea0098eae3aa99d75384b091bdd01631c43f Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 24 Jul 2016 21:34:38 -0700 Subject: [PATCH] baseband: Move all init code into baseband.cpp. --- firmware/baseband/CMakeLists.txt | 1 + firmware/baseband/baseband.cpp | 89 ++++++++++++++++++++++++++++++++ firmware/baseband/main.cpp | 81 ----------------------------- 3 files changed, 90 insertions(+), 81 deletions(-) create mode 100644 firmware/baseband/baseband.cpp diff --git a/firmware/baseband/CMakeLists.txt b/firmware/baseband/CMakeLists.txt index 067b8dd22..832cb5d8b 100644 --- a/firmware/baseband/CMakeLists.txt +++ b/firmware/baseband/CMakeLists.txt @@ -97,6 +97,7 @@ set(CSRC # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. set(CPPSRC + baseband.cpp main.cpp ${COMMON}/message_queue.cpp ${COMMON}/event.cpp diff --git a/firmware/baseband/baseband.cpp b/firmware/baseband/baseband.cpp new file mode 100644 index 000000000..284b94711 --- /dev/null +++ b/firmware/baseband/baseband.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program 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 2, or (at your option) + * any later version. + * + * This program 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ch.h" + +#include "lpc43xx_cpp.hpp" + +#include "portapack_shared_memory.hpp" +#include "portapack_dma.hpp" + +#include "gpdma.hpp" + +#include "audio_dma.hpp" + +static void init() { + audio::dma::init(); + audio::dma::configure(); + audio::dma::enable(); + + LPC_CREG->DMAMUX = portapack::gpdma_mux; + gpdma::controller.enable(); + nvicEnableVector(DMA_IRQn, CORTEX_PRIORITY_MASK(LPC_DMA_IRQ_PRIORITY)); +} + +static void halt() { + port_disable(); + while(true) { + port_wait_for_interrupt(); + } +} + +extern "C" { + +void __late_init(void) { + /* + * System initializations. + * - HAL initialization, this also initializes the configured device drivers + * and performs the board-specific initializations. + * - Kernel initialization, the main() function becomes a thread and the + * RTOS is active. + */ + halInit(); + + /* After this call, scheduler, systick, heap, etc. are available. */ + /* By doing chSysInit() here, it runs before C++ constructors, which may + * require the heap. + */ + chSysInit(); + + /* Baseband initialization */ + init(); +} + +void _default_exit(void) { + // TODO: Is this complete? + + nvicDisableVector(DMA_IRQn); + + chSysDisable(); + + systick_stop(); + + ShutdownMessage shutdown_message; + shared_memory.application_queue.push(shutdown_message); + + shared_memory.baseband_message = nullptr; + + halt(); +} + +} diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 1dc8a9fe8..cfd20dd44 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -19,89 +19,8 @@ * Boston, MA 02110-1301, USA. */ -#include "ch.h" - -#include "lpc43xx_cpp.hpp" - -#include "portapack_shared_memory.hpp" -#include "portapack_dma.hpp" - -#include "gpdma.hpp" - -#include "message_queue.hpp" - -#include "utility.hpp" - -#include "debug.hpp" - -#include "audio_dma.hpp" - -#include "gcc.hpp" - -#include -#include -#include - -static void init() { - audio::dma::init(); - audio::dma::configure(); - audio::dma::enable(); - - LPC_CREG->DMAMUX = portapack::gpdma_mux; - gpdma::controller.enable(); - nvicEnableVector(DMA_IRQn, CORTEX_PRIORITY_MASK(LPC_DMA_IRQ_PRIORITY)); -} - extern void run(); -static void halt() { - port_disable(); - while(true) { - port_wait_for_interrupt(); - } -} - -extern "C" { - -void _default_exit(void) { - // TODO: Is this complete? - - nvicDisableVector(DMA_IRQn); - - chSysDisable(); - - systick_stop(); - - ShutdownMessage shutdown_message; - shared_memory.application_queue.push(shutdown_message); - - shared_memory.baseband_message = nullptr; - - halt(); -} - -void __late_init(void) { - /* - * System initializations. - * - HAL initialization, this also initializes the configured device drivers - * and performs the board-specific initializations. - * - Kernel initialization, the main() function becomes a thread and the - * RTOS is active. - */ - halInit(); - - /* After this call, scheduler, systick, heap, etc. are available. */ - /* By doing chSysInit() here, it runs before C++ constructors, which may - * require the heap. - */ - chSysInit(); - - /* Baseband initialization */ - init(); -} - -} - int main(void) { run(); return 0;