`
kongweile
  • 浏览: 517296 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

S3C6410的启动

    博客分类:
  • ARM
 
阅读更多

废话不多说,去年折腾了一年s3c2440的板子,今年自己又买了一块s3c6410的板子,从今天开始,进行裸机驱动的开发,本文开始第一篇,启动代码的编写,注意,仅仅是启动代码,并不是bootloader,因为只有boot,没有loader。

       第一要明确:CPU上电之后,会从某个固定地址执行指令。ARM结构的CPU从地址0x00000000开始执行指令,MIPS结构的CPU将会从0XBFC00000取第一条指令并执行。(注意,这个地址是CPU的统一编址,需要把存储器件ROM或者flash映射到这个地址上

       第二要知道启动代码需要做那些事情:

                1、异常向量表

                2、禁看门狗,禁中断

                3、设置系统时钟

                4、初始化存储控制器

                5、设置各个模式下的堆栈

                6、跳转到C环境执行

       第三,要知道CPU的七种工作模式:

                 用户模式:程序正常运行的模式,不能直接从用户模式切换到其他模式

                 系统模式:支持操作系统的特权任务,与用户模式类似,但是可以直接切换到其他模式

                 管理模式:供操作系统使用的保护模式,只有在系统复位和软中断响应后,才能进入该模式

                 终止模式:用于虚拟内存和存储器保护的模式,对程序存储器或数据存储器访问失败时,进入此模式

                 未定义模式:只有在未定义指令异常响应时,才进入该模式

                 中断模式:在IRQ(普通中断)响应时,进入该模式

                 快速中断模式:在FIQ(快速中断)响应时,进入该模式。

        以上做一个简要的前提知识介绍,仅仅了解这些还不够,请自行查阅相关资料。下面我们来实现一个简单的boot代码,不懂汇编的,赶快去学 :-(

                 ARM上电后,从地址0x00000000取指并执行,但是从地址0x00000000开始一直到0x0000001c,都是异常向量表的位置,不要问我为什么,因为硬件是这么做的 :-(

                       [0x00000000] b ResetHandler    ;--CPU上电即在0地址执行这句跳转代码

                       [0x00000004] b UndHandler      ;--CPU遇到未定义指令时,跳转到此地址执行

                       [0x00000008] b SWIHandler      ;--CPU遇到软中断时,跳转到此地址执行

                       [0x0000000c] b PaAbort            ;--CPU取指令出错时,跳转到此地址执行

                       [0x00000010] b DaAbort           ;--CPU取数据出错时,跳转到该地址执行

                       [0x00000014] b 0x00000014;   ;--该地址保留,啥叫保留,就是占个位子,不使用....能否省略,写下句代码?答案是不行!

                       [0x00000018] b IRQHandler     ;--CPU碰到中断时,跳转到该地址执行

                       [0x0000001c] b FIQHandler     ;--CPU碰到快速中断时,跳转到该地址执行。

       本文主要写管理模式的代码,其他模式暂时忽略,以后讨论。本文将点亮开发板上的LED4灯,其他三个LED是灭的。(我用的是OK6410的板子)

                        ResetHandler

                                                ldr r0,=WTCON    ;禁止看门狗

                                                ldr r1,=0x0

                                                str r1,[r0]

 

                                                ldr r0,=GPMCON    

                                                ;从地板原理图看出四个LED灯接在GPM接口,那么我们就控制GPMCON寄存器即可,此处把GPMCON的地址写入r0寄存器

                                                ldr r1,=0x111111     ;将数值0x111111

                                                str r1,[r0]                 ;向GPMCON寄存器中写入0x111111直,是的GPM口都作为数据输出口。

                                                ldr r0,=GPMDAT     ;将GPMDAT寄存器地址写入r0

                                                ldr r1,=~(1<<3)       ;向r1寄存器写入二进制 111值

                                                str r1,[r0]                ;向GPMDAT寄存器写入111值,此时可以看到开发板的LED4亮,其他三个LED是灭的

                                                b halt                      ;进入死循环

                        halt

                                                 b halt

                         以下这些代码都是CPU其他工作模式下的代码,本文仅仅是做了一个简单的死循环处理,以后会讨论各种模式的使用方法。

                         HandlerUndef

                                                b HandlerUndef

                         HandlerSWI

                                                b HandlerSWI

                         HandlerPabort

                                                 b HandlerPabort

                         HandlerDabort

                                                 b HandlerDabort

                         HandlerIRQ

                                                 b HandlerIRQ

                         HandlerFIQ

                                                 b HandlerFIQ

          注意,本文代码没有禁中断,没有设置各个模式的堆栈,没有初始化sdram,也没有跳转到C预言执行环境,仅仅是点亮了一盏led灯,是最简单的一个启动代码,在连接选项中要设置Robase 为0x0地址,映像文件入口地址为0x0,映像文件头为startup.o,section为Init。如下图:

             

               

              

              调试方法:使用J-link v8进行调试,首先你得买j-link,Ok6410不带这个仿真器。然后装好驱动Setup_JLinkARM_V410i.zip,按照S3C6410的JLink的调试方法.pdf这个文档配置好开发环境,期间会提示缺少jlinkarm.dll,直接从j-link安装文件夹里把这个文件拷贝过去即可,然后使用axd进行调试。

               源代码下载:最简单的ok6410启动代码,转载请注明出处:燕之威的实验室

               补充说明:这里使用j-link是把代码下载到0x0地址,而0x0地址是片内的ram,然后j-link会接管cpu,将cup的pc寄存器(当前指令执行地址)指向0x0地址,然后执行。要说区别,唯一的区别是上电不能直接启动,因为代码是写在内存里的,掉电就丢失,如果想实现上电就启动,那么我们可以在启动代码中加入nand falsh的驱动,将我们的程序写入nand flash即可,这将在以后讨论 :-)


分享到:
评论

相关推荐

    s3c6410启动模式

    "s3c6410启动模式" S3C6410 是一款 ARM 处理器,由三星公司生产。该处理器支持多种启动模式,包括 NAND flash、NOR flash、OneNAND、MODEM 和 IROM 等。这些启动模式通过外部管脚 OM[4:0] 的拉高拉低来决定是从哪个...

    S3C6410启动模式介绍

    ### S3C6410启动模式深度解析 #### 引言 S3C6410是一款由三星电子设计的高性能嵌入式处理器,基于ARM架构,广泛应用于各种嵌入式系统中。其丰富的启动模式,使得系统设计者能够灵活地选择不同的启动设备和配置,...

    s3c6410启动

    s3c6410启动 时钟 RAM内存

    Uart.rar_s3c6410_s3c6410 uart_s3c6410.inc

    S3C6410的启动过程会从Nandflash中的Boot ROM读取引导代码,然后执行后续的加载和初始化工作。因此,我们的串口驱动程序需要考虑在Nandflash中的存储和执行情况。 总结来说,S3C6410的UART编程涉及到硬件寄存器配置...

    s3c6410裸机及驱动代码

    《S3C6410裸机及驱动代码解析》 S3C6410是一款基于ARM Cortex-A8架构的高性能微处理器,由三星公司生产。它在嵌入式系统领域广泛应用,尤其是在开发板、工业控制、移动设备等领域。本篇文章将详细探讨S3C6410的裸机...

    S3c6410 IROM Boot Spec

    此文档主要介绍了S3C6410内部ROM启动的相关细节和技术要点。 #### 二、S3C6410内部ROM启动机制 **1. 启动流程** - **阶段一:** 在S3C6410启动时,处理器首先执行内置的内部ROM代码。 - **阶段二:** 内部ROM代码...

    UT-S3C6410-linux.rar_6410_S3C6410 BOOT_just for s3c6410_s3c6410

    本篇将深入探讨S3C6410处理器在Linux环境下的开发过程,结合"UT-S3C6410-linux.rar"这个压缩包中的"UT-S3C6410开发板linux使用手册.pdf",我们来详细了解S3C6410的BOOT加载流程、内核配置以及驱动程序开发。...

    S3C6410自带AD驱动

    在嵌入式系统领域,S3C6410是一款基于ARM11架构的高性能处理器,广泛应用于各种嵌入式设备,如智能手机、工业控制、医疗设备等。它集成了模拟数字转换器(ADC),使得系统能够从模拟信号中获取数字数据。本篇将详细...

    S3C6410头文件

    S3C6410是一款基于ARM Cortex-A8内核的高性能微处理器,常用于嵌入式系统设计,特别是移动设备和工业应用。在Windows CE 6.0(简称WinCE)操作系统中进行针对S3C6410的开发时,会涉及到一系列的头文件。这些头文件...

    S3C6410芯片资料

    1. **Bootloader**:S3C6410通常使用U-Boot作为启动加载器,负责初始化硬件、加载操作系统映像。 2. **操作系统支持**:支持Linux、Android等多种操作系统,开发者可以根据需求选择合适的平台进行开发。 3. **驱动...

    S3C6410外部中断设置步骤

    在嵌入式系统开发中,S3C6410是一款广泛应用的ARM9微处理器,具备高效的处理能力和丰富的外设接口。本文将详细介绍如何设置S3C6410的外部中断,以便开发者能够充分利用其硬件中断机制进行系统设计。 首先,S3C6410...

    S3C6410 IROM_SD_EBOOT 启动代码

    【S3C6410 IROM_SD_EBOOT 启动代码详解】 S3C6410是一款基于ARM926EJ-S内核的高性能微处理器,广泛应用于嵌入式系统设计,如智能手机、平板电脑等。该处理器支持多种启动方式,其中包括通过IROM(内部只读存储器)...

    s3c6410裸板源码

    《深入解析s3c6410裸板源码》 在嵌入式系统领域,三星的s3c6410处理器是一款广泛应用的高性能ARM Cortex-A8内核芯片。这款处理器以其强大的处理能力、丰富的外设接口以及相对较低的功耗,广泛应用于各种嵌入式设备...

    LDD6410 S3C6410开发板原理图

    根据提供的信息,我们可以详细解析与"LDD6410 S3C6410开发板原理图"相关的知识点。此文档主要围绕S3C6410开发板的设计原理图展开,下面将从不同角度对这些信息进行深入解读。 ### 一、S3C6410开发板概述 S3C6410是...

    S3C6410 SD卡启动裸机代码,可以从串口下载程序

    《S3C6410 SD卡启动裸机代码详解》 S3C6410是一款基于ARM11架构的高性能微处理器,常用于嵌入式系统开发。本篇文章将详细探讨S3C6410如何通过SD卡启动,并实现从串口下载程序的功能。这种启动方式在无UBOOT支持的...

    S3C6410 datasheet V1.1

    《S3C6410数据手册:深入解析与应用指南》 S3C6410是一款由Samsung公司推出的高性能、低功耗的微处理器,广泛应用于移动设备、嵌入式系统以及消费电子产品中。该处理器基于ARM11架构,提供强大的处理能力和丰富的...

    s3c6410 iROM Booting APPLICATION

    2. **iROM 启动流程**:详细说明S3C6410启动时iROM是如何工作的,包括启动阶段、引导加载程序的作用以及用户代码的加载过程。 3. **配置与设置**:介绍如何配置S3C6410以支持iROM启动模式,包括必要的硬件设置和...

    S3C6410 SD启动操作手册

    ### S3C6410 SD/MMC 启动操作手册 #### 一、概述 本文档主要介绍了如何为S3C6410处理器配置SD/MMC启动环境,并解决了默认掉线错误的问题。S3C6410是一款基于ARM架构的处理器,广泛应用于嵌入式系统开发领域。通过...

Global site tag (gtag.js) - Google Analytics