历史上的今天
返回首页

历史上的今天

今天是:2025年03月04日(星期二)

正在发生

2020年03月04日 | LPC2138 startup.s

2020-03-04 来源:eefocus

Mode_USR        EQU     0x10
Mode_FIQ        EQU     0x11
Mode_IRQ        EQU     0x12
Mode_SVC        EQU     0x13
Mode_ABT        EQU     0x17
Mode_UND        EQU     0x1B
Mode_SYS        EQU     0x1F

;这里here@@@!!!是不是只要把I_Bit写成00就行了哦?还是上面的模式??。。。其实我都改了。。可是一个一个式都木有效果哦。,会不会是改错了呢?
I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled


;//  Stack Configuration (Stack Sizes in Bytes)
;//    Undefined Mode      <0x0-0xFFFFFFFF:8>
;//    Supervisor Mode     <0x0-0xFFFFFFFF:8>
;//    Abort Mode          <0x0-0xFFFFFFFF:8>
;//    Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
;//    Interrupt Mode      <0x0-0xFFFFFFFF:8>
;//    User/System Mode    <0x0-0xFFFFFFFF:8>
;// 


UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000008
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000080
USR_Stack_Size  EQU     0x00000400

ISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + 
                         FIQ_Stack_Size + IRQ_Stack_Size)

                AREA    STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem       SPACE   USR_Stack_Size
__initial_sp    SPACE   ISR_Stack_Size

Stack_Top


;//  Heap Configuration
;//     Heap Size (in Bytes) <0x0-0xFFFFFFFF>
;// 


Heap_Size       EQU     0x00000000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit



Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address 
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler


; Reset Handler

                EXPORT  Reset_Handler
Reset_Handler   


; Setup External Memory Pins
                IF      :DEF:EXTERNAL_MODE
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
                ENDIF


; Setup External Memory Controller
                IF      EMC_SETUP <> 0
                LDR     R0, =EMC_BASE

                IF      BCFG0_SETUP <> 0
                LDR     R1, =BCFG0_Val
                STR     R1, [R0, #BCFG0_OFS]
                ENDIF

                IF      BCFG1_SETUP <> 0
                LDR     R1, =BCFG1_Val
                STR     R1, [R0, #BCFG1_OFS]
                ENDIF

                IF      BCFG2_SETUP <> 0
                LDR     R1, =BCFG2_Val
                STR     R1, [R0, #BCFG2_OFS]
                ENDIF

                IF      BCFG3_SETUP <> 0
                LDR     R1, =BCFG3_Val
                STR     R1, [R0, #BCFG3_OFS]
                ENDIF

                ENDIF   ; EMC_SETUP


; Setup VPBDIV
                IF      VPBDIV_SETUP <> 0
                LDR     R0, =VPBDIV
                LDR     R1, =VPBDIV_Val
                STR     R1, [R0]
                ENDIF


; Setup PLL
                IF      PLL_SETUP <> 0
                LDR     R0, =PLL_BASE
                MOV     R1, #0xAA
                MOV     R2, #0x55

;  Configure and Enable PLL
                MOV     R3, #PLLCFG_Val
                STR     R3, [R0, #PLLCFG_OFS] 
                MOV     R3, #PLLCON_PLLE
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]

;  Wait until PLL Locked
PLL_Loop        LDR     R3, [R0, #PLLSTAT_OFS]
                ANDS    R3, R3, #PLLSTAT_PLOCK
                BEQ     PLL_Loop

;  Switch to PLL Clock
                MOV     R3, #(PLLCON_PLLE:OR:PLLCON_PLLC)
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]
                ENDIF   ; PLL_SETUP


; Setup MAM
                IF      MAM_SETUP <> 0
                LDR     R0, =MAM_BASE
                MOV     R1, #MAMTIM_Val
                STR     R1, [R0, #MAMTIM_OFS] 
                MOV     R1, #MAMCR_Val
                STR     R1, [R0, #MAMCR_OFS] 
                ENDIF   ; MAM_SETUP


; Memory Mapping (when Interrupt Vectors are in RAM)
MEMMAP          EQU     0xE01FC040      ; Memory Mapping Control
                IF      :DEF:REMAP
                LDR     R0, =MEMMAP
                IF      :DEF:EXTMEM_MODE
                MOV     R1, #3
                ELIF    :DEF:RAM_MODE
                MOV     R1, #2
                ELSE
                MOV     R1, #1
                ENDIF
                STR     R1, [R0]
                ENDIF


; Initialise Interrupt System
;  ...


; Setup Stack for each mode

                LDR     R0, =Stack_Top

;  Enter Undefined Instruction Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #UND_Stack_Size

;  Enter Abort Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #ABT_Stack_Size

;  Enter FIQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #FIQ_Stack_Size

;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #IRQ_Stack_Size

;  Enter Supervisor Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #SVC_Stack_Size

;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR
                IF      :DEF:__MICROLIB

                EXPORT __initial_sp

                ELSE

                MOV     SP, R0
                SUB     SL, SP, #USR_Stack_Size

                ENDIF


; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0


                IF      :DEF:__MICROLIB

                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE
; User Initial Stack & Heap
                AREA    |.text|, CODE, READONLY

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem +      Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
                ENDIF


                END

推荐阅读

史海拾趣

ELANTEC (Renesas )公司的发展小趣事

Renesas Electronics的前身可以追溯到1958年,当时日立制作所成立了半导体部门。随着技术的不断进步和市场的扩大,该部门逐渐发展壮大,成为日立公司内的一个重要业务部门。进入20世纪90年代,随着半导体市场的竞争加剧,日立公司决定将半导体业务独立出来,以便更加灵活地应对市场变化。1999年,日立半导体部门正式更名为ELANTEC,开始了独立发展的道路。

Amplitronix LLC公司的发展小趣事

在快速发展的同时,Amplitronix LLC也积极承担社会责任,关注绿色环保。他们投入大量资源研发环保型电子产品,减少生产过程中的污染排放。同时,公司也积极参与公益活动,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

这些故事旨在展示Amplitronix LLC公司在不同阶段的发展过程和成就,但并非基于真实事件。实际的Amplitronix LLC公司的发展历程可能有所不同,这些故事仅为虚构示例,供您参考。

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

随着物联网市场的快速发展,Dialog Semiconductor积极布局物联网领域。公司推出了一系列物联网相关的产品和解决方案,包括蓝牙和Wi-Fi芯片、传感器等。这些产品和解决方案能够满足物联网设备对低功耗、高可靠性通信的需求,为物联网市场的发展提供了有力支持。Dialog Semiconductor的前瞻性布局使其在物联网市场中占据了重要位置。

Cyrix Corp公司的发展小趣事

Cyrix Corp公司成立于1988年,由Jerry Rogers和Tom Brightman创立。这两位创始人都是德州仪器的杰出思想家,他们雄心勃勃地希望挑战当时的芯片巨头英特尔。Cyrix的起步产品是高速x87数学协处理器,其性能比英特尔同类产品高出约50%,同时价格更为亲民。这一策略迅速赢得了市场的认可,Cyrix开始在芯片市场上崭露头角。

联智(Celfras)公司的发展小趣事

联智的半导体集成电路芯片研发及产业化项目是其发展历程中的又一重要里程碑。该项目总投资高达20亿元,分两期建设。一期项目将建设半导体集成电路模拟芯片封测生产线,预计年产量可达1.5亿颗。二期项目将研发更高功率有线无线融合一体化电源管理芯片和新一代A4WP远距离无线充电芯,同时布局物联网IoT芯片市场。这一项目的实施将进一步提升联智的技术实力和市场竞争力。

EMI Filter Company公司的发展小趣事

Kemet公司在EMI滤波器领域也有着一席之地。他们致力于研发符合环保标准的EMI滤波器。随着全球对环保问题的日益重视,Kemet看到了绿色环保EMI滤波器的巨大潜力。他们采用环保材料和无铅工艺,生产出了符合RoHS标准的EMI滤波器。这些产品不仅性能稳定,而且对环境友好,赢得了众多环保意识强烈的客户的青睐。

问答坊 | AI 解惑

0947@52RD_高通各芯片.pdf

0947@52RD_高通各芯片.pdf…

查看全部问答>

偶得共享(续)

在网上,再次很偶然得到了一个FLASH: Panasonic Power Management MOSFET Product Training Module. This module……(Flash上都有), 这是从实用的和产品介绍的角度来介绍MOSFET的,觉得挺好。虽然用英语,但画面下部就是讲座的“台 ...…

查看全部问答>

wince 5.0 toolbar 怎么移动,和显示大图标?

C#写了智能应用程序,用了TOOLBAR控件,怎么不能移动,跟菜单重合在一起,也不能显示大图标,在设备里只显示一点图标,大部分被截了,我怎么才能移动改变它的大小呢?谢谢!…

查看全部问答>

各个商家的ARM架构的优缺点

瑞萨、飞思卡尔、Microchip、NEC、Atmel等等这些MCU大鳄都拥有自己的ARM架构。如今TI也有自己的架构,而且强劲地发展。 请问,这些MCU大鳄们的ARM架构是怎么样的?其各自的优缺点是什么? 那位达人可否概况下,谢谢…

查看全部问答>

我对c8051 pic msp430的比较,还望大虾们给予指正

最近我对三种单片机进行了一些了解,对三种单片机的性能进行了对比,希望各位大家给予指导,看我说的对吗? 1、PIC的特点是不进行简单的累加,他根据内部资源的多少,有120多中型号,而且具有向下兼容性。C8051和MSP430这点相对PIC差了一点。 2、 ...…

查看全部问答>

【设计工具】独家首发《xilinx PlanAhead进行FPGA设计》官方讲座

PlanAhead是xilinx新一代FPGA工程设计工具,它不仅具有ISE所具备的全部功能, 而且增强了对设计的分析能力。是xilinx重点推荐的下一代FPGA开发软件。本文是最新的PlanAhead使用介绍讲演稿,希望对大家有用处。   …

查看全部问答>

【项目外包】256信道语音模块

256信道语音模块 项目预算:¥ 15,000~20,000 开发周期:60天 项目分类: 系统开发件 竞标要求: 项目标签: 无线射频 语音传输 ...…

查看全部问答>

mos管并联有什么要求吗

hello!哪位哥哥姐姐告诉我mos管并联有什么要求吗?在pfc 电路中并联后就坏了,不知道什么原因…

查看全部问答>

求助:F28027的cmd文件中的“>>”和“|”

.cinit              : > FLASHA | FLASHC | FLASHD,       PAGE = 0    .pinit              : > FLASHA ...…

查看全部问答>

msp430中断问题

当端口发生中断的时候,怎么确定程序进入了哪个中断程序,我在P1.4按下开关之后,程序进入了ISR(CC2520_IRQ, cc2520_port1_interrupt)这个中断,为什么不是ISR(PORT1, irq_p1)中断函数,源程序中写的是ISR(PORT2, irq_p2),因为我开关接在P1.4所以 ...…

查看全部问答>