LPC1778启动代码分析Word格式.docx
- 文档编号:17215399
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:12
- 大小:193.06KB
LPC1778启动代码分析Word格式.docx
《LPC1778启动代码分析Word格式.docx》由会员分享,可在线阅读,更多相关《LPC1778启动代码分析Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
*ARMSHALLNOT,INANYCIRCUMSTANCES,BELIABLEFORSPECIAL,INCIDENTAL,OR
18;
*CONSEQUENTIALDAMAGES,FORANYREASONWHATSOEVER.
19;
20;
*****************************************************************************/
21
22
23;
<
h>
StackConfiguration
24;
o>
StackSize(inBytes)<
0x0-0xFFFFFFFF:
8>
25;
/h>
26
27Stack_SizeEQU0x00000200
28
29AREASTACK,NOINIT,READWRITE,ALIGN=3
30Stack_MemSPACEStack_Size
31__initial_sp
32
33
34;
HeapConfiguration
35;
HeapSize(inBytes)<
36;
37
38Heap_SizeEQU0x00000400
39
40AREAHEAP,NOINIT,READWRITE,ALIGN=3
41__heap_base
42Heap_MemSPACEHeap_Size
43__heap_limit
44
45
46PRESERVE8
47THUMB
48
49
50;
VectorTableMappedtoAddress0atReset
51
52AREARESET,DATA,READONLY
53EXPORT__Vectors
54
55__VectorsDCD__initial_sp;
TopofStack
56DCDReset_Handler;
ResetHandler
57DCDNMI_Handler;
NMIHandler
58DCDHardFault_Handler;
HardFaultHandler
59DCDMemManage_Handler;
MPUFaultHandler
60DCDBusFault_Handler;
BusFaultHandler
61DCDUsageFault_Handler;
UsageFaultHandler
62DCD0;
Reserved
63DCD0;
64DCD0;
65DCD0;
66DCDSVC_Handler;
SVCallHandler
67DCDDebugMon_Handler;
DebugMonitorHandler
68DCD0;
69DCDPendSV_Handler;
PendSVHandler
70DCDSysTick_Handler;
SysTickHandler
71
72;
ExternalInterrupts
73DCDWDT_IRQHandler;
16:
WatchdogTimer
74DCDTIMER0_IRQHandler;
17:
Timer0
75DCDTIMER1_IRQHandler;
18:
Timer1
76DCDTIMER2_IRQHandler;
19:
Timer2
77DCDTIMER3_IRQHandler;
20:
Timer3
78DCDUART0_IRQHandler;
21:
UART0
79DCDUART1_IRQHandler;
22:
UART1
80DCDUART2_IRQHandler;
23:
UART2
81DCDUART3_IRQHandler;
24:
UART3
82DCDPWM1_IRQHandler;
25:
PWM1
83DCDI2C0_IRQHandler;
26:
I2C0
84DCDI2C1_IRQHandler;
27:
I2C1
85DCDI2C2_IRQHandler;
28:
I2C2
86DCDSPIFI_IRQHandler;
29:
SPIFI
87DCDSSP0_IRQHandler;
30:
SSP0
88DCDSSP1_IRQHandler;
31:
SSP1
89DCDPLL0_IRQHandler;
32:
PLL0Lock(MainPLL)
90DCDRTC_IRQHandler;
33:
RealTimeClock
91DCDEINT0_IRQHandler;
34:
ExternalInterrupt0
92DCDEINT1_IRQHandler;
35:
ExternalInterrupt1
93DCDEINT2_IRQHandler;
36:
ExternalInterrupt2
94DCDEINT3_IRQHandler;
37:
ExternalInterrupt3
95DCDADC_IRQHandler;
38:
A/DConverter
96DCDBOD_IRQHandler;
39:
Brown-OutDetect
97DCDUSB_IRQHandler;
40:
USB
98DCDCAN_IRQHandler;
41:
CAN
99DCDDMA_IRQHandler;
42:
GeneralPurposeDMA
100DCDI2S_IRQHandler;
43:
I2S
101DCDENET_IRQHandler;
44:
Ethernet
102DCDMCI_IRQHandler;
45:
SD/MMCcardI/F
103DCDMCPWM_IRQHandler;
46:
MotorControlPWM
104DCDQEI_IRQHandler;
47:
QuadratureEncoderInterface
105DCDPLL1_IRQHandler;
48:
PLL1Lock(USBPLL)
106DCDUSBActivity_IRQHandler;
49:
USBActivityinterrupttowakeup
107DCDCANActivity_IRQHandler;
50:
CANActivityinterrupttowakeup
108DCDUART4_IRQHandler;
51:
UART4
109DCDSSP2_IRQHandler;
52:
SSP2
110DCDLCD_IRQHandler;
53:
LCD
111DCDGPIO_IRQHandler;
54:
GPIO
112DCDPWM0_IRQHandler;
55:
PWM0
113DCDEEPROM_IRQHandler;
56:
EEPROM
114
115
116IF:
LNOT:
:
DEF:
NO_CRP
117AREA|.ARM.__at_0x02FC|,CODE,READONLY
118CRP_KeyDCD0xFFFFFFFF
119ENDIF
120
121
122AREA|.text|,CODE,READONLY
123
124
125;
126
127Reset_HandlerPROC
128EXPORTReset_Handler[WEAK]
129IMPORTSystemInit
130IMPORT__main
131LDRR0,=SystemInit
132BLXR0
133LDRR0,=__main
134BXR0
135ENDP
136
137
138;
DummyExceptionHandlers(infiniteloopswhichcanbemodified)
139
140NMI_HandlerPROC
141EXPORTNMI_Handler[WEAK]
142B.
143ENDP
144HardFault_Handler\
145PROC
146EXPORTHardFault_Handler[WEAK]
147B.
148ENDP
149MemManage_Handler\
150PROC
151EXPORTMemManage_Handler[WEAK]
152B.
153ENDP
154BusFault_Handler\
155PROC
156EXPORTBusFault_Handler[WEAK]
157B.
158ENDP
159UsageFault_Handler\
160PROC
161EXPORTUsageFault_Handler[WEAK]
162B.
163ENDP
164SVC_HandlerPROC
165EXPORTSVC_Handler[WEAK]
166B.
167ENDP
168DebugMon_Handler\
169PROC
170EXPORTDebugMon_Handler[WEAK]
171B.
172ENDP
173PendSV_HandlerPROC
174EXPORTPendSV_Handler[WEAK]
175B.
176ENDP
177SysTick_HandlerPROC
178EXPORTSysTick_Handler[WEAK]
179B.
180ENDP
181
182Default_HandlerPROC
183
184EXPORTWDT_IRQHandler[WEAK]
185EXPORTTIMER0_IRQHandler[WEAK]
186EXPORTTIMER1_IRQHandler[WEAK]
187EXPORTTIMER2_IRQHandler[WEAK]
188EXPORTTIMER3_IRQHandler[WEAK]
189EXPORTUART0_IRQHandler[WEAK]
190EXPORTUART1_IRQHandler[WEAK]
191EXPORTUART2_IRQHandler[WEAK]
192EXPORTUART3_IRQHandler[WEAK]
193EXPORTPWM1_IRQHandler[WEAK]
194EXPORTI2C0_IRQHandler[WEAK]
195EXPORTI2C1_IRQHandler[WEAK]
196EXPORTI2C2_IRQHandler[WEAK]
197EXPORTSPIFI_IRQHandler[WEAK]
198EXPORTSSP0_IRQHandler[WEAK]
199EXPORTSSP1_IRQHandler[WEAK]
200EXPORTPLL0_IRQHandler[WEAK]
201EXPORTRTC_IRQHandler[WEAK]
202EXPORTEINT0_IRQHandler[WEAK]
203EXPORTEINT1_IRQHandler[WEAK]
204EXPORTEINT2_IRQHandler[WEAK]
205EXPORTEINT3_IRQHandler[WEAK]
206EXPORTADC_IRQHandler[WEAK]
207EXPORTBOD_IRQHandler[WEAK]
208EXPORTUSB_IRQHandler[WEAK]
209EXPORTCAN_IRQHandler[WEAK]
210EXPORTDMA_IRQHandler[WEAK]
211EXPORTI2S_IRQHandler[WEAK]
212EXPORTENET_IRQHandler[WEAK]
213EXPORTMCI_IRQHandler[WEAK]
214EXPORTMCPWM_IRQHandler[WEAK]
215EXPORTQEI_IRQHandler[WEAK]
216EXPORTPLL1_IRQHandler[WEAK]
217EXPORTUSBActivity_IRQHandler[WEAK]
218EXPORTCANActivity_IRQHandler[WEAK]
219EXPORTUART4_IRQHandler[WEAK]
220EXPORTSSP2_IRQHandler[WEAK]
221EXPORTLCD_IRQHandler[WEAK]
222EXPORTGPIO_IRQHandler[WEAK]
223EXPORTPWM0_IRQHandler[WEAK]
224EXPORTEEPROM_IRQHandler[WEAK]
225
226WDT_IRQHandler
227TIMER0_IRQHandler
228TIMER1_IRQHandler
229TIMER2_IRQHandler
230TIMER3_IRQHandler
231UART0_IRQHandler
232UART1_IRQHandler
233UART2_IRQHandler
234UART3_IRQHandler
235PWM1_IRQHandler
236I2C0_IRQHandler
237I2C1_IRQHandler
238I2C2_IRQHandler
239SPIFI_IRQHandler
240SSP0_IRQHandler
241SSP1_IRQHandler
242PLL0_IRQHandler
243RTC_IRQHandler
244EINT0_IRQHandler
245EINT1_IRQHandler
246EINT2_IRQHandler
247EINT3_IRQHandler
248ADC_IRQHandler
249BOD_IRQHandler
250USB_IRQHandler
251CAN_IRQHandler
252DMA_IRQHandler
253I2S_IRQHandler
254ENET_IRQHandler
255MCI_IRQHandler
256MCPWM_IRQHandler
257QEI_IRQHandler
258PLL1_IRQHandler
259USBActivity_IRQHandler
260CANActivity_IRQHandler
261UART4_IRQHandler
262SSP2_IRQHandler
263LCD_IRQHandler
264GPIO_IRQHandler
265PWM0_IRQHandler
266EEPROM_IRQHandler
267
268B.
269
270ENDP
271
272
273ALIGN
274
275
276;
UserInitialStack&
Heap
277
278IF:
__MICROLIB
279
280EXPORT__initial_sp
281EXPORT__heap_base
282EXPORT__heap_limit
283
284ELSE
285
286IMPORT__use_two_region_memory
287EXPORT__user_initial_stackheap
288__user_initial_stackheap
289
290LDRR0,=Heap_Mem
291LDRR1,=(Stack_Mem+Stack_Size)
292LDRR2,=(Heap_Mem+Heap_Size)
293LDRR3,=Stack_Mem
294BXLR
295
296ALIGN
297
298ENDIF
299
300
301END
程序完成如下内容的工作:
开辟一块大小为Stack_Size的栈空间;
标号__initial_sp指向栈顶位置;
定义堆空间大小为Heap_Size;
建立中断向量表Vectors,cortex-M3规定起始地址必须存放栈顶地址即__initial_sp,紧接着存放复位入口地址,这样内核复位后就会自动从起始地址的下32位取出复位地址执行复位中断服务函数。
Reset_Handler复位中断函数中先EXPORT声明Reset_Handler的全局性,然后分别执行外部的函数SystemInit和__main。
下面对汇编程序中的几个关键字做说明:
AREA伪指令:
用于定义代码段和数据段,后跟属性标号。
其中“READWRITE”表示可读写,“READONLY”只读属性。
根据LPC1788的数据手册描述的存储介质,可知可读写段保持在SRAM区,起始地址为0x10000000,代码中的堆栈保存在SRAM空间。
只读段保存在Flash区,起始地址为0x00000000,代码中的中断向量表保存在Flash空间。
因此可以总结出,在0x00000000存放的是栈顶的地址__initial_sp(即0x10000200),在0x00000004存放的是Reset_Handler的地址。
图1:
LPC1788地址映射
图2:
debug中0地址的值0x10000200即栈顶地址,0x00000004地址值为0x000000F9(看反汇编可知该值即Reset_Handler的入口如下图)。
DCD指令:
开辟内存空间,中断向量表建立中使用相当于C语言中的函数指针,每个成员都是函数指针,指向各个中断服务函数。
自此分析了LPC1788的启动,主要包括堆栈初始化,和中断向量表的初始化。
LPC1788有内部Flash,所以上点从内部Flash启动,内部Flash的起始地址为0x00000000,存放栈顶的地址0x10000200。
0x00000004存放复位中断的入口地址。
LPC1788复位后,从0x00000004取出复位入口地址,执行中断复位函数,从而跳转到SystemInit和mainC语言函数执行。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LPC1778 启动 代码 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)