From 672283587e8098e90039a7191b02907cbeb2b47f Mon Sep 17 00:00:00 2001 From: Vasily Davydov Date: Wed, 14 Sep 2022 10:51:38 +0300 Subject: [PATCH] esp-vent: create project --- .cproject | 298 +++++++++++++++++++ .gitignore | 1 + .project | 29 ++ .settings/language.settings.xml | 25 ++ src/Ventilation.cpp | 51 ++++ src/cr_cpp_config.cpp | 91 ++++++ src/cr_startup_lpc15xx.cpp | 501 ++++++++++++++++++++++++++++++++ src/crp.c | 27 ++ src/sysinit.c | 57 ++++ 9 files changed, 1080 insertions(+) create mode 100644 .cproject create mode 100644 .project create mode 100644 .settings/language.settings.xml create mode 100644 src/Ventilation.cpp create mode 100644 src/cr_cpp_config.cpp create mode 100644 src/cr_startup_lpc15xx.cpp create mode 100644 src/crp.c create mode 100644 src/sysinit.c diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..2d7e130 --- /dev/null +++ b/.cproject @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?xml version="1.0" encoding="UTF-8"?> +<TargetConfig> +<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/> +<infoList vendor="NXP"> +<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen"> +<chip> +<name>LPC1549</name> +<family>LPC15xx</family> +<vendor>NXP (formerly Philips)</vendor> +<reset board="None" core="Real" sys="Real"/> +<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/> +<memory can_program="true" id="Flash" is_ro="true" type="Flash"/> +<memory id="RAM" type="RAM"/> +<memory id="Periph" is_volatile="true" type="Peripheral"/> +<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/> +<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/> +<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/> +<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/> +</chip> +<processor> +<name gcc_name="cortex-m3">Cortex-M3</name> +<family>Cortex-M</family> +</processor> +</info> +</infoList> +</TargetConfig> + + + LPCXpresso1549 + + \ No newline at end of file diff --git a/.gitignore b/.gitignore index 259148f..ca1dbd7 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ *.exe *.out *.app +/Debug/ diff --git a/.project b/.project new file mode 100644 index 0000000..ef218d5 --- /dev/null +++ b/.project @@ -0,0 +1,29 @@ + + + Ventilation + + + lpc_board_nxp_lpcxpresso_1549 + lpc_chip_15xx + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml new file mode 100644 index 0000000..7620796 --- /dev/null +++ b/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Ventilation.cpp b/src/Ventilation.cpp new file mode 100644 index 0000000..b602ec6 --- /dev/null +++ b/src/Ventilation.cpp @@ -0,0 +1,51 @@ +/* +=============================================================================== + Name : main.c + Author : $(author) + Version : + Copyright : $(copyright) + Description : main definition +=============================================================================== +*/ + +#if defined (__USE_LPCOPEN) +#if defined(NO_BOARD_LIB) +#include "chip.h" +#else +#include "board.h" +#endif +#endif + +#include + +// TODO: insert other include files here + +// TODO: insert other definitions and declarations here + +int main(void) { + +#if defined (__USE_LPCOPEN) + // Read clock settings and update SystemCoreClock variable + SystemCoreClockUpdate(); +#if !defined(NO_BOARD_LIB) + // Set up and initialize all required blocks and + // functions related to the board hardware + Board_Init(); + // Set the LED to the state of "On" + Board_LED_Set(0, true); +#endif +#endif + + // TODO: insert code here + + // Force the counter to be placed into memory + volatile static int i = 0 ; + // Enter an infinite loop, just incrementing a counter + while(1) { + i++ ; + // "Dummy" NOP to allow source level single + // stepping of tight while() loop + __asm volatile ("nop"); + } + return 0 ; +} diff --git a/src/cr_cpp_config.cpp b/src/cr_cpp_config.cpp new file mode 100644 index 0000000..ba7308e --- /dev/null +++ b/src/cr_cpp_config.cpp @@ -0,0 +1,91 @@ +//***************************************************************************** +// +--+ +// | ++----+ +// +-++ | +// | | +// +-+--+ | +// | +--+--+ +// +----+ Copyright (c) 2009-2012 Code Red Technologies Ltd. +// +----+ Copyright 2013, 2019 NXP +// +// Minimal implementations of the new/delete operators and the verbose +// terminate handler for exceptions suitable for embedded use, +// plus optional "null" stubs for malloc/free (only used if symbol +// CPP_NO_HEAP is defined). +// +// +// Version : 120126 +// +// Software License Agreement +// +// The software is owned by Code Red Technologies and/or its suppliers, and is +// protected under applicable copyright laws. All rights are reserved. Any +// use in violation of the foregoing restrictions may subject the user to criminal +// sanctions under applicable laws, as well as to civil liability for the breach +// of the terms and conditions of this license. +// +// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED +// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. +// USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT +// TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH +// CODE RED TECHNOLOGIES LTD. +// +//***************************************************************************** + +#include + +void *operator new(size_t size) +{ + return malloc(size); +} + +void *operator new[](size_t size) +{ + return malloc(size); +} + +void operator delete(void *p) +{ + free(p); +} + +void operator delete[](void *p) +{ + free(p); +} + +extern "C" int __aeabi_atexit(void *object, + void (*destructor)(void *), + void *dso_handle) +{ + return 0; +} + +#ifdef CPP_NO_HEAP +extern "C" void *malloc(size_t) { + return (void *)0; +} + +extern "C" void free(void *) { +} +#endif + +#ifndef CPP_USE_CPPLIBRARY_TERMINATE_HANDLER +/****************************************************************** + * __verbose_terminate_handler() + * + * This is the function that is called when an uncaught C++ + * exception is encountered. The default version within the C++ + * library prints the name of the uncaught exception, but to do so + * it must demangle its name - which causes a large amount of code + * to be pulled in. The below minimal implementation can reduce + * code size noticeably. Note that this function should not return. + ******************************************************************/ +namespace __gnu_cxx { +void __verbose_terminate_handler() +{ + while(1); +} +} +#endif diff --git a/src/cr_startup_lpc15xx.cpp b/src/cr_startup_lpc15xx.cpp new file mode 100644 index 0000000..fe98025 --- /dev/null +++ b/src/cr_startup_lpc15xx.cpp @@ -0,0 +1,501 @@ +//***************************************************************************** +// LPC15xx Microcontroller Startup code for use with LPCXpresso IDE +// +// Version : 150706 +//***************************************************************************** +// +// Copyright 2013-2015, 2019, 2020 NXP +// All rights reserved. +// +// NXP Confidential. This software is owned or controlled by NXP and may only be +// used strictly in accordance with the applicable license terms. +// +// By expressly accepting such terms or by downloading, installing, activating +// and/or otherwise using the software, you are agreeing that you have read, and +// that you agree to comply with and are bound by, such license terms. +// +// If you do not agree to be bound by the applicable license terms, then you may not +// retain, install, activate or otherwise use the software. +//***************************************************************************** + +#if defined (__cplusplus) +#ifdef __REDLIB__ +#error Redlib does not support C++ +#else +//***************************************************************************** +// +// The entry point for the C++ library startup +// +//***************************************************************************** +extern "C" { + extern void __libc_init_array(void); +} +#endif +#endif + +#define WEAK __attribute__ ((weak)) +#define ALIAS(f) __attribute__ ((weak, alias (#f))) + +//***************************************************************************** +#if defined (__cplusplus) +extern "C" { +#endif + +//***************************************************************************** +#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN) +// Declaration of external SystemInit function +extern void SystemInit(void); +#endif + +//***************************************************************************** +// +// Forward declaration of the default handlers. These are aliased. +// When the application defines a handler (with the same name), this will +// automatically take precedence over these weak definitions +// +//***************************************************************************** +void ResetISR(void); +WEAK void NMI_Handler(void); +WEAK void HardFault_Handler(void); +WEAK void MemManage_Handler(void); +WEAK void BusFault_Handler(void); +WEAK void UsageFault_Handler(void); +WEAK void SVC_Handler(void); +WEAK void DebugMon_Handler(void); +WEAK void PendSV_Handler(void); +WEAK void SysTick_Handler(void); +WEAK void IntDefaultHandler(void); + +//***************************************************************************** +// +// Forward declaration of the specific IRQ handlers. These are aliased +// to the IntDefaultHandler, which is a 'forever' loop. When the application +// defines a handler (with the same name), this will automatically take +// precedence over these weak definitions +// +//***************************************************************************** +// Note: The names used for the IRQ Handlers in the LPCXpresso LPC15xx startup +// code did not originally match those used by the LPCOpen LPC15xx packages. +// Now default to using LPCOpen IRQ Handler names. But allow the use of the +// previous names if necessary for legacy code by undefining the below symbol +#define USE_LPCOPEN_IRQHANDLER_NAMES + +#if defined (USE_LPCOPEN_IRQHANDLER_NAMES) +void WDT_IRQHandler(void) ALIAS(IntDefaultHandler); +void BOD_IRQHandler(void) ALIAS(IntDefaultHandler); +void FMC_IRQHandler(void) ALIAS(IntDefaultHandler); +void EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler); +void DMA_IRQHandler(void) ALIAS(IntDefaultHandler); +void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT2_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT3_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT4_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT5_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT6_IRQHandler(void) ALIAS(IntDefaultHandler); +void PIN_INT7_IRQHandler(void) ALIAS(IntDefaultHandler); +void RIT_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT2_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT3_IRQHandler(void) ALIAS(IntDefaultHandler); +void MRT_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART0_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART1_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART2_IRQHandler(void) ALIAS(IntDefaultHandler); +void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SPI0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SPI1_IRQHandler(void) ALIAS(IntDefaultHandler); +void CAN_IRQHandler(void) ALIAS(IntDefaultHandler); +void USB_IRQHandler(void) ALIAS(IntDefaultHandler); +void USB_FIQHandler(void) ALIAS(IntDefaultHandler); +void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0A_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0B_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_OVR_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1A_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1B_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_OVR_IRQHandler(void) ALIAS(IntDefaultHandler); +void DAC_IRQHandler(void) ALIAS(IntDefaultHandler); +void ACMP0_IRQHandler(void) ALIAS(IntDefaultHandler); +void ACMP1_IRQHandler(void) ALIAS(IntDefaultHandler); +void ACMP2_IRQHandler(void) ALIAS(IntDefaultHandler); +void ACMP3_IRQHandler(void) ALIAS(IntDefaultHandler); +void QEI_IRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_ALARM_IRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_WAKE_IRQHandler(void) ALIAS(IntDefaultHandler); +#else +void WDT_IRQHandler(void) ALIAS(IntDefaultHandler); +void BOD_IRQHandler(void) ALIAS(IntDefaultHandler); +void FLASH_IRQHandler(void) ALIAS(IntDefaultHandler); +void EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler); +void DMA_IRQHandler(void) ALIAS(IntDefaultHandler); +void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT2_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT3_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT4_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT5_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT6_IRQHandler(void) ALIAS(IntDefaultHandler); +void PININT7_IRQHandler(void) ALIAS(IntDefaultHandler); +void RIT_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT1_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT2_IRQHandler(void) ALIAS(IntDefaultHandler); +void SCT3_IRQHandler(void) ALIAS(IntDefaultHandler); +void MRT_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART0_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART1_IRQHandler(void) ALIAS(IntDefaultHandler); +void UART2_IRQHandler(void) ALIAS(IntDefaultHandler); +void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SPI0_IRQHandler(void) ALIAS(IntDefaultHandler); +void SPI1_IRQHandler(void) ALIAS(IntDefaultHandler); +void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler); +void USB_IRQHandler(void) ALIAS(IntDefaultHandler); +void USB_FIQHandler(void) ALIAS(IntDefaultHandler); +void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_SEQA_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_SEQB_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_OVR_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_SEQA_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_SEQB_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler); +void ADC1_OVR_IRQHandler(void) ALIAS(IntDefaultHandler); +void DAC_IRQHandler(void) ALIAS(IntDefaultHandler); +void CMP0_IRQHandler(void) ALIAS(IntDefaultHandler); +void CMP1_IRQHandler(void) ALIAS(IntDefaultHandler); +void CMP2_IRQHandler(void) ALIAS(IntDefaultHandler); +void CMP3_IRQHandler(void) ALIAS(IntDefaultHandler); +void QEI_IRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_ALARM_IRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_WAKE_IRQHandler(void) ALIAS(IntDefaultHandler); +#endif +//***************************************************************************** +// +// The entry point for the application. +// __main() is the entry point for Redlib based applications +// main() is the entry point for Newlib based applications +// +//***************************************************************************** +#if defined (__REDLIB__) +extern void __main(void); +#endif +extern int main(void); +//***************************************************************************** +// +// External declaration for the pointer to the stack top from the Linker Script +// +//***************************************************************************** +extern void _vStackTop(void); + +//***************************************************************************** +// +// External declaration for LPC MCU vector table checksum from Linker Script +// +//***************************************************************************** +WEAK extern void __valid_user_code_checksum(); + +//***************************************************************************** +#if defined (__cplusplus) +} // extern "C" +#endif +//***************************************************************************** +// +// The vector table. +// This relies on the linker script to place at correct location in memory. +// +//***************************************************************************** +extern void (* const g_pfnVectors[])(void); +__attribute__ ((used,section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = { + // Core Level - CM3 + &_vStackTop, // The initial stack pointer + ResetISR, // The reset handler + NMI_Handler, // The NMI handler + HardFault_Handler, // The hard fault handler + MemManage_Handler, // The MPU fault handler + BusFault_Handler, // The bus fault handler + UsageFault_Handler, // The usage fault handler + __valid_user_code_checksum, // LPC MCU Checksum + 0, // Reserved + 0, // Reserved + 0, // Reserved + SVC_Handler, // SVCall handler + DebugMon_Handler, // Debug monitor handler + 0, // Reserved + PendSV_Handler, // The PendSV handler + SysTick_Handler, // The SysTick handler + + // Chip Level - LPC15xx +#if defined (USE_LPCOPEN_IRQHANDLER_NAMES) + WDT_IRQHandler, // 0 - Windowed watchdog timer + BOD_IRQHandler, // 1 - BOD + FMC_IRQHandler, // 2 - Flash controller + EEPROM_IRQHandler, // 3 - EEPROM controller + DMA_IRQHandler, // 4 - DMA + GINT0_IRQHandler, // 5 - GINT0 + GINT1_IRQHandler, // 6 - GINT1 + PIN_INT0_IRQHandler, // 7 - PIO INT0 + PIN_INT1_IRQHandler, // 8 - PIO INT1 + PIN_INT2_IRQHandler, // 9 - PIO INT2 + PIN_INT3_IRQHandler, // 10 - PIO INT3 + PIN_INT4_IRQHandler, // 11 - PIO INT4 + PIN_INT5_IRQHandler, // 12 - PIO INT5 + PIN_INT6_IRQHandler, // 13 - PIO INT6 + PIN_INT7_IRQHandler, // 14 - PIO INT7 + RIT_IRQHandler, // 15 - RIT + SCT0_IRQHandler, // 16 - State configurable timer + SCT1_IRQHandler, // 17 - State configurable timer + SCT2_IRQHandler, // 18 - State configurable timer + SCT3_IRQHandler, // 19 - State configurable timer + MRT_IRQHandler, // 20 - Multi-Rate Timer + UART0_IRQHandler, // 21 - UART0 + UART1_IRQHandler, // 22 - UART1 + UART2_IRQHandler, // 23 - UART2 + I2C0_IRQHandler, // 24 - I2C0 controller + SPI0_IRQHandler, // 25 - SPI0 controller + SPI1_IRQHandler, // 26 - SPI1 controller + CAN_IRQHandler, // 27 - C_CAN0 + USB_IRQHandler, // 28 - USB IRQ + USB_FIQHandler, // 29 - USB FIQ + USBWakeup_IRQHandler, // 30 - USB wake-up + ADC0A_IRQHandler, // 31 - ADC0 sequence A completion + ADC0B_IRQHandler, // 32 - ADC0 sequence B completion + ADC0_THCMP_IRQHandler, // 33 - ADC0 threshold compare + ADC0_OVR_IRQHandler, // 34 - ADC0 overrun + ADC1A_IRQHandler, // 35 - ADC1 sequence A completion + ADC1B_IRQHandler, // 36 - ADC1 sequence B completion + ADC1_THCMP_IRQHandler, // 37 - ADC1 threshold compare + ADC1_OVR_IRQHandler, // 38 - ADC1 overrun + DAC_IRQHandler, // 39 - DAC + ACMP0_IRQHandler, // 40 - Analog Comparator 0 + ACMP1_IRQHandler, // 41 - Analog Comparator 1 + ACMP2_IRQHandler, // 42 - Analog Comparator 2 + ACMP3_IRQHandler, // 43 - Analog Comparator 3 + QEI_IRQHandler, // 44 - QEI + RTC_ALARM_IRQHandler, // 45 - RTC alarm + RTC_WAKE_IRQHandler, // 46 - RTC wake-up +#else + WDT_IRQHandler, // 0 - Windowed watchdog timer + BOD_IRQHandler, // 1 - BOD + FLASH_IRQHandler, // 2 - Flash controller + EEPROM_IRQHandler, // 3 - EEPROM controller + DMA_IRQHandler, // 4 - DMA + GINT0_IRQHandler, // 5 - GINT0 + GINT1_IRQHandler, // 6 - GINT1 + PININT0_IRQHandler, // 7 - PIO INT0 + PININT1_IRQHandler, // 8 - PIO INT1 + PININT2_IRQHandler, // 9 - PIO INT2 + PININT3_IRQHandler, // 10 - PIO INT3 + PININT4_IRQHandler, // 11 - PIO INT4 + PININT5_IRQHandler, // 12 - PIO INT5 + PININT6_IRQHandler, // 13 - PIO INT6 + PININT7_IRQHandler, // 14 - PIO INT7 + RIT_IRQHandler, // 15 - RIT + SCT0_IRQHandler, // 16 - State configurable timer + SCT1_IRQHandler, // 17 - State configurable timer + SCT2_IRQHandler, // 18 - State configurable timer + SCT3_IRQHandler, // 19 - State configurable timer + MRT_IRQHandler, // 20 - Multi-Rate Timer + UART0_IRQHandler, // 21 - UART0 + UART1_IRQHandler, // 22 - UART1 + UART2_IRQHandler, // 23 - UART2 + I2C0_IRQHandler, // 24 - I2C0 controller + SPI0_IRQHandler, // 25 - SPI0 controller + SPI1_IRQHandler, // 26 - SPI1 controller + CAN0_IRQHandler, // 27 - C_CAN0 + USB_IRQHandler, // 28 - USB IRQ + USB_FIQHandler, // 29 - USB FIQ + USBWakeup_IRQHandler, // 30 - USB wake-up + ADC0_SEQA_IRQHandler, // 31 - ADC0 sequence A completion + ADC0_SEQB_IRQHandler, // 32 - ADC0 sequence B completion + ADC0_THCMP_IRQHandler, // 33 - ADC0 threshold compare + ADC0_OVR_IRQHandler, // 34 - ADC0 overrun + ADC1_SEQA_IRQHandler, // 35 - ADC1 sequence A completion + ADC1_SEQB_IRQHandler, // 36 - ADC1 sequence B completion + ADC1_THCMP_IRQHandler, // 37 - ADC1 threshold compare + ADC1_OVR_IRQHandler, // 38 - ADC1 overrun + DAC_IRQHandler, // 39 - DAC + CMP0_IRQHandler, // 40 - Analog Comparator 0 + CMP1_IRQHandler, // 41 - Analog Comparator 1 + CMP2_IRQHandler, // 42 - Analog Comparator 2 + CMP3_IRQHandler, // 43 - Analog Comparator 3 + QEI_IRQHandler, // 44 - QEI + RTC_ALARM_IRQHandler, // 45 - RTC alarm + RTC_WAKE_IRQHandler, // 46 - RTC wake-up +#endif +}; /* End of g_pfnVectors */ + +//***************************************************************************** +// Functions to carry out the initialization of RW and BSS data sections. These +// are written as separate functions rather than being inlined within the +// ResetISR() function in order to cope with MCUs with multiple banks of +// memory. +//***************************************************************************** +__attribute__ ((section(".after_vectors"))) +void data_init(unsigned int romstart, unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int *pulSrc = (unsigned int*) romstart; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = *pulSrc++; +} + +__attribute__ ((section(".after_vectors"))) +void bss_init(unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = 0; +} + +//***************************************************************************** +// The following symbols are constructs generated by the linker, indicating +// the location of various points in the "Global Section Table". This table is +// created by the linker via the Code Red managed linker script mechanism. It +// contains the load address, execution address and length of each RW data +// section and the execution and length of each BSS (zero initialized) section. +//***************************************************************************** +extern unsigned int __data_section_table; +extern unsigned int __data_section_table_end; +extern unsigned int __bss_section_table; +extern unsigned int __bss_section_table_end; + + +//***************************************************************************** +// Reset entry point for your code. +// Sets up a simple runtime environment and initializes the C/C++ +// library. +//***************************************************************************** +__attribute__ ((section(".after_vectors"))) +void +ResetISR(void) { + + // + // Copy the data sections from flash to SRAM. + // + unsigned int LoadAddr, ExeAddr, SectionLen; + unsigned int *SectionTableAddr; + + // Load base address of Global Section Table + SectionTableAddr = &__data_section_table; + + // Copy the data sections from flash to SRAM. + while (SectionTableAddr < &__data_section_table_end) { + LoadAddr = *SectionTableAddr++; + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + data_init(LoadAddr, ExeAddr, SectionLen); + } + // At this point, SectionTableAddr = &__bss_section_table; + // Zero fill the bss segment + while (SectionTableAddr < &__bss_section_table_end) { + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + bss_init(ExeAddr, SectionLen); + } + + // Optionally enable Cortex-M3 SWV trace (off by default at reset) + // Note - your board support must also set up the switch matrix + // so that SWO is output on the appropriate pin for your hardware +#if !defined (DONT_ENABLE_SWVTRACECLK) + // Write 0x00000001 to TRACECLKDIV – Trace divider + volatile unsigned int *TRACECLKDIV = (unsigned int *) 0x400740D8; + *TRACECLKDIV = 1; +#endif + +#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN) + SystemInit(); +#endif + +#if defined (__cplusplus) + // + // Call C++ library initialisation + // + __libc_init_array(); +#endif + +#if defined (__REDLIB__) + // Call the Redlib library, which in turn calls main() + __main() ; +#else + main(); +#endif + + // + // main() shouldn't return, but if it does, we'll just enter an infinite loop + // + while (1) { + ; + } +} + +//***************************************************************************** +// Default exception handlers. Override the ones here by defining your own +// handler routines in your application code. +//***************************************************************************** +__attribute__ ((section(".after_vectors"))) +void NMI_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void HardFault_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void MemManage_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void BusFault_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void UsageFault_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void SVC_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void DebugMon_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void PendSV_Handler(void) +{ while(1) {} +} + +__attribute__ ((section(".after_vectors"))) +void SysTick_Handler(void) +{ while(1) {} +} + +//***************************************************************************** +// +// Processor ends up here if an unexpected interrupt occurs or a specific +// handler is not present in the application code. +// +//***************************************************************************** +__attribute__ ((section(".after_vectors"))) +void IntDefaultHandler(void) +{ while(1) {} +} + + + diff --git a/src/crp.c b/src/crp.c new file mode 100644 index 0000000..6e33068 --- /dev/null +++ b/src/crp.c @@ -0,0 +1,27 @@ +//***************************************************************************** +// crp.c +// +// Source file to create CRP word expected by LPCXpresso IDE linker +//***************************************************************************** +// +// Copyright(C) NXP Semiconductors, 2013, 2020 +// All rights reserved. +// +// NXP Confidential. This software is owned or controlled by NXP and may only be +// used strictly in accordance with the applicable license terms. +// +// By expressly accepting such terms or by downloading, installing, activating +// and/or otherwise using the software, you are agreeing that you have read, and +// that you agree to comply with and are bound by, such license terms. +// +// If you do not agree to be bound by the applicable license terms, then you may not +// retain, install, activate or otherwise use the software. +//***************************************************************************** + +#if defined (__CODE_RED) +#include +// Variable to store CRP value in. Will be placed automatically +// by the linker when "Enable Code Read Protect" selected. +// See crp.h header for more information +__CRP const unsigned int CRP_WORD = CRP_NO_CRP ; +#endif diff --git a/src/sysinit.c b/src/sysinit.c new file mode 100644 index 0000000..7666b07 --- /dev/null +++ b/src/sysinit.c @@ -0,0 +1,57 @@ +/* + * @brief Common SystemInit function for LPC15xx chips + * + * @note + * Copyright 2013-2014, 2019, 2020 NXP + * All rights reserved. + * + * @par + * NXP Confidential. This software is owned or controlled by NXP and may only be + * used strictly in accordance with the applicable license terms. + * + * By expressly accepting such terms or by downloading, installing, activating + * and/or otherwise using the software, you are agreeing that you have read, and + * that you agree to comply with and are bound by, such license terms. + * + * If you do not agree to be bound by the applicable license terms, then you may not + * retain, install, activate or otherwise use the software. + */ + + #if defined(NO_BOARD_LIB) + #include "chip.h" + #else + #include "board.h" + #endif + +/***************************************************************************** + * Private types/enumerations/variables + ****************************************************************************/ + +/***************************************************************************** + * Public types/enumerations/variables + ****************************************************************************/ + +#if defined(NO_BOARD_LIB) +const uint32_t OscRateIn = 12000000; +const uint32_t RTCOscRateIn = 32768; +#endif + +/***************************************************************************** + * Private functions + ****************************************************************************/ + +/***************************************************************************** + * Public functions + ****************************************************************************/ + +/* Set up and initialize hardware prior to call to main */ +void SystemInit(void) +{ +#if defined(NO_BOARD_LIB) + /* Chip specific SystemInit */ + Chip_SystemInit(); +#else + /* Board specific SystemInit */ + Board_SystemInit(); +#endif +}