ARM7——LPC2xxx小总结
1. 7种工作模式:
fiq/irq/abt/und/sys/usr/svc。通过"MSR cpsr_c,#0xdx"切换。上电时进入svc模式。svc和usr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr不可以。各模式下有自己的堆栈。要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入usr模式。
2. Prefetch Abort和Data Abort模式:
Prefetch Abort通常会发生在自修改指令之后。而Data Abort发生于向无效内存中取操作数时,通常是数据指针越过边界了。如果在scatter文件中不指定边界,若编译时内存分配超过了实际物理内存,一定会有Data Abort或Prefetch Abort发生。 Data Abort这个异常会经常出现,要注意。
3. 存储器映射:
0-1G(0x0000,0000 - 0x3fff,ffff): 片内Flash.
1-2G(0x4000,0000 - 0x7fff,ffff): 片内RAM.
2-3.5G(0x8000,0000 - 0xbfff,ffff - 0xdfff,ffff): 片外存储器。
3.5G- 3.75G(0xe000,0000 - 0xefff,ffff): VPB外设。
3.75G- 4G(0xf000,0000 - 0xffff,ffff): AHB外设。
虽然ARM7的寻址空间为4G,但是LPC2200系列只提供A0~A23总共16M的地址。片选信号CS0 - CS3是A24和A25的译码输出,将片外存储区0x8000,0000 - 0x83ff,ffff划分为bank0 - bank3,共16M*4=64M. 这4个bank可以被分别配置为8/16/32位总线宽度。复位时,bank0的总线宽度由Boot1:0引脚决定, bank1为32位,bank2为16位,bank3为8位。
4. Boot Block
LPC2114/2214的BootBlock被固化在最高的Flash块中,运行时被映射到0x7FFF,E000 - 0x7FFFF,FFFF的区域。而LPC2210没有片内Flash,但它有8K片内ROM存储了BootBlock,也被映射到0x7FFF,E000处。BootBlock是上电以后芯片最早自动运行的程序,被固化在LPC22XX中,相当于LPC22xx自身的bootloader。
5. 分散加载描述文件.scf的设置
Metrowerks Code Warrior V1.2的"Edit->Debug In ExRAM Settings",然后在"Linker->ARM Linker"的Output页中,选中Scatter选项。在Scatter的编辑框中选择写好的.scf文件。(Scatter-Loading description file).
简单应用时可以不写.scf文件。而在"Output"页中选择"Simple".然后填写"RO Base"和"RW Base"的起始地址。在"Lay Out"页中,填写Object/Symble: Startup.o, Section: Start.编写启动文件:Startup.s.在"Option"页里的"Image Entry Point"填入起始地址。
在Scatter文件中最好每一个Region都加一个Maximum参数,这样当编译时如果实际使用的空间大于Maximum Size,会有Error:16220E: Excution region xxx size (xxx bytes) exceeds limit (xx bytes)。如果地址有重复,会有Error: 16221E: Excution region xxx overlaps with excution region xxx。前一个Region的首地址 + Maximum > 后一个Region的首地址时不一定有Error。只有当一分配的内存出现覆盖时才会有Error。
mem_c.scf,是使程序在FLASH运行
mem_a.scf,使程序在FLASH运行,并且加密。
mem_b.scf,使程序在RAM中运行
6. LPC2106/2105/2104 将ARM7TDMI-S 配置为小端(little-endian)字节顺序。
7. LPC2131基于ARM7TDMI-S核,采用冯.诺依曼结构,数据和指令混合编址,只有加载,存储和交换指令可以访问存储器中的数据。
ARM7——LPC2xxx小总结相关推荐
- 【经典】FPGA三国志
编者按:本文的原作者是Altera一位员工,文中观点虽不免偏颇,但非常有助于对整个FPGA技术有个全面的了解.(本人是一个普通的出版工作者,如果希望交流加微信:185232201) FPGA三国志-第 ...
- 【非常经典】FPGA三国志 [转载]
编者按:本文的原作者是Altera一位员工,文中观点虽不免偏颇,但非常有助于对整个FPGA技术有个全面的了解. FPGA三国志-第一篇/不可不看的故事 CPLD的时代 我在12年前,偶然接触P ...
- ARM7(LPC2xxx)芯片的小总结
7种工作模式: fiq/irq/abt/und/sys/usr/svc.通过"MSR cpsr_c,#0xdx"切换.上电时进入svc模式. svc和usr的区别是:svc可以通过 ...
- ARM7与ARM9的区别
本文是写给准备学习ARM技术,而又没想好要学ARM7还是ARM9或者对ARM7与ARM9的区别不是很了解的初学者.希望本文对你们有点用处. 由于职业的关系,经常会回答一些ARM初学者的问题,虽 ...
- ARM7还是ARM9?uCOS还是Linux?
一. 谈谈ARM7与ARM9的区别: 本文是写给准备学习ARM技术,而又没想好要学ARM7还是ARM9或者对ARM7与ARM9的区别不是很了解的初学者.希望本文对你们有点用处. 由于职业的关系,经常会 ...
- arm的一些概念(ARM7、Cortex-M的区别)
ARM内核和架构都是什么意思,它们到底是什么关系? 1.ARM内核:从ARM7.ARM9到Cortex-A7.A8.A9.A12.A15再到Cortex-A53.A57等,总之不同版本 ARM 有不同 ...
- ARM 架构(V7,V8),和ARM内核区别,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A15 ...
- ucos-ii在ARM7上移植
随着嵌入式技术的快速发展,实时多任务操作系统作为一种软件平台已逐步成为国际嵌入式系统的主流,目前世界上已经有一大批成熟的实时嵌入式操作系统,通常,对嵌入式软件的基本要求是体积小.指令速度快.具有较好的 ...
- linux arm9视频哪个好,谈谈ARM7与ARM9的区别
本文是写给准备学习ARM技术,而又没想好要学ARM7还是ARM9或者对ARM7与ARM9的区别不是很了解的初学者.希望本文对你们有点用处. 由于职业的关系,经常会回答一些ARM初学者的问题,虽然问题千 ...
最新文章
- jquery总结和注意事项
- vb计算机考试试题及答案,计算机二级考试《VB》操作试题及答案2016
- php过滤特殊字符mysql攻击_php – MySQL在特殊字符处切断字符串
- leetcode-【中等题】5. Longest Palindromic Substring
- 一篇讲清:如何构建可重复,可扩展且盈利的“魔力”转化流程?
- 基于单TCP连接的高吞吐模型设计
- ios::sync_with_stdio(false)的作用
- fragment+viewpager+tablayou实现滑动切换页面
- java核心-多线程-Java多线程编程涉及到包、类
- numpy.argmax/argmin/max/min
- 最近智商拙计,做做题补一下
- android 车载安富蓝牙电话开发,Android平台BLE低功耗蓝牙开发
- 三维模型楼盘展示的功能及优点
- 来自1959《粉红色潜艇》的经典语录
- VB6.0 读取Excel2010简单方法(附源码和注释,可伸手)
- 干货 | 全行业薪酬一览表,建议收藏!
- android fstrim命令,满血复活:安卓4.3为所有Nexus带来TRIM
- 四种xml的解析方式
- SQL合并 合并id相同的数据
- 支付宝小程序开发体验
热门文章
- 树莓派-10-安装jupyter并控制SG90舵机
- 解决网络栏只剩下飞行模式
- 谱聚类(spectral clustering)
- [电路笔记]非线性电路
- 淘宝开源深度学习端侧推理引擎 MNN
- 如何利用python调用API接口获取数据进行测试
- Wifi网络共享----Wifi共享精灵
- 用python画漂亮的网状几何图形
- 【论文阅读】[CVPR 2018] PU-Net: Point Cloud Upsampling Network. [tensorflow] [rec. oth.]
- 当前HNB资讯加热不燃烧产品与传统中烟加热卷烟有哪些区别?