历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2019年10月28日 | ARM mini2440裸奔 跑LCD手写代码

2019-10-28 来源:51hei

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

推荐阅读

史海拾趣

EFINIX公司的发展小趣事

随着中国电子行业的快速发展,EFINIX公司看到了巨大的市场潜力。公司积极拓展中国市场,与中国本土企业展开合作,推动Quantum™可编程加速器技术和Trion FPGA产品在中国市场的应用。EFINIX公司的产品和服务得到了中国客户的广泛认可,为中国电子行业的发展做出了积极贡献。

Digilent公司的发展小趣事

DIALIGHT的故事始于1938年的纽约布鲁克林,当时公司专注于为飞机生产仪表板灯。随着LED技术的兴起,1971年,也就是LED推出仅一年后,DIALIGHT便推出了首款LED产品,标志着公司正式涉足LED照明领域。从此,DIALIGHT凭借其卓越的技术实力和创新能力,彻底改变了LED在交通控制、指示灯、结构塔和工业场所等领域的应用方式。

3D PLUS公司的发展小趣事

随着技术的不断发展和市场的不断扩大,3D PLUS公司开始将目光投向国际市场。公司积极参加国际电子行业的展会和交流活动,与国际同行进行技术合作和交流,不断提升自身的技术水平和国际影响力。同时,公司还积极拓展海外销售渠道,将3D技术和产品推向全球市场,为全球客户提供高效、便捷的3D解决方案。这些努力不仅提升了公司在国际市场的知名度,也为公司的长期发展奠定了坚实的基础。

以上五个故事均基于3D PLUS公司在电子行业中的实际发展情况编写,旨在客观描述公司在3D技术领域的成长与进步。

General Transistor Corp公司的发展小趣事

随着技术的不断进步,GTC意识到仅仅作为分销商已无法满足市场需求。于是,公司开始逐步涉足电子元器件的生产领域,专注于研发和生产具有自主知识产权的产品。通过持续的技术创新和研发投入,GTC成功推出了一系列高性能的晶体管、集成电路等新产品,进一步丰富了其产品线。这些产品不仅在国内市场受到好评,还逐渐走向国际市场。

DSP Group Inc公司的发展小趣事

DSP Group Inc公司成立于1987年,早期专注于数字信号处理(DSP)技术的研发。在成立之初,公司便认识到了DSP技术在语音处理、音频编解码等领域的巨大潜力。通过不断的技术创新和研发投入,DSP Group逐渐在DSP领域树立了领先地位,为后续的发展奠定了坚实的基础。

Dialog公司的发展小趣事

到了1981年,Dialog公司从洛克希德导弹航空公司中独立出来,成为了一个子公司,并开始独立经营。在独立发展的初期,Dialog公司继续专注于通信技术的研发,并逐渐将业务范围拓展到了个人便携式应用、低功耗短程无线应用以及LED固态照明、显示和汽车应用等领域。

问答坊 | AI 解惑

在WINCE下如何用SPI一次接收16位數據?

各俠大俠:   我想在WINCE下實現用SPI一次接收16位數據,因為S3C2440的SPI是8位的,而我的設備輸出是16位的,如何寫相應的驅動?用中斷還是查詢?歡迎指教.…

查看全部问答>

用pb5.0编cepc:x86时报的错误~~!

E:\\WINCE500\\PBWorkspaces\\win_ce_pc\\WINCE500\\CEPC_x86\\cesysgen\\sdk\\lib\\x86\\retail\\coredll.lib E:\\WINCE500\\public\\common\\oak\\lib\\x86\\retail\\wzctool.lib E:\\WINCE500\\PBWorkspaces\\win_ce_pc\\WINCE500\\CEPC_x86\\ce ...…

查看全部问答>

时序图学习

大家有么有关于怎么学习看时序图的资料没有啊?本人搞不懂呢,5555555,希望赐教。。。…

查看全部问答>

STM32F200,STM32F150,STM32F100

STM32F200 on the ST roadmap …

查看全部问答>

C++项目中的extern "C" {}

引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码:#ifdef __cplusplus extern \"C\" { #endif /*...*/ #ifdef __cplusplus } #endif 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从 ...…

查看全部问答>

谁有F5438的数据手册?

谁有F5438的数据手册?型号手册和数据手册一样吗,不一样的话,麻烦再发一份型号手册。 不是用户指南 万分感谢了~…

查看全部问答>

为什么用CCS5.1自己编写的头文件打不开??

我用CCS5.1环境中编写了一段12864的头文件,没有显示错误,但是就是在调用的时候打不开!请问高手们这是什么问题呢?…

查看全部问答>

AM3359

刚弄到AM3359的开发板,有共同开发的吗,多多交流。…

查看全部问答>

PWM桥驱动电机,TI和ST比较

之前一直用L6205D的H桥驱动电机,ST的话,一组线圈,由2个IN脚控制,那么一个脚接低电平,另外一个脚给PWM,容易理解电流的转动方向,要反向的话,低电平信号和PWM信号反过来输入就可以了 IN1 IN2 OUT1 OUT2 H  L   Vs  ...…

查看全部问答>