mcb1800 build and blinky with makefile
This commit is contained in:
		
							
								
								
									
										39
									
								
								hw/bsp/mcb1800/board.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								hw/bsp/mcb1800/board.mk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | CFLAGS += \ | ||||||
|  |   -mthumb \ | ||||||
|  |   -mabi=aapcs \ | ||||||
|  |   -mcpu=cortex-m3 \ | ||||||
|  |   -nostdlib \ | ||||||
|  |   -DCORE_M3 \ | ||||||
|  |   -DCFG_TUSB_MCU=OPT_MCU_LPC18XX \ | ||||||
|  |   -D__USE_LPCOPEN | ||||||
|  |  | ||||||
|  | # All source paths should be relative to the top level. | ||||||
|  | LD_FILE = hw/bsp/mcb1800/lpc1857.ld | ||||||
|  |  | ||||||
|  | # TODO remove later | ||||||
|  | SRC_C += src/portable/$(VENDOR)/$(CHIP_FAMILY)/hal_$(CHIP_FAMILY).c | ||||||
|  |  | ||||||
|  | SRC_C += \ | ||||||
|  | 	hw/mcu/nxp/lpcopen/lpc_chip_18xx/src/chip_18xx_43xx.c \ | ||||||
|  | 	hw/mcu/nxp/lpcopen/lpc_chip_18xx/src/clock_18xx_43xx.c \ | ||||||
|  | 	hw/mcu/nxp/lpcopen/lpc_chip_18xx/src/gpio_18xx_43xx.c \ | ||||||
|  | 	hw/mcu/nxp/lpcopen/lpc_chip_18xx/src/sysinit_18xx_43xx.c \ | ||||||
|  | 	hw/mcu/nxp/lpcopen/lpc_chip_18xx/src/uart_18xx_43xx.c | ||||||
|  |  | ||||||
|  | INC += \ | ||||||
|  | 	$(TOP)/hw/mcu/nxp/lpcopen/lpc_chip_18xx/inc \ | ||||||
|  | 	$(TOP)/hw/mcu/nxp/lpcopen/lpc_chip_18xx/inc/config_18xx | ||||||
|  |  | ||||||
|  | # For TinyUSB port source | ||||||
|  | VENDOR = nxp | ||||||
|  | CHIP_FAMILY = lpc18_43 | ||||||
|  |  | ||||||
|  | # For freeRTOS port source | ||||||
|  | FREERTOS_PORT = ARM_CM3 | ||||||
|  |  | ||||||
|  | # For flash-jlink target | ||||||
|  | JLINK_DEVICE = LPC1857 | ||||||
|  | JLINK_IF = swd | ||||||
|  |  | ||||||
|  | # flash using jlink | ||||||
|  | flash: flash-jlink | ||||||
| @@ -30,24 +30,28 @@ | |||||||
| #define LED_PORT  6 | #define LED_PORT  6 | ||||||
| #define LED_PIN   24 | #define LED_PIN   24 | ||||||
|  |  | ||||||
|  | #define BUTTON_PORT   4 | ||||||
|  | #define BUTTON_PIN    0 | ||||||
|  |  | ||||||
|  |  | ||||||
| //--------------------------------------------------------------------+ | //--------------------------------------------------------------------+ | ||||||
| // MACRO TYPEDEF CONSTANT ENUM DECLARATION | // MACRO TYPEDEF CONSTANT ENUM DECLARATION | ||||||
| //--------------------------------------------------------------------+ | //--------------------------------------------------------------------+ | ||||||
| /* System configuration variables used by chip driver */ | /* System configuration variables used by chip driver */ | ||||||
| const uint32_t ExtRateIn = 0; |  | ||||||
| const uint32_t OscRateIn = 12000000; | const uint32_t OscRateIn = 12000000; | ||||||
|  | const uint32_t ExtRateIn = 0; | ||||||
|  |  | ||||||
| static const PINMUX_GRP_T pinmuxing[] = | static const PINMUX_GRP_T pinmuxing[] = | ||||||
| { | { | ||||||
| 	/* Board LEDs */ | 	/* Board LEDs */ | ||||||
| 	{0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | 	{0xD, 10, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | ||||||
| 	{0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | 	{0xD, 11, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0xD, 12, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | 	{0xD, 12, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0xD, 13, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | 	{0xD, 13, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0xD, 14, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4)}, | 	{0xD, 14, (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC4 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0x9, 0,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)}, | 	{0x9, 0,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0x9, 1,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)}, | 	{0x9, 1,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)}, | ||||||
| 	{0x9, 2,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0)}, | 	{0x9, 2,  (SCU_MODE_INBUFF_EN | SCU_MODE_INACT | SCU_MODE_FUNC0 | SCU_MODE_PULLDOWN)}, | ||||||
|  |  | ||||||
| 	/*  I2S  */ | 	/*  I2S  */ | ||||||
| 	{0x3, 0,  (SCU_PINIO_FAST | SCU_MODE_FUNC2)}, | 	{0x3, 0,  (SCU_PINIO_FAST | SCU_MODE_FUNC2)}, | ||||||
| @@ -67,10 +71,6 @@ static const PINMUX_GRP_T pinclockmuxing[] = | |||||||
| 	{0, 3,  (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)}, | 	{0, 3,  (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC0)}, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| /*------------------------------------------------------------------*/ |  | ||||||
| /* BOARD API |  | ||||||
|  *------------------------------------------------------------------*/ |  | ||||||
| // Invoked by startup code | // Invoked by startup code | ||||||
| void SystemInit(void) | void SystemInit(void) | ||||||
| { | { | ||||||
| @@ -97,25 +97,13 @@ void board_init(void) | |||||||
|  |  | ||||||
|   Chip_GPIO_Init(LPC_GPIO_PORT); |   Chip_GPIO_Init(LPC_GPIO_PORT); | ||||||
|  |  | ||||||
|   //------------- LED -------------// |   // LED | ||||||
|   /* Port and bit mapping for LEDs on GPIOs */ |   Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, LED_PORT, LED_PIN); | ||||||
|   const uint8_t ledports[] = {6, 6, 6, 6, 6, 4, 4, 4}; |  | ||||||
|   const uint8_t ledbits[] = {24, 25, 26, 27, 28, 12, 13, 14}; |  | ||||||
|  |  | ||||||
|   for (uint32_t i = 0; i < (sizeof(ledports) / sizeof(ledports[0])); i++)  |   // Button | ||||||
|   { |   Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, BUTTON_PORT, BUTTON_PIN); | ||||||
|     Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, ledports[i], ledbits[i]); |  | ||||||
|     Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, false); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| #if 0 | #if 0 | ||||||
|   //------------- BUTTON -------------// |  | ||||||
|   for(uint8_t i=0; i<BOARD_BUTTON_COUNT; i++) |  | ||||||
|   { |  | ||||||
|     scu_pinmux(buttons[i].mux_port, buttons[i].mux_pin, GPIO_NOPULL, FUNC0); |  | ||||||
|     GPIO_SetDir(buttons[i].gpio_port, TU_BIT(buttons[i].gpio_pin), 0); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   //------------- UART -------------// |   //------------- UART -------------// | ||||||
|   scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN, FUNC1); |   scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_TX, MD_PDN, FUNC1); | ||||||
|   scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN | MD_EZI | MD_ZI, FUNC1); |   scu_pinmux(BOARD_UART_PIN_PORT, BOARD_UART_PIN_RX, MD_PLN | MD_EZI | MD_ZI, FUNC1); | ||||||
| @@ -177,22 +165,28 @@ void board_init(void) | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| //------------- LED -------------// | //--------------------------------------------------------------------+ | ||||||
|  | // Board porting API | ||||||
|  | //--------------------------------------------------------------------+ | ||||||
|  |  | ||||||
|  | #if CFG_TUSB_OS == OPT_OS_NONE | ||||||
|  | volatile uint32_t system_ticks = 0; | ||||||
|  | void SysTick_Handler (void) | ||||||
|  | { | ||||||
|  |   system_ticks++; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | uint32_t board_millis(void) | ||||||
|  | { | ||||||
|  |   return system_ticks; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
| void board_led_write(bool state) | void board_led_write(bool state) | ||||||
| { | { | ||||||
|   Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, state); |   Chip_GPIO_SetPinState(LPC_GPIO_PORT, LED_PORT, LED_PIN, state); | ||||||
| } | } | ||||||
|  |  | ||||||
| //------------- Buttons -------------// |  | ||||||
| /* |  | ||||||
| static bool button_read(uint8_t id) |  | ||||||
| { |  | ||||||
|   (void) id; |  | ||||||
| //  return !tu_bit_test( GPIO_ReadValue(buttons[id].gpio_port), buttons[id].gpio_pin ); // button is active low |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| uint32_t board_button_read(void) | uint32_t board_button_read(void) | ||||||
| { | { | ||||||
|   uint32_t result = 0; |   uint32_t result = 0; | ||||||
| @@ -203,7 +197,6 @@ uint32_t board_button_read(void) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| //------------- UART -------------// |  | ||||||
| int board_uart_read(uint8_t* buf, int len) | int board_uart_read(uint8_t* buf, int len) | ||||||
| { | { | ||||||
|   //return UART_ReceiveByte(BOARD_UART_PORT); |   //return UART_ReceiveByte(BOARD_UART_PORT); | ||||||
| @@ -220,21 +213,4 @@ int board_uart_write(void const * buf, int len) | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /*------------------------------------------------------------------*/ |  | ||||||
| /* TUSB HAL MILLISECOND |  | ||||||
|  *------------------------------------------------------------------*/ |  | ||||||
| #if CFG_TUSB_OS == OPT_OS_NONE |  | ||||||
|  |  | ||||||
| volatile uint32_t system_ticks = 0; |  | ||||||
|  |  | ||||||
| void SysTick_Handler (void) |  | ||||||
| { |  | ||||||
|   system_ticks++; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint32_t board_millis(void) |  | ||||||
| { |  | ||||||
|   return system_ticks; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|   | |||||||
							
								
								
									
										477
									
								
								hw/bsp/mcb1800/cr_startup_lpc18xx.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										477
									
								
								hw/bsp/mcb1800/cr_startup_lpc18xx.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,477 @@ | |||||||
|  | //***************************************************************************** | ||||||
|  | // LPC18xx Microcontroller Startup code for use with LPCXpresso IDE | ||||||
|  | // | ||||||
|  | // Version : 150706 | ||||||
|  | //***************************************************************************** | ||||||
|  | // | ||||||
|  | // Copyright(C) NXP Semiconductors, 2013-2015 | ||||||
|  | // All rights reserved. | ||||||
|  | // | ||||||
|  | // Software that is described herein is for illustrative purposes only | ||||||
|  | // which provides customers with programming information regarding the | ||||||
|  | // LPC products.  This software is supplied "AS IS" without any warranties of | ||||||
|  | // any kind, and NXP Semiconductors and its licensor disclaim any and | ||||||
|  | // all warranties, express or implied, including all implied warranties of | ||||||
|  | // merchantability, fitness for a particular purpose and non-infringement of | ||||||
|  | // intellectual property rights.  NXP Semiconductors assumes no responsibility | ||||||
|  | // or liability for the use of the software, conveys no license or rights under any | ||||||
|  | // patent, copyright, mask work right, or any other intellectual property rights in | ||||||
|  | // or to any products. NXP Semiconductors reserves the right to make changes | ||||||
|  | // in the software without notification. NXP Semiconductors also makes no | ||||||
|  | // representation or warranty that such application will be suitable for the | ||||||
|  | // specified use without further testing or modification. | ||||||
|  | // | ||||||
|  | // Permission to use, copy, modify, and distribute this software and its | ||||||
|  | // documentation is hereby granted, under NXP Semiconductors' and its | ||||||
|  | // licensor's relevant copyrights in the software, without fee, provided that it | ||||||
|  | // is used in conjunction with NXP Semiconductors microcontrollers.  This | ||||||
|  | // copyright, permission, and disclaimer notice must appear in all copies of | ||||||
|  | // this code. | ||||||
|  | //***************************************************************************** | ||||||
|  |  | ||||||
|  | #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 | ||||||
|  | // | ||||||
|  | //***************************************************************************** | ||||||
|  | void DAC_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void DMA_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void FLASH_EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void ETH_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SDIO_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void LCD_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void USB0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void USB1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SCT_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void RIT_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void UART0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void UART1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void UART2_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void UART3_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void I2S0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void I2S1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SPIFI_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void SGPIO_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO2_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO3_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO4_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO6_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GPIO7_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void CAN1_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void ATIMER_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void RTC_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void WDT_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  | void QEI_IRQHandler(void) ALIAS(IntDefaultHandler); | ||||||
|  |  | ||||||
|  | //***************************************************************************** | ||||||
|  | // | ||||||
|  | // 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(void); | ||||||
|  |  | ||||||
|  | //***************************************************************************** | ||||||
|  | #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 - LPC18 | ||||||
|  |     DAC_IRQHandler,             // 16 | ||||||
|  |     0,                          // 17 | ||||||
|  |     DMA_IRQHandler,             // 18 | ||||||
|  |     0,                          // 19 | ||||||
|  |     FLASH_EEPROM_IRQHandler,    // 20 ORed flash Bank A, flash Bank B, EEPROM interrupts | ||||||
|  |     ETH_IRQHandler,             // 21 | ||||||
|  |     SDIO_IRQHandler,            // 22 | ||||||
|  |     LCD_IRQHandler,             // 23 | ||||||
|  |     USB0_IRQHandler,            // 24 | ||||||
|  |     USB1_IRQHandler,            // 25 | ||||||
|  |     SCT_IRQHandler,             // 26 | ||||||
|  |     RIT_IRQHandler,             // 27 | ||||||
|  |     TIMER0_IRQHandler,          // 28 | ||||||
|  |     TIMER1_IRQHandler,          // 29 | ||||||
|  |     TIMER2_IRQHandler,          // 30 | ||||||
|  |     TIMER3_IRQHandler,          // 31 | ||||||
|  |     MCPWM_IRQHandler,           // 32 | ||||||
|  |     ADC0_IRQHandler,            // 33 | ||||||
|  |     I2C0_IRQHandler,            // 34 | ||||||
|  |     I2C1_IRQHandler,            // 35 | ||||||
|  |     0,                          // 36 | ||||||
|  |     ADC1_IRQHandler,            // 37 | ||||||
|  |     SSP0_IRQHandler,            // 38 | ||||||
|  |     SSP1_IRQHandler,            // 39 | ||||||
|  |     UART0_IRQHandler,           // 40 | ||||||
|  |     UART1_IRQHandler,           // 41 | ||||||
|  |     UART2_IRQHandler,           // 42 | ||||||
|  |     UART3_IRQHandler,           // 43 | ||||||
|  |     I2S0_IRQHandler,            // 44 | ||||||
|  |     I2S1_IRQHandler,            // 45 | ||||||
|  |     SPIFI_IRQHandler,           // 46 | ||||||
|  |     SGPIO_IRQHandler,           // 47 | ||||||
|  |     GPIO0_IRQHandler,           // 48 | ||||||
|  |     GPIO1_IRQHandler,           // 49 | ||||||
|  |     GPIO2_IRQHandler,           // 50 | ||||||
|  |     GPIO3_IRQHandler,           // 51 | ||||||
|  |     GPIO4_IRQHandler,           // 52 | ||||||
|  |     GPIO5_IRQHandler,           // 53 | ||||||
|  |     GPIO6_IRQHandler,           // 54 | ||||||
|  |     GPIO7_IRQHandler,           // 55 | ||||||
|  |     GINT0_IRQHandler,           // 56 | ||||||
|  |     GINT1_IRQHandler,           // 57 | ||||||
|  |     EVRT_IRQHandler,            // 58 | ||||||
|  |     CAN1_IRQHandler,            // 59 | ||||||
|  |     0,                          // 60 | ||||||
|  |     0,                          // 61 | ||||||
|  |     ATIMER_IRQHandler,          // 62 | ||||||
|  |     RTC_IRQHandler,             // 63 | ||||||
|  |     0,                          // 64 | ||||||
|  |     WDT_IRQHandler,             // 65 | ||||||
|  |     0,                          // 66 | ||||||
|  |     CAN0_IRQHandler,            // 67 | ||||||
|  |     QEI_IRQHandler,             // 68 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | //***************************************************************************** | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | //***************************************************************************** | ||||||
|  | void | ||||||
|  | ResetISR(void) { | ||||||
|  |  | ||||||
|  | // ************************************************************* | ||||||
|  | // The following conditional block of code manually resets as | ||||||
|  | // much of the peripheral set of the LPC18 as possible. This is | ||||||
|  | // done because the LPC18 does not provide a means of triggering | ||||||
|  | // a full system reset under debugger control, which can cause | ||||||
|  | // problems in certain circumstances when debugging. | ||||||
|  | // | ||||||
|  | // You can prevent this code block being included if you require | ||||||
|  | // (for example when creating a final executable which you will | ||||||
|  | // not debug) by setting the define 'DONT_RESET_ON_RESTART'. | ||||||
|  | // | ||||||
|  | #ifndef DONT_RESET_ON_RESTART | ||||||
|  |  | ||||||
|  |     // Disable interrupts | ||||||
|  |     __asm volatile ("cpsid i"); | ||||||
|  |     // equivalent to CMSIS '__disable_irq()' function | ||||||
|  |  | ||||||
|  |     unsigned int *RESET_CONTROL = (unsigned int *) 0x40053100; | ||||||
|  |     // LPC_RGU->RESET_CTRL0 @ 0x40053100 | ||||||
|  |     // LPC_RGU->RESET_CTRL1 @ 0x40053104 | ||||||
|  |     // Note that we do not use the CMSIS register access mechanism, | ||||||
|  |     // as there is no guarantee that the project has been configured | ||||||
|  |     // to use CMSIS. | ||||||
|  |  | ||||||
|  |     // Write to LPC_RGU->RESET_CTRL0 | ||||||
|  |     *(RESET_CONTROL+0) = 0x10DF0000; | ||||||
|  |     // GPIO_RST|AES_RST|ETHERNET_RST|SDIO_RST|DMA_RST| | ||||||
|  |     // USB1_RST|USB0_RST|LCD_RST | ||||||
|  |  | ||||||
|  |     // Write to LPC_RGU->RESET_CTRL1 | ||||||
|  |     *(RESET_CONTROL+1) = 0x00DFF7FF; | ||||||
|  |     // CAN0_RST|CAN1_RST|I2S_RST|SSP1_RST|SSP0_RST| | ||||||
|  |     // I2C1_RST|I2C0_RST|UART3_RST|UART1_RST|UART1_RST|UART0_RST| | ||||||
|  |     // DAC_RST|ADC1_RST|ADC0_RST|QEI_RST|MOTOCONPWM_RST|SCT_RST| | ||||||
|  |     // RITIMER_RST|TIMER3_RST|TIMER2_RST|TIMER1_RST|TIMER0_RST | ||||||
|  |  | ||||||
|  |     // Clear all pending interrupts in the NVIC | ||||||
|  |     volatile unsigned int *NVIC_ICPR = (unsigned int *) 0xE000E280; | ||||||
|  |     unsigned int irqpendloop; | ||||||
|  |     for (irqpendloop = 0; irqpendloop < 8; irqpendloop++) { | ||||||
|  |         *(NVIC_ICPR+irqpendloop)= 0xFFFFFFFF; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Reenable interrupts | ||||||
|  |     __asm volatile ("cpsie i"); | ||||||
|  |     // equivalent to CMSIS '__enable_irq()' function | ||||||
|  |  | ||||||
|  | #endif  // ifndef DONT_RESET_ON_RESTART | ||||||
|  | // ************************************************************* | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #if defined (__USE_LPCOPEN) | ||||||
|  |     SystemInit(); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     // 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // ****************************** | ||||||
|  |     // Check to see if we are running the code from a non-zero | ||||||
|  |         // address (eg RAM, external flash), in which case we need | ||||||
|  |         // to modify the VTOR register to tell the CPU that the | ||||||
|  |         // vector table is located at a non-0x0 address. | ||||||
|  |  | ||||||
|  |     // Note that we do not use the CMSIS register access mechanism, | ||||||
|  |     // as there is no guarantee that the project has been configured | ||||||
|  |     // to use CMSIS. | ||||||
|  |     unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08; | ||||||
|  |     if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) { | ||||||
|  |         // CMSIS : SCB->VTOR = <address of vector table> | ||||||
|  |         *pSCB_VTOR = (unsigned int)g_pfnVectors; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | #if defined (__USE_CMSIS) | ||||||
|  |     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) { | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										323
									
								
								hw/bsp/mcb1800/lpc1857.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										323
									
								
								hw/bsp/mcb1800/lpc1857.ld
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,323 @@ | |||||||
|  | /* | ||||||
|  |  * GENERATED FILE - DO NOT EDIT | ||||||
|  |  * (c) Code Red Technologies Ltd, 2008-2013 | ||||||
|  |  * (c) NXP Semiconductors 2013-2019 | ||||||
|  |  * Generated linker script file for LPC1857 | ||||||
|  |  * Created from linkscript.ldt by FMCreateLinkLibraries | ||||||
|  |  * Using Freemarker v2.3.23 | ||||||
|  |  * MCUXpresso IDE v10.2.1 [Build 795] [2018-07-25] on May 15, 2019 1:01:52 PM | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | MEMORY | ||||||
|  | { | ||||||
|  |   /* Define each memory region */ | ||||||
|  |   MFlashA512 (rx) : ORIGIN = 0x1a000000, LENGTH = 0x80000 /* 512K bytes (alias Flash) */   | ||||||
|  |   MFlashB512 (rx) : ORIGIN = 0x1b000000, LENGTH = 0x80000 /* 512K bytes (alias Flash2) */   | ||||||
|  |   RamLoc32 (rwx) : ORIGIN = 0x10000000, LENGTH = 0x8000 /* 32K bytes (alias RAM) */   | ||||||
|  |   RamLoc40 (rwx) : ORIGIN = 0x10080000, LENGTH = 0xa000 /* 40K bytes (alias RAM2) */   | ||||||
|  |   RamAHB32 (rwx) : ORIGIN = 0x20000000, LENGTH = 0x8000 /* 32K bytes (alias RAM3) */   | ||||||
|  |   RamAHB16 (rwx) : ORIGIN = 0x20008000, LENGTH = 0x4000 /* 16K bytes (alias RAM4) */   | ||||||
|  |   RamAHB_ETB16 (rwx) : ORIGIN = 0x2000c000, LENGTH = 0x4000 /* 16K bytes (alias RAM5) */   | ||||||
|  | } | ||||||
|  |  | ||||||
|  |   /* Define a symbol for the top of each memory region */ | ||||||
|  |   __base_MFlashA512 = 0x1a000000  ; /* MFlashA512 */   | ||||||
|  |   __base_Flash = 0x1a000000 ; /* Flash */   | ||||||
|  |   __top_MFlashA512 = 0x1a000000 + 0x80000 ; /* 512K bytes */   | ||||||
|  |   __top_Flash = 0x1a000000 + 0x80000 ; /* 512K bytes */   | ||||||
|  |   __base_MFlashB512 = 0x1b000000  ; /* MFlashB512 */   | ||||||
|  |   __base_Flash2 = 0x1b000000 ; /* Flash2 */   | ||||||
|  |   __top_MFlashB512 = 0x1b000000 + 0x80000 ; /* 512K bytes */   | ||||||
|  |   __top_Flash2 = 0x1b000000 + 0x80000 ; /* 512K bytes */   | ||||||
|  |   __base_RamLoc32 = 0x10000000  ; /* RamLoc32 */   | ||||||
|  |   __base_RAM = 0x10000000 ; /* RAM */   | ||||||
|  |   __top_RamLoc32 = 0x10000000 + 0x8000 ; /* 32K bytes */   | ||||||
|  |   __top_RAM = 0x10000000 + 0x8000 ; /* 32K bytes */   | ||||||
|  |   __base_RamLoc40 = 0x10080000  ; /* RamLoc40 */   | ||||||
|  |   __base_RAM2 = 0x10080000 ; /* RAM2 */   | ||||||
|  |   __top_RamLoc40 = 0x10080000 + 0xa000 ; /* 40K bytes */   | ||||||
|  |   __top_RAM2 = 0x10080000 + 0xa000 ; /* 40K bytes */   | ||||||
|  |   __base_RamAHB32 = 0x20000000  ; /* RamAHB32 */   | ||||||
|  |   __base_RAM3 = 0x20000000 ; /* RAM3 */   | ||||||
|  |   __top_RamAHB32 = 0x20000000 + 0x8000 ; /* 32K bytes */   | ||||||
|  |   __top_RAM3 = 0x20000000 + 0x8000 ; /* 32K bytes */   | ||||||
|  |   __base_RamAHB16 = 0x20008000  ; /* RamAHB16 */   | ||||||
|  |   __base_RAM4 = 0x20008000 ; /* RAM4 */   | ||||||
|  |   __top_RamAHB16 = 0x20008000 + 0x4000 ; /* 16K bytes */   | ||||||
|  |   __top_RAM4 = 0x20008000 + 0x4000 ; /* 16K bytes */   | ||||||
|  |   __base_RamAHB_ETB16 = 0x2000c000  ; /* RamAHB_ETB16 */   | ||||||
|  |   __base_RAM5 = 0x2000c000 ; /* RAM5 */   | ||||||
|  |   __top_RamAHB_ETB16 = 0x2000c000 + 0x4000 ; /* 16K bytes */   | ||||||
|  |   __top_RAM5 = 0x2000c000 + 0x4000 ; /* 16K bytes */   | ||||||
|  |  | ||||||
|  | ENTRY(ResetISR) | ||||||
|  |  | ||||||
|  | SECTIONS | ||||||
|  | { | ||||||
|  |     .text_Flash2 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        FILL(0xff) | ||||||
|  |         *(.text_Flash2*) /* for compatibility with previous releases */ | ||||||
|  |         *(.text_MFlashB512*) /* for compatibility with previous releases */ | ||||||
|  |         *(.text.$Flash2*) | ||||||
|  |         *(.text.$MFlashB512*) | ||||||
|  |         *(.rodata.$Flash2*) | ||||||
|  |         *(.rodata.$MFlashB512*) | ||||||
|  |     } > MFlashB512 | ||||||
|  |  | ||||||
|  |     /* MAIN TEXT SECTION */ | ||||||
|  |     .text : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         FILL(0xff) | ||||||
|  |         __vectors_start__ = ABSOLUTE(.) ; | ||||||
|  |         KEEP(*(.isr_vector)) | ||||||
|  |         /* Global Section Table */ | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         __section_table_start = .; | ||||||
|  |         __data_section_table = .; | ||||||
|  |         LONG(LOADADDR(.data)); | ||||||
|  |         LONG(    ADDR(.data)); | ||||||
|  |         LONG(  SIZEOF(.data)); | ||||||
|  |         LONG(LOADADDR(.data_RAM2)); | ||||||
|  |         LONG(    ADDR(.data_RAM2)); | ||||||
|  |         LONG(  SIZEOF(.data_RAM2)); | ||||||
|  |         LONG(LOADADDR(.data_RAM3)); | ||||||
|  |         LONG(    ADDR(.data_RAM3)); | ||||||
|  |         LONG(  SIZEOF(.data_RAM3)); | ||||||
|  |         LONG(LOADADDR(.data_RAM4)); | ||||||
|  |         LONG(    ADDR(.data_RAM4)); | ||||||
|  |         LONG(  SIZEOF(.data_RAM4)); | ||||||
|  |         LONG(LOADADDR(.data_RAM5)); | ||||||
|  |         LONG(    ADDR(.data_RAM5)); | ||||||
|  |         LONG(  SIZEOF(.data_RAM5)); | ||||||
|  |         __data_section_table_end = .; | ||||||
|  |         __bss_section_table = .; | ||||||
|  |         LONG(    ADDR(.bss)); | ||||||
|  |         LONG(  SIZEOF(.bss)); | ||||||
|  |         LONG(    ADDR(.bss_RAM2)); | ||||||
|  |         LONG(  SIZEOF(.bss_RAM2)); | ||||||
|  |         LONG(    ADDR(.bss_RAM3)); | ||||||
|  |         LONG(  SIZEOF(.bss_RAM3)); | ||||||
|  |         LONG(    ADDR(.bss_RAM4)); | ||||||
|  |         LONG(  SIZEOF(.bss_RAM4)); | ||||||
|  |         LONG(    ADDR(.bss_RAM5)); | ||||||
|  |         LONG(  SIZEOF(.bss_RAM5)); | ||||||
|  |         __bss_section_table_end = .; | ||||||
|  |         __section_table_end = . ; | ||||||
|  |         /* End of Global Section Table */ | ||||||
|  |  | ||||||
|  |         *(.after_vectors*) | ||||||
|  |  | ||||||
|  |     } > MFlashA512 | ||||||
|  |  | ||||||
|  |     .text : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        *(.text*) | ||||||
|  |        *(.rodata .rodata.* .constdata .constdata.*) | ||||||
|  |        . = ALIGN(4); | ||||||
|  |     } > MFlashA512 | ||||||
|  |     /* | ||||||
|  |      * for exception handling/unwind - some Newlib functions (in common | ||||||
|  |      * with C++ and STDC++) use this.  | ||||||
|  |      */ | ||||||
|  |     .ARM.extab : ALIGN(4)  | ||||||
|  |     { | ||||||
|  |         *(.ARM.extab* .gnu.linkonce.armextab.*) | ||||||
|  |     } > MFlashA512 | ||||||
|  |  | ||||||
|  |     __exidx_start = .; | ||||||
|  |  | ||||||
|  |     .ARM.exidx : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         *(.ARM.exidx* .gnu.linkonce.armexidx.*) | ||||||
|  |     } > MFlashA512 | ||||||
|  |     __exidx_end = .; | ||||||
|  |  | ||||||
|  |     _etext = .; | ||||||
|  |          | ||||||
|  |     /* DATA section for RamLoc40 */ | ||||||
|  |  | ||||||
|  |     .data_RAM2 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         FILL(0xff) | ||||||
|  |         PROVIDE(__start_data_RAM2 = .) ; | ||||||
|  |         *(.ramfunc.$RAM2) | ||||||
|  |         *(.ramfunc.$RamLoc40) | ||||||
|  |         *(.data.$RAM2*) | ||||||
|  |         *(.data.$RamLoc40*) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         PROVIDE(__end_data_RAM2 = .) ; | ||||||
|  |      } > RamLoc40 AT>MFlashA512 | ||||||
|  |     /* DATA section for RamAHB32 */ | ||||||
|  |  | ||||||
|  |     .data_RAM3 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         FILL(0xff) | ||||||
|  |         PROVIDE(__start_data_RAM3 = .) ; | ||||||
|  |         *(.ramfunc.$RAM3) | ||||||
|  |         *(.ramfunc.$RamAHB32) | ||||||
|  |         *(.data.$RAM3*) | ||||||
|  |         *(.data.$RamAHB32*) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         PROVIDE(__end_data_RAM3 = .) ; | ||||||
|  |      } > RamAHB32 AT>MFlashA512 | ||||||
|  |     /* DATA section for RamAHB16 */ | ||||||
|  |  | ||||||
|  |     .data_RAM4 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         FILL(0xff) | ||||||
|  |         PROVIDE(__start_data_RAM4 = .) ; | ||||||
|  |         *(.ramfunc.$RAM4) | ||||||
|  |         *(.ramfunc.$RamAHB16) | ||||||
|  |         *(.data.$RAM4*) | ||||||
|  |         *(.data.$RamAHB16*) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         PROVIDE(__end_data_RAM4 = .) ; | ||||||
|  |      } > RamAHB16 AT>MFlashA512 | ||||||
|  |     /* DATA section for RamAHB_ETB16 */ | ||||||
|  |  | ||||||
|  |     .data_RAM5 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         FILL(0xff) | ||||||
|  |         PROVIDE(__start_data_RAM5 = .) ; | ||||||
|  |         *(.ramfunc.$RAM5) | ||||||
|  |         *(.ramfunc.$RamAHB_ETB16) | ||||||
|  |         *(.data.$RAM5*) | ||||||
|  |         *(.data.$RamAHB_ETB16*) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         PROVIDE(__end_data_RAM5 = .) ; | ||||||
|  |      } > RamAHB_ETB16 AT>MFlashA512 | ||||||
|  |     /* MAIN DATA SECTION */ | ||||||
|  |     .uninit_RESERVED : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         KEEP(*(.bss.$RESERVED*)) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         _end_uninit_RESERVED = .; | ||||||
|  |     } > RamLoc32 | ||||||
|  |  | ||||||
|  |     /* Main DATA section (RamLoc32) */ | ||||||
|  |     .data : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        FILL(0xff) | ||||||
|  |        _data = . ; | ||||||
|  |        *(vtable) | ||||||
|  |        *(.ramfunc*) | ||||||
|  |        *(.data*) | ||||||
|  |        . = ALIGN(4) ; | ||||||
|  |        _edata = . ; | ||||||
|  |     } > RamLoc32 AT>MFlashA512 | ||||||
|  |  | ||||||
|  |     /* BSS section for RamLoc40 */ | ||||||
|  |     .bss_RAM2 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        PROVIDE(__start_bss_RAM2 = .) ; | ||||||
|  |        *(.bss.$RAM2*) | ||||||
|  |        *(.bss.$RamLoc40*) | ||||||
|  |        . = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */ | ||||||
|  |        PROVIDE(__end_bss_RAM2 = .) ; | ||||||
|  |     } > RamLoc40  | ||||||
|  |  | ||||||
|  |     /* BSS section for RamAHB32 */ | ||||||
|  |     .bss_RAM3 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        PROVIDE(__start_bss_RAM3 = .) ; | ||||||
|  |        *(.bss.$RAM3*) | ||||||
|  |        *(.bss.$RamAHB32*) | ||||||
|  |        . = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */ | ||||||
|  |        PROVIDE(__end_bss_RAM3 = .) ; | ||||||
|  |     } > RamAHB32  | ||||||
|  |  | ||||||
|  |     /* BSS section for RamAHB16 */ | ||||||
|  |     .bss_RAM4 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        PROVIDE(__start_bss_RAM4 = .) ; | ||||||
|  |        *(.bss.$RAM4*) | ||||||
|  |        *(.bss.$RamAHB16*) | ||||||
|  |        . = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */ | ||||||
|  |        PROVIDE(__end_bss_RAM4 = .) ; | ||||||
|  |     } > RamAHB16  | ||||||
|  |  | ||||||
|  |     /* BSS section for RamAHB_ETB16 */ | ||||||
|  |     .bss_RAM5 : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        PROVIDE(__start_bss_RAM5 = .) ; | ||||||
|  |        *(.bss.$RAM5*) | ||||||
|  |        *(.bss.$RamAHB_ETB16*) | ||||||
|  |        . = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */ | ||||||
|  |        PROVIDE(__end_bss_RAM5 = .) ; | ||||||
|  |     } > RamAHB_ETB16  | ||||||
|  |  | ||||||
|  |     /* MAIN BSS SECTION */ | ||||||
|  |     .bss : ALIGN(4) | ||||||
|  |     { | ||||||
|  |         _bss = .; | ||||||
|  |         *(.bss*) | ||||||
|  |         *(COMMON) | ||||||
|  |         . = ALIGN(4) ; | ||||||
|  |         _ebss = .; | ||||||
|  |         PROVIDE(end = .); | ||||||
|  |     } > RamLoc32 | ||||||
|  |  | ||||||
|  |     /* NOINIT section for RamLoc40 */ | ||||||
|  |     .noinit_RAM2 (NOLOAD) : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        *(.noinit.$RAM2*) | ||||||
|  |        *(.noinit.$RamLoc40*) | ||||||
|  |        . = ALIGN(4) ; | ||||||
|  |     } > RamLoc40  | ||||||
|  |  | ||||||
|  |     /* NOINIT section for RamAHB32 */ | ||||||
|  |     .noinit_RAM3 (NOLOAD) : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        *(.noinit.$RAM3*) | ||||||
|  |        *(.noinit.$RamAHB32*) | ||||||
|  |        . = ALIGN(4) ; | ||||||
|  |     } > RamAHB32  | ||||||
|  |  | ||||||
|  |     /* NOINIT section for RamAHB16 */ | ||||||
|  |     .noinit_RAM4 (NOLOAD) : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        *(.noinit.$RAM4*) | ||||||
|  |        *(.noinit.$RamAHB16*) | ||||||
|  |        . = ALIGN(4) ; | ||||||
|  |     } > RamAHB16  | ||||||
|  |  | ||||||
|  |     /* NOINIT section for RamAHB_ETB16 */ | ||||||
|  |     .noinit_RAM5 (NOLOAD) : ALIGN(4) | ||||||
|  |     { | ||||||
|  |        *(.noinit.$RAM5*) | ||||||
|  |        *(.noinit.$RamAHB_ETB16*) | ||||||
|  |        . = ALIGN(4) ; | ||||||
|  |     } > RamAHB_ETB16  | ||||||
|  |  | ||||||
|  |     /* DEFAULT NOINIT SECTION */ | ||||||
|  |     .noinit (NOLOAD): ALIGN(4) | ||||||
|  |     { | ||||||
|  |         _noinit = .; | ||||||
|  |         *(.noinit*)  | ||||||
|  |          . = ALIGN(4) ; | ||||||
|  |         _end_noinit = .; | ||||||
|  |     } > RamLoc32 | ||||||
|  |     PROVIDE(_pvHeapStart = DEFINED(__user_heap_base) ? __user_heap_base : .); | ||||||
|  |     PROVIDE(_vStackTop = DEFINED(__user_stack_top) ? __user_stack_top : __top_RamLoc32 - 0); | ||||||
|  |  | ||||||
|  |     /* ## Create checksum value (used in startup) ## */ | ||||||
|  |     PROVIDE(__valid_user_code_checksum = 0 -  | ||||||
|  |                                          (_vStackTop  | ||||||
|  |                                          + (ResetISR + 1)  | ||||||
|  |                                          + (NMI_Handler + 1)  | ||||||
|  |                                          + (HardFault_Handler + 1)  | ||||||
|  |                                          + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined */ | ||||||
|  |                                          + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined */ | ||||||
|  |                                          + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined */ | ||||||
|  |                                          ) ); | ||||||
|  |  | ||||||
|  |     /* Provide basic symbols giving location and size of main text | ||||||
|  |      * block, including initial values of RW data sections. Note that | ||||||
|  |      * these will need extending to give a complete picture with | ||||||
|  |      * complex images (e.g multiple Flash banks). | ||||||
|  |      */ | ||||||
|  |     _image_start = LOADADDR(.text); | ||||||
|  |     _image_end = LOADADDR(.data) + SIZEOF(.data); | ||||||
|  |     _image_size = _image_end - _image_start; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach