Skip to content

Commit 73d8f72

Browse files
committed
Merge pull request #366 from aozima/CME_M7
[CME_M7] add GCC compile support.
2 parents cbf02c0 + 1f47eb8 commit 73d8f72

File tree

7 files changed

+250
-42
lines changed

7 files changed

+250
-42
lines changed

bsp/CME_M7/CME_M7.ld

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
/******************************************************************************
22
*
3-
* nuc472_flash.ld - Linker configuration file for project.
3+
* CME_M7.ld - Linker configuration file for project.
44
*
55
* Change Logs:
66
* Date Author Notes
7-
* 2014-08-24 aozima first implementation
7+
* 2014-11-02 aozima first implementation
88
*
99
*****************************************************************************/
1010

1111
/* Program Entry, set to mark it as "used" and avoid gc */
1212
MEMORY
1313
{
14-
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K
14+
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K /* !!! real 128K, up to 256K for linker. */
1515
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
1616
}
1717

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
//*****************************************************************************
2+
//
3+
// Startup code for use with GNU tools.
4+
//
5+
//*****************************************************************************
6+
7+
8+
//*****************************************************************************
9+
//
10+
// Forward declaration of the default fault handlers.
11+
//
12+
//*****************************************************************************
13+
static void Reset_Handler(void);
14+
static void Default_Handler(void);
15+
16+
//*****************************************************************************
17+
//
18+
// External declaration for the interrupt handler used by the application.
19+
//
20+
//*****************************************************************************
21+
void NMI_Handler(void) __attribute__((weak, alias("Default_Handler")));
22+
void HardFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
23+
void MemManage_Handler(void) __attribute__((weak, alias("Default_Handler")));
24+
void BusFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
25+
void UsageFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
26+
void SVC_Handler(void) __attribute__((weak, alias("Default_Handler")));
27+
void DebugMon_Handler(void) __attribute__((weak, alias("Default_Handler")));
28+
void PendSV_Handler(void) __attribute__((weak, alias("Default_Handler")));
29+
void SysTick_Handler(void) __attribute__((weak, alias("Default_Handler")));
30+
31+
void ETH_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
32+
void USB_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
33+
void DMAC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
34+
void CAN0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
35+
void CAN1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
36+
37+
void FP0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
38+
void FP1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
39+
void FP2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
40+
void FP3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
41+
void FP4_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
42+
void FP5_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
43+
void FP6_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
44+
void FP7_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
45+
void FP8_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
46+
void FP9_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
47+
void FP10_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
48+
void FP11_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
49+
void FP12_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
50+
void FP13_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
51+
void FP14_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
52+
void FP15_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
53+
void UART0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
54+
void UART1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
55+
void ADC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
56+
void GPIO_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
57+
void SPI1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
58+
void I2C1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
59+
void SPI0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
60+
void I2C0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
61+
void RTC_1S_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
62+
void RTC_1MS_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
63+
void WDG_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
64+
void TIMER_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
65+
void DDRC_SW_PROC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
66+
void ETH_PMT_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
67+
void PAD_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
68+
void DDRC_LANE_SYNC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
69+
void UART2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
70+
71+
//*****************************************************************************
72+
//
73+
// The entry point for the application.
74+
//
75+
//*****************************************************************************
76+
extern int main(void);
77+
78+
//*****************************************************************************
79+
//
80+
// Reserve space for the system stack.
81+
//
82+
//*****************************************************************************
83+
static unsigned long pulStack[512];
84+
85+
//*****************************************************************************
86+
//
87+
// The vector table. Note that the proper constructs must be placed on this to
88+
// ensure that it ends up at physical address 0x0000.0000.
89+
//
90+
//*****************************************************************************
91+
__attribute__ ((section(".isr_vector")))
92+
void (* const g_pfnVectors[])(void) =
93+
{
94+
(void (*)(void))((unsigned long)pulStack + sizeof(pulStack)),
95+
// The initial stack pointer
96+
Reset_Handler, // Reset Handler
97+
NMI_Handler, // NMI Handler
98+
HardFault_Handler, // Hard Fault Handler
99+
MemManage_Handler, // MPU Fault Handler
100+
BusFault_Handler, // Bus Fault Handler
101+
UsageFault_Handler, // Usage Fault Handler
102+
0, // Reserved
103+
0, // Reserved
104+
0, // Reserved
105+
0, // Reserved
106+
SVC_Handler, // SVCall Handler
107+
DebugMon_Handler, // Debug Monitor Handler
108+
0, // Reserved
109+
PendSV_Handler, // PendSV Handler
110+
SysTick_Handler, // SysTick Handler
111+
112+
// External Interrupts
113+
ETH_IRQHandler,
114+
USB_IRQHandler,
115+
DMAC_IRQHandler,
116+
CAN0_IRQHandler,
117+
CAN1_IRQHandler,
118+
FP0_IRQHandler,
119+
FP1_IRQHandler,
120+
FP2_IRQHandler,
121+
FP3_IRQHandler,
122+
FP4_IRQHandler,
123+
FP5_IRQHandler,
124+
FP6_IRQHandler,
125+
FP7_IRQHandler,
126+
FP8_IRQHandler,
127+
FP9_IRQHandler,
128+
FP10_IRQHandler,
129+
FP11_IRQHandler,
130+
FP12_IRQHandler,
131+
FP13_IRQHandler,
132+
FP14_IRQHandler,
133+
FP15_IRQHandler,
134+
UART0_IRQHandler,
135+
UART1_IRQHandler,
136+
ADC_IRQHandler,
137+
GPIO_IRQHandler,
138+
SPI1_IRQHandler,
139+
I2C1_IRQHandler,
140+
SPI0_IRQHandler,
141+
I2C0_IRQHandler,
142+
RTC_1S_IRQHandler,
143+
RTC_1MS_IRQHandler,
144+
WDG_IRQHandler,
145+
TIMER_IRQHandler,
146+
DDRC_SW_PROC_IRQHandler,
147+
ETH_PMT_IRQHandler,
148+
PAD_IRQHandler,
149+
DDRC_LANE_SYNC_IRQHandler,
150+
UART2_IRQHandler,
151+
};
152+
153+
//*****************************************************************************
154+
//
155+
// The following are constructs created by the linker, indicating where the
156+
// the "data" and "bss" segments reside in memory. The initializers for the
157+
// for the "data" segment resides immediately following the "text" segment.
158+
//
159+
//*****************************************************************************
160+
extern unsigned long _etext;
161+
extern unsigned long _data;
162+
extern unsigned long _edata;
163+
extern unsigned long _bss;
164+
extern unsigned long _ebss;
165+
166+
//*****************************************************************************
167+
//
168+
// This is the code that gets called when the processor first starts execution
169+
// following a reset event. Only the absolutely necessary set is performed,
170+
// after which the application supplied entry() routine is called. Any fancy
171+
// actions (such as making decisions based on the reset cause register, and
172+
// resetting the bits in that register) are left solely in the hands of the
173+
// application.
174+
//
175+
//*****************************************************************************
176+
static void Reset_Handler(void)
177+
{
178+
unsigned long *pulSrc, *pulDest;
179+
180+
//
181+
// Copy the data segment initializers from flash to SRAM.
182+
//
183+
pulSrc = &_etext;
184+
for(pulDest = &_data; pulDest < &_edata; )
185+
{
186+
*pulDest++ = *pulSrc++;
187+
}
188+
189+
//
190+
// Zero fill the bss segment.
191+
//
192+
__asm(" ldr r0, =_bss\n"
193+
" ldr r1, =_ebss\n"
194+
" mov r2, #0\n"
195+
" .thumb_func\n"
196+
"zero_loop:\n"
197+
" cmp r0, r1\n"
198+
" it lt\n"
199+
" strlt r2, [r0], #4\n"
200+
" blt zero_loop");
201+
202+
// call system init.
203+
SystemInit();
204+
205+
//
206+
// Call the application's entry point.
207+
//
208+
main();
209+
}
210+
211+
//*****************************************************************************
212+
//
213+
// This is the code that gets called when the processor receives an unexpected
214+
// interrupt. This simply enters an infinite loop, preserving the system state
215+
// for examination by a debugger.
216+
//
217+
//*****************************************************************************
218+
static void Default_Handler(void)
219+
{
220+
//
221+
// Go into an infinite loop.
222+
//
223+
while(1)
224+
{
225+
}
226+
}

bsp/CME_M7/CMSIS/SConscript

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,21 @@ CME_M7/system_cmem7.c
1212

1313
# add for startup script
1414
if rtconfig.CROSS_TOOL == 'gcc':
15-
src += ['Device/Nuvoton/NUC472_442/Source/GCC/startup_NUC472_442.c']
15+
src += ['CME_M7/startup/gcc/startup_CME_M7.c']
1616
elif rtconfig.CROSS_TOOL == 'keil':
1717
src += ['CME_M7/startup/arm/startup_cmem7.s']
1818
elif rtconfig.CROSS_TOOL == 'iar':
19-
src += ['Device/Nuvoton/NUC472_442/Source/IAR/startup_NUC472_442.S']
19+
print '================ERROR============================'
20+
print 'Not support IAR yet!'
21+
print '================================================='
22+
exit(0)
2023

2124
path = [cwd + '/CME_M7']
22-
#ath += [cwd + '/StdDriver/inc']
2325

24-
# if GetDepend(['RT_USING_BSP_CMSIS']):
25-
# path += [cwd + '/CMSIS/Include']
26-
# elif GetDepend(['RT_USING_RTT_CMSIS']):
27-
# path += [RTT_ROOT + '/components/CMSIS/Include']
26+
if GetDepend(['RT_USING_BSP_CMSIS']):
27+
path += [cwd + '/CMSIS/Include']
28+
elif GetDepend(['RT_USING_RTT_CMSIS']):
29+
path += [RTT_ROOT + '/components/CMSIS/Include']
2830

2931
group = DefineGroup('CMSIS', src, depend = [''], CPPPATH = path)
3032

bsp/CME_M7/StdPeriph_Driver/inc/CMEM7.h renamed to bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ typedef enum {
105105
/** @} */ /* End of group Configuration_of_CMSIS */
106106

107107
#include <core_cm3.h> /*!< Cortex-M3 processor and core peripherals */
108-
#include "system_CMEM7.h" /*!< CMEM7 System */
108+
#include "system_cmem7.h" /*!< CMEM7 System */
109109

110110

111111
/* ================================================================================ */

bsp/CME_M7/project.uvproj

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
<TargetCommonOption>
1515
<Device>ARMCM3</Device>
1616
<Vendor>ARM</Vendor>
17-
<PackID>ARM.CMSIS.4.1.0</PackID>
18-
<PackURL>http://www.keil.com/pack/</PackURL>
1917
<Cpu>CPUTYPE("Cortex-M3") CLOCK(10000000) ESEL ELITTLE</Cpu>
2018
<FlashUtilSpec></FlashUtilSpec>
2119
<StartupFile></StartupFile>
@@ -32,7 +30,6 @@
3230
<SLE66AMisc></SLE66AMisc>
3331
<SLE66LinkerMisc></SLE66LinkerMisc>
3432
<SFDFile>$$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd</SFDFile>
35-
<bCustSvd>0</bCustSvd>
3633
<UseEnv>0</UseEnv>
3734
<BinPath></BinPath>
3835
<IncludePath></IncludePath>
@@ -74,8 +71,6 @@
7471
<UserProg2Name></UserProg2Name>
7572
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
7673
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
77-
<nStopB1X>0</nStopB1X>
78-
<nStopB2X>0</nStopB2X>
7974
</BeforeMake>
8075
<AfterMake>
8176
<RunUserProg1>0</RunUserProg1>
@@ -102,7 +97,6 @@
10297
<StopOnExitCode>3</StopOnExitCode>
10398
<CustomArgument></CustomArgument>
10499
<IncludeLibraryModules></IncludeLibraryModules>
105-
<ComprImg>1</ComprImg>
106100
</CommonProperty>
107101
<DllOption>
108102
<SimDllName>SARMCM3.DLL</SimDllName>
@@ -132,7 +126,6 @@
132126
<RestoreFunctions>1</RestoreFunctions>
133127
<RestoreToolbox>1</RestoreToolbox>
134128
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
135-
<RestoreSysVw>1</RestoreSysVw>
136129
</Simulator>
137130
<Target>
138131
<UseTarget>1</UseTarget>
@@ -144,11 +137,9 @@
144137
<RestoreFunctions>0</RestoreFunctions>
145138
<RestoreToolbox>1</RestoreToolbox>
146139
<RestoreTracepoints>1</RestoreTracepoints>
147-
<RestoreSysVw>1</RestoreSysVw>
148-
<UsePdscDebugDescription>1</UsePdscDebugDescription>
149140
</Target>
150141
<RunDebugAfterBuild>0</RunDebugAfterBuild>
151-
<TargetSelection>17</TargetSelection>
142+
<TargetSelection>-1</TargetSelection>
152143
<SimDlls>
153144
<CpuDll></CpuDll>
154145
<CpuDllArguments></CpuDllArguments>
@@ -178,10 +169,6 @@
178169
<Flash2>BIN\UL2CM3.DLL</Flash2>
179170
<Flash3>"" ()</Flash3>
180171
<Flash4></Flash4>
181-
<pFcarmOut></pFcarmOut>
182-
<pFcarmGrp></pFcarmGrp>
183-
<pFcArmRoot></pFcArmRoot>
184-
<FcArmLst>0</FcArmLst>
185172
</Utilities>
186173
<TargetArmAds>
187174
<ArmAdsMisc>
@@ -360,13 +347,11 @@
360347
<wLevel>2</wLevel>
361348
<uThumb>0</uThumb>
362349
<uSurpInc>0</uSurpInc>
363-
<uC99>0</uC99>
364-
<useXO>0</useXO>
365350
<VariousControls>
366351
<MiscControls></MiscControls>
367-
<Define></Define>
352+
<Define>RT_USING_ARM_LIBC</Define>
368353
<Undefine></Undefine>
369-
<IncludePath>applications;.;CMSIS\CME_M7;drivers;StdPeriph_Driver\inc;..\..\include;..\..\libcpu\arm\cortex-m3;..\..\libcpu\arm\common;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\init;..\..\components\libc\armlibc;..\..\components\net\lwip-1.4.1\src;..\..\components\net\lwip-1.4.1\src\include;..\..\components\net\lwip-1.4.1\src\include\ipv4;..\..\components\net\lwip-1.4.1\src\arch\include;..\..\components\net\lwip-1.4.1\src\include\netif</IncludePath>
354+
<IncludePath>applications;.;CMSIS\CME_M7;..\..\components\CMSIS\Include;drivers;StdPeriph_Driver\inc;..\..\include;..\..\libcpu\arm\cortex-m3;..\..\libcpu\arm\common;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\init;..\..\components\libc\armlibc;..\..\components\net\lwip-1.4.1\src;..\..\components\net\lwip-1.4.1\src\include;..\..\components\net\lwip-1.4.1\src\include\ipv4;..\..\components\net\lwip-1.4.1\src\arch\include;..\..\components\net\lwip-1.4.1\src\include\netif</IncludePath>
370355
</VariousControls>
371356
</Cads>
372357
<Aads>
@@ -378,7 +363,6 @@
378363
<SwStkChk>0</SwStkChk>
379364
<NoWarn>0</NoWarn>
380365
<uSurpInc>0</uSurpInc>
381-
<useXO>0</useXO>
382366
<VariousControls>
383367
<MiscControls></MiscControls>
384368
<Define></Define>
@@ -395,7 +379,6 @@
395379
<useFile>0</useFile>
396380
<TextAddressRange>0x00000000</TextAddressRange>
397381
<DataAddressRange>0x00000000</DataAddressRange>
398-
<pXoBase></pXoBase>
399382
<ScatterFile>CME_M7.sct</ScatterFile>
400383
<IncludeLibs></IncludeLibs>
401384
<IncludeLibsPath></IncludeLibsPath>

0 commit comments

Comments
 (0)