ARM 启动代码笔记

发布者:sky0001最新更新时间:2020-01-18 来源: eefocus关键字:ARM  启动代码  存储器 手机看文章 扫描二维码
随时随地手机看文章

1、汇编启动代码之看门狗

    看门狗其实就是一个定时器,硬件上就是SOC内部的一个内部外设

    看门狗不用分析原理图,

    关键性操作寄存器

    WTCON(xE270_0000) bit5 是开门狗的开关  1代表开,0代表关


2、汇编写启动代码之设置栈和调用C语言1

   1、C语言运行需要和栈的意义

      “C语言运行需要” 需要一定的条件,这些条件都是由汇编提供的。

      C语言运行需要栈

      栈的特点:自动进入,自动退出,C语言的局部变量,都是在栈中运行的。

      如果我们汇编部分没有给C设置 合理的栈地址,那么C语言中的局部变量地址就会螺孔,整个程序就死掉了。


   2、CPU模式各模式下的栈

      每种模式下都有自己独立的sp寄存器(sp),为什么这么设计?

      如果各个模式都使用用一个寄存器SP,那么就意味做成个程序都是一个栈,如果你的应用程序一旦出错,(譬如栈溢出),就会连累操作系统的栈。


      解决方案,各个模式下使用不同的栈,操作内核使用自己的栈,每个应用程序也使用自己独立的栈,这样各设置各的,一个损坏不会连累其他。

      

      系统复位后,默认是进入SVC模式

      如何访问SVC模式下的栈?

        先将模式设置为SVC,再直接操作SP。


   3、查阅文档并设置栈指针至合法位置

        栈必须是当前可用的一段内存地址

        当前CPU刚复位,外部SRAM尚未初始化,目前可用内存只有内部的SRAM。(因为他不需要初始化即可使用),

        SVC Stack 1.5k D0037780---D0037D80

        栈有4中:

            满减栈

            满曾栈

            满栈: 进栈:先移动指针,再存 出栈:先出数据,再移动指针

            空减栈

            空曾栈 :进栈:先指针向下移动,再存 处栈:指针先上移动

            在ARM中,ATPCS(ARM关于程序应该怎么实现的规范)要求使用满减栈

            结iROM_application_note 中的menory map


    4、汇编语言和c 语言的互相调用

            吧 cfunction

3、    汇编写启动代码之设置栈和调用C语言2

     1、C函数的表写和被汇编语言调用

     在工程中新建并且添加一个C语言的源文件,

4、 汇编写启动代码之开启icache

    1、什么是cache ,有什么用

       cache是一种内存,叫高速缓存

       从容量来说 CPU < 寄存器 < cache < DDR

       从速度来说 CPU > 寄存器 > cache > DDR

       210内部有32kB ichche 和 32KB dcache ,ichche 是用来缓存指令的;dcache 是用来缓存数据的。

       CPU是不能读内存的,需要通过寄存器中转。

    2、iROM中BL0对cache操作

        mrc p15,0,r0,c1,c0,0;            // 读出cp15的c1到r0中

        //bic r0, r0, #(1<<12)            // bit12 置0  关icache

        orr r0, r0, #(1<<12)            // bit12 置1  开icache

        mcr p15,0,r0,c1,c0,0;

关键字:ARM  启动代码  存储器 引用地址:ARM 启动代码笔记

上一篇:ARM中B __Main和B Main的区别
下一篇:ARM裸机驱动中的main函数调用前的准备工作

推荐阅读最新更新时间:2024-11-04 11:17

ARM 中断--IRQ and FIQ配置--外部配置
中断分为外部中断和定时器中断; 中断源都是有一个触发条件,条件满足就会产生中断。不同的中断源触发条件不一样 ARM中中断分为两种:FIQ(fast interrupt request)快速中断请求,IRQ(interrupt requrest)一般的中断请求 为什么FIQ比IRQ的中断响应更快? 在ARM体系中,FIQ的优先级比IRQ高,FIQ优先级为3,IRQ优先级为4,FIQ和IRQ是中断的两种不同类型,FIQ比IRQ有更多的分组寄存器,在中断响应的时候,就不要入栈出栈寄存器。 S5PV210系统中的中断分层: 外部中断/定时器 - 中断控制器 - 内核 VECTORED INTERRUPT CO
[单片机]
ARM汇编编程基础之六-其它寻址模式与其它指令
现在我们已经掌握了所有知识,可以编写简单的ARM汇编程序,但如果要编写较为复杂的ARM程序,就必须掌握更多的寻址模式和指令,这就是本文的重点所在。 我们在 基本寻址模式与基本指令 一文中学习了最常用的3种寻址方式。下面介绍其它寻址方式。 1、基址寻址 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: LDR R1, R2的值+0x0C形成内存地址,读取内存中该地址上的内容,放入R1 其它额外需要了解的内容: 零偏移。 如:LDR R0, 前索引偏移。 如:LDR R0, !,表示将R1的
[单片机]
微捷码Talus平台实现世界最快的低功耗处理器核心
芯片设计解决方案供应商微捷码(Magma®)设计自动化有限公司(纳斯达克代码:LAVA)日前宣布,高速低功耗处理器提供商Intrinsity公司通过使用Talus® Vortex和Talus Power Pro以低功耗工艺实现了世界速度最快的ARM® Cortex™ A8处理器核心。微捷码的开放式架构IC实现系统不仅为Intrinsity提供了所需的定制流程支持和被认可的时序收敛能力,同时还满足了其低功耗需求。鉴于此次的成功,Intrinsity已升级使用微捷码的最新版本产品Talus 1.1。 这款处理器核心在三星(Samsung)公司的45纳米(nm)低功耗低漏电工艺技术上进行实施,主要用于标准移动片上系统(So
[手机便携]
STM32编程之软件模拟IIC对24C02存储器读写操作
1、主程序 #include stm32f10x_conf.h #include led.h #include key.h #include usart.h #include lcd.h #include 24cxx.h #include myiic.h #include delay.h u8 tabel = write data is:0 1 2 3 4 5 6 7 8 9 ; /* 程序功能:STM32实现24C02读写操作 当按下KEY1时,向24C02写入数组中的数据; 当按下KEY2时,从24C02中读出数据到数组。 用LCD液晶显示操作过程; 用串口显示写入和读
[单片机]
概述十一种基于ARM的嵌入式操作系统
  嵌入式操作系统(Embedded OperaTIon System,EOS)是指用于嵌入式系统的操作系统。嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。嵌入式操作系统是负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能,是一种用途广泛的系统软件。   嵌入式LINUX   嵌入式Linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。Linux做嵌入式的优势,首先,Linux是开放源代码;其次,Linux的内核小、效率高,可以定制,其系统内核最小只有约134KB;第三,Linu
[单片机]
ARM7加速度数据采集系统设计
引言 加速度传感器一直是加速度测试中的重要元件。随着微加速度计的应用越来越广泛,对于微加速度计的数据信号采集和存储变得极为重要。传统的数据采集方法多数是采用单片机完成的,编程简单、控制灵活,但控制周期长、速度慢,特别是对高速转换的数据来说,单片机的速度极大地限制了数据传输速度。 目前,嵌入式系统的应用已经进入到一个高低并行发展的阶段。ARM处理器凭借体积小、功耗低、集成度高、硬件调试方便和操作系统可移植等优点,获得广泛的应用。本文采用基于ARM7TDMI-S核的32位微处理器AT91SAM7X256为控制核心,利用其内部自带的A/D转换器对采集到的加速度值进行转换。 本文应用Model 1221单轴MEMS加速度计,输
[嵌入式]
ARM微处理器的指令集概述(五)—— LDR和ADR分析
ADR的定义为:小范围的地址读取伪指令,ADR指令将基于PC相对偏移的地址值读取到寄存器中,在编译源程序时ADR伪指令被编译器 替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,刚产生错误。 在如上的定义中,有两个关键信息:⑴将基于PC相对偏移的地址值读取到寄存器中;⑵被编译器替换成一条合适的指令。ADR指令只能将地址值读取到寄存器中,而不能是其它的立即数,并用只能用一条指令。 如果在汇编程序中使用ADR R1,ResetHandel语句,其中ResetHandel是汇编程序中的一个标签,此条伪指令的作用是把ResetHandel标签所在的指令地址 读取到寄存器
[单片机]
ch32和gd32哪个好用?
Ch32和Gd32是两个比较常见的芯片系列,都是基于ARM Cortex-M3内核设计的,因此具有类似的特点和性能。在选择使用哪个芯片时,需要根据具体的项目需求和开发难度加以考虑。 首先,我们来简单介绍一下这两个芯片系列的特点。Ch32是中国厂商江苏长鹰半导体公司生产的一款芯片,可以实现信号的高速处理和计算机视觉应用,广泛应用于机器人、智能家居、智能驾驶等领域。Gd32则是由中国厂商北京兆易创新科技有限公司生产的芯片,主要应用于工控、嵌入式、智能家居、智能穿戴等领域。 在开发难度方面,刚开始学习嵌入式开发的初学者可能会觉得Gd32更加好用,因为它有完善的开发工具链和丰富的文档资料,对于初学者来说更加友好。Ch32的开发工具链和文档
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习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