mirror of
https://github.com/Valeh2012/PersonalVotingMachine
synced 2025-12-12 03:25:12 +02:00
first commit
This commit is contained in:
203
basic-setup/components/u8g2/sys/arm/lpc824/blink/startup.c
Normal file
203
basic-setup/components/u8g2/sys/arm/lpc824/blink/startup.c
Normal file
@@ -0,0 +1,203 @@
|
||||
|
||||
/*
|
||||
|
||||
startup.c
|
||||
|
||||
LPC824
|
||||
|
||||
Copyright (c) 2016, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list
|
||||
of conditions and the following disclaimer.
|
||||
|
||||
* 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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Requires LPC82x Chip Library
|
||||
|
||||
*/
|
||||
#include <chip.h>
|
||||
|
||||
|
||||
/*=======================================================================*/
|
||||
/* external functions */
|
||||
void __attribute__ ((interrupt)) SysTick_Handler(void);
|
||||
//void __attribute__ ((interrupt, used)) UART_IRQ(void);
|
||||
int __attribute__ ((noinline)) main(void);
|
||||
|
||||
|
||||
|
||||
/*=======================================================================*/
|
||||
/*
|
||||
Reserve some space for the stack. This is used to check if global variables + stack exceed RAM size.
|
||||
If -Wl,--gc-sections is used, then also define -Wl,--undefined=arm_stack_area to keep the variable in RAM.
|
||||
The name of the variable (here: arm_stack_area) does not matter.
|
||||
|
||||
Heap (=dynamic memory allocation) is not supported
|
||||
*/
|
||||
#ifndef __STACK_SIZE
|
||||
#define __STACK_SIZE 0x100
|
||||
#endif
|
||||
unsigned char arm_stack_area[__STACK_SIZE] __attribute__ ((section(".stack"))) __attribute__ ((aligned(8)));
|
||||
|
||||
|
||||
/*=======================================================================*/
|
||||
/* isr system procedures */
|
||||
|
||||
/* make the top of the stack known to the c compiler, value will be calculated by the linker script */
|
||||
void __StackTop(void);
|
||||
|
||||
void __attribute__ ((interrupt)) __attribute__ ((noreturn)) Reset_Handler(void)
|
||||
{
|
||||
register unsigned long *ptr;
|
||||
register unsigned long *start;
|
||||
register unsigned long *end;
|
||||
|
||||
/*
|
||||
The following two operations are not required in normal mode reset mode,
|
||||
however it is usefull if the reset handler is started via ISP "Go" command
|
||||
*/
|
||||
__set_MSP((uint32_t)__StackTop);
|
||||
Chip_SYSCTL_Map(2);
|
||||
|
||||
/*
|
||||
Loop to copy data from read only memory to RAM. The ranges
|
||||
of copy from/to are specified by following symbols evaluated in
|
||||
linker script.
|
||||
__etext: End of code section, i.e., begin of data sections to copy from.
|
||||
__data_start__/__data_end__: RAM address range that data should be
|
||||
copied to. Both must be aligned to 4 bytes boundary.
|
||||
*/
|
||||
extern unsigned long __data_start__[];
|
||||
extern unsigned long __data_end__[];
|
||||
extern unsigned long __etext[];
|
||||
ptr = __etext;
|
||||
start = __data_start__;
|
||||
end = __data_end__;
|
||||
while( start < end )
|
||||
{
|
||||
*start = *ptr;
|
||||
start++;
|
||||
ptr++;
|
||||
}
|
||||
|
||||
/*
|
||||
Loop to zero out BSS section, which uses following symbols
|
||||
in linker script:
|
||||
__bss_start__: start of BSS section. Must align to 4
|
||||
__bss_end__: end of BSS section. Must align to 4
|
||||
*/
|
||||
extern unsigned long __bss_start__[];
|
||||
extern unsigned long __bss_end__[];
|
||||
ptr = __bss_start__;
|
||||
end = __bss_end__;
|
||||
while( ptr < end )
|
||||
{
|
||||
*ptr = 0;
|
||||
ptr++;
|
||||
}
|
||||
|
||||
/* Call main procedure */
|
||||
main();
|
||||
|
||||
/* finished, do nothing. */
|
||||
for(;;)
|
||||
;
|
||||
}
|
||||
|
||||
/* "NMI_Handler" is used in the ld script to calculate the checksum */
|
||||
void __attribute__ ((interrupt)) NMI_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* "HardFault_Handler" is used in the ld script to calculate the checksum */
|
||||
void __attribute__ ((interrupt)) HardFault_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* make the checksum known to the c compiler, value will be calculated by the linker script */
|
||||
void LPC_checksum(void);
|
||||
|
||||
/*=======================================================================*/
|
||||
/* isr vector */
|
||||
/* see page 445 of the LPC11U3x user manual */
|
||||
/* see also enum LPC11UXX_IRQn in isr/cmsis_11uxx.h */
|
||||
|
||||
typedef void (*isr_handler_t)(void);
|
||||
isr_handler_t __isr_vector[48] __attribute__ ((section(".isr_vector"))) __attribute__ ((aligned(4)))=
|
||||
{
|
||||
__StackTop, /* 0x00: Top of Stack, calculated by the linker script */
|
||||
Reset_Handler, /* 0x04: Reset Handler, DO NOT CHANGE THE ISR NAME (used for LPC_checksum calculation) */
|
||||
NMI_Handler, /* 0x08: NMI Handler, DO NOT CHANGE THE ISR NAME (used for LPC_checksum calculation) */
|
||||
HardFault_Handler, /* 0x0c: Hard Fault Handler, DO NOT CHANGE THE ISR NAME (used for LPC_checksum calculation) */
|
||||
0, /* 0x10: Reserved, must be 0 */
|
||||
0, /* 0x14: Reserved, must be 0 */
|
||||
0, /* 0x18: Reserved, must be 0 */
|
||||
LPC_checksum, /* 0x1c: Checksum, calculated by the linker script or the flash utility */
|
||||
0, /* Reserved */
|
||||
0, /* Reserved */
|
||||
0, /* Reserved */
|
||||
0, /* SVCall Handler */
|
||||
0, /* Reserved */
|
||||
0, /* Reserved */
|
||||
0, /* PendSV Handler */
|
||||
SysTick_Handler, /* SysTick Handler */
|
||||
|
||||
|
||||
0, /* 0 SPI0 controller */
|
||||
0, /* 1 SPI1 controller */
|
||||
0, /* 2 Reserved */
|
||||
0, /* 3 UART0 */
|
||||
0, /* 4 UART1 */
|
||||
0, /* 5 UART2 */
|
||||
0, /* 6 Reserved */
|
||||
0, /* 7 I2C1 controller */
|
||||
0, /* 8 I2C0 controller */
|
||||
0, /* 9 SCT */
|
||||
0, /* 10 Multi-Rate Timer */
|
||||
0, /* 11 CMP_IRQn Comparator */
|
||||
0, /* 12 WDT_IRQn WDT */
|
||||
0, /* 13 BOD_IRQn BOD Brown Out Detect */
|
||||
0, /* 14 FLASH_IRQn */
|
||||
0, /* 15 WKT_IRQn Self wake-up timer */
|
||||
0, /* 16 ADC_SEQA_IRQn */
|
||||
0, /* 17 ADC_SEQB_IRQn */
|
||||
0, /* 18 ADC_THCMP_IRQn ADC threshold compare */
|
||||
0, /* 19 ADC_OVR_IRQn ADC overrun */
|
||||
0, /* 20 Reserved */
|
||||
0, /* 21 Reserved */
|
||||
0, /* 22 Reserved */
|
||||
0, /* 23 Reserved */
|
||||
0, /* 24 PIO INT0 */
|
||||
0, /* 25 PIO INT1 */
|
||||
0, /* 26 PIO INT2 */
|
||||
0, /* 27 PIO INT3 */
|
||||
0, /* 28 PIO INT4 */
|
||||
0, /* 29 PIO INT5 */
|
||||
0, /* 30 PIO INT6 */
|
||||
0 /* 31 PIO INT7 */
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user