ARM mini2440裸奔 跑LCD手写代码

发布者:Huanle最新更新时间:2019-10-28 来源: 51hei关键字:ARM  mini2440裸奔  LCD 手机看文章 扫描二维码
随时随地手机看文章

ARM裸奔跑代码,LCD 实现手写功能,(mini2440)裸奔又进了一步,更一步熟悉ARM体系结构

部分源码预览:

;=========================================

; NAME: 2440INIT.S

; DESC: C start up codes

;       Configure memory, ISR ,stacks

;        Initialize C-variables

; HISTORY:

; 2002.02.25:kwtark: ver 0.0

; 2002.03.20:purnnamu: Add some functions for testing STOP,Sleep mode

; 2003.03.14:DonGo: Modified for 2440.

;=========================================


        GET option.inc

        GET memcfg.inc

        GET 2440addr.inc


BIT_SELFREFRESH EQU        (1<<22)


;Pre-defined constants

USERMODE    EQU         0x10

FIQMODE     EQU         0x11

IRQMODE     EQU         0x12

SVCMODE     EQU         0x13

ABORTMODE   EQU         0x17

UNDEFMODE   EQU         0x1b

MODEMASK    EQU         0x1f

NOINT       EQU         0xc0


;The location of stacks

UserStack        EQU        (_STACK_BASEADDRESS-0x3800)        ;0x33ff4800 ~

SVCStack        EQU        (_STACK_BASEADDRESS-0x2800)        ;0x33ff5800 ~

UndefStack        EQU        (_STACK_BASEADDRESS-0x2400)        ;0x33ff5c00 ~

AbortStack        EQU        (_STACK_BASEADDRESS-0x2000)        ;0x33ff6000 ~

IRQStack        EQU        (_STACK_BASEADDRESS-0x1000)        ;0x33ff7000 ~

FIQStack        EQU        (_STACK_BASEADDRESS-0x0)        ;0x33ff8000 ~


;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.

        GBLL    THUMBCODE

        [ {CONFIG} = 16

THUMBCODE SETL  {TRUE}

            CODE32

                |

THUMBCODE SETL  {FALSE}

    ]


                MACRO

        MOV_PC_LR

                [ THUMBCODE

            bx lr

                |

            mov        pc,lr

                ]

        MEND


                MACRO

        MOVEQ_PC_LR

                [ THUMBCODE

        bxeq lr

                |

            moveq pc,lr

                ]

        MEND


                MACRO

$HandlerLabel HANDLER $HandleLabel


$HandlerLabel

        sub        sp,sp,#4        ;decrement sp(to store jump address)

        stmfd        sp!,{r0}        ;PUSH the work register to stack(lr does not push because it return to original address)

        ldr     r0,=$HandleLabel;load the address of HandleXXX to r0

        ldr     r0,[r0]         ;load the contents(service routine start address) of HandleXXX

        str     r0,[sp,#4]      ;store the contents(ISR) of HandleXXX to stack

        ldmfd   sp!,{r0,pc}     ;POP the work register and pc(jump to ISR)

        MEND


        IMPORT  |Image$RO$Base|        ; Base of ROM code

        IMPORT  |Image$RO$Limit|  ; End of ROM code (=start of ROM data)

        IMPORT  |Image$RW$Base|   ; Base of RAM to initialise

        IMPORT  |Image$ZI$Base|   ; Base and limit of area

        IMPORT  |Image$ZI$Limit|  ; to zero initialise


        IMPORT        MMU_SetAsyncBusMode

        IMPORT        MMU_SetFastBusMode        ;


        IMPORT  Main    ; The main entry of mon program


        AREA    Init,CODE,READONLY


        ENTRY

        

        EXPORT        __ENTRY

__ENTRY

ResetEntry

        ;1)The code, which converts to Big-endian, should be in little endian code.

        ;2)The following little endian code will be compiled in Big-Endian mode.

        ;  The code byte order should be changed as the memory bus width.

        ;3)The pseudo instruction,DCD can not be used here because the linker generates error.

        ASSERT        :DEF:ENDIAN_CHANGE

        [ ENDIAN_CHANGE

            ASSERT  :DEF:ENTRY_BUS_WIDTH

            [ ENTRY_BUS_WIDTH=32

                b        ChangeBigEndian            ;DCD 0xea000007

            ]


            [ ENTRY_BUS_WIDTH=16

                andeq        r14,r7,r0,lsl #20   ;DCD 0x0007ea00

            ]


            [ ENTRY_BUS_WIDTH=8

                streq        r0,[r0,-r10,ror #1] ;DCD 0x070000ea

            ]

        |

            b        ResetHandler

    ]

        b        HandlerUndef        ;handler for Undefined mode

        b        HandlerSWI        ;handler for SWI interrupt

        b        HandlerPabort        ;handler for PAbort

        b        HandlerDabort        ;handler for DAbort

        b        .                ;reserved

        b        HandlerIRQ        ;handler for IRQ interrupt

        b        HandlerFIQ        ;handler for FIQ interrupt


;@0x20

        b        EnterPWDN        ; Must be @0x20.

ChangeBigEndian

;@0x24

        [ ENTRY_BUS_WIDTH=32

            DCD        0xee110f10        ;0xee110f10 => mrc p15,0,r0,c1,c0,0

            DCD        0xe3800080        ;0xe3800080 => orr r0,r0,#0x80;  //Big-endian

            DCD        0xee010f10        ;0xee010f10 => mcr p15,0,r0,c1,c0,0

        ]

        [ ENTRY_BUS_WIDTH=16

            DCD 0x0f10ee11

            DCD 0x0080e380

            DCD 0x0f10ee01

        ]

        [ ENTRY_BUS_WIDTH=8

            DCD 0x100f11ee

            DCD 0x800080e3

            DCD 0x100f01ee

    ]

        DCD 0xffffffff  ;swinv 0xffffff is similar with NOP and run well in both endian mode.

        DCD 0xffffffff

        DCD 0xffffffff

        DCD 0xffffffff

        DCD 0xffffffff

        b ResetHandler

        

HandlerFIQ      HANDLER HandleFIQ

HandlerIRQ      HANDLER HandleIRQ

HandlerUndef    HANDLER HandleUndef

HandlerSWI      HANDLER HandleSWI

HandlerDabort   HANDLER HandleDabort

HandlerPabort   HANDLER HandlePabort


IsrIRQ

        sub        sp,sp,#4       ;reserved for PC

        stmfd        sp!,{r8-r9}


        ldr        r9,=INTOFFSET

        ldr        r9,[r9]

        ldr        r8,=HandleEINT0

        add        r8,r8,r9,lsl #2

        ldr        r8,[r8]

        str        r8,[sp,#8]

        ldmfd        sp!,{r8-r9,pc}



        LTORG


;=======

; ENTRY

;=======

ResetHandler

        ldr        r0,=WTCON       ;watch dog disable

[1] [2] [3] [4] [5] [6]
关键字:ARM  mini2440裸奔  LCD 引用地址:ARM mini2440裸奔 跑LCD手写代码

上一篇:arm开关中断汇编接口
下一篇:【嵌入式学习笔记二】烧录制作好的镜像到4412开发板中

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved