3327|1

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

LM3S8962杂谈 [复制链接]

1、  LM3S存储空间分配

  

 

其中0~0.5G映射为flash空间,0.5G~1G映射为SRAM空间。

 

2、  Cortex-M3启动机制

       Flash空间起始地址处必须存放向量表(在程序代码开始运行后,向量表的基址可以改变)。硬件复位时,NVIC_VTABLE复位为0,向量表位于Flash空间起始地址0x00000000处。

    向量表是异常产生时获取异常处理函数入口的一块连续内存,每一个异常都在向量表固定的地址偏移处(偏移地址以字对齐),通过该偏移地址可以获取异常处理函数的入口指针。向量表中前4个字如下:

       dcd     g_pulStack + (STACK_SIZE * 4)   // Offset 00: Initial stack pointer

    dcd     ResetISR - 0x20000000           // Offset 04: Reset handler

    dcd     NmiSR                           // Offset 08: NMI handler

dcd     FaultISR                        // Offset 0C: Hard fault handler

分别为:主堆栈栈顶地址、复位处理函数、NMI (不可屏蔽中断)ISR地址、故障ISR地址。其中,dcd 是一个伪指令,分配连续的一字节为单位的存储单元。

 

 

3、Cortex-M3的另一个创新在于 嵌套向量中断控制器 NVIC( Nested Vector Interrupt Controller)。相对于ARM7使用的外部中断控制器,Cortex-M3内核中集成了中断控制器,芯片制造厂商可以对其进行配置,提供基本的32个物理中断,具有8层优先级,最高可达到240个物理中断和256个中断优先级。此类设计是确定的且具有低延迟性,特别适用于汽车应用。

       CM3 的所有中断机制都由 NVIC 实现。除了支持 240 条中断之外,NVIC 还支持 16‐4‐1=11 个内部异常源,可以实现 fault 管理机制。结果,CM3 就有了 256 个预定义的异常类型。 

  NVIC使用的是基于堆栈的异常模型。在处理中断时,将程序计数器,程序状态寄存器,链接寄存器和通用寄存器压入堆栈,中断处理完成后,在恢复这些寄存器。堆栈处理是由硬件完成的,无需用汇编语言创建中断服务程序的堆栈操作。

 

4、Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一刻只能有一个可以看到,这也就是所谓的“banked”寄存器。

 

 

5、R0‐R12:32 位通用寄存器,用于数据操作。但是注意:绝大多数 16 位 Thumb 指令只能访问 R0‐R7,而 32 位 Thumb‐2 指令可以访问所有寄存器。Thumb‐2允许 32 位指令和 16 位指令水乳交融,代码密度与处理性能两手抓,两手都硬,不需要在两种模式下来回切换。

 

6、Cortex‐M3 拥有两个堆栈指针,它们是 banked,因此任一时刻只能使用其中的一个。

主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)

进程堆栈指针(PSP):由用户的应用程序代码使用。

 

7、Cortex‐M3 处理器支持两种处理器的操作模式,还支持两级特权操作。

 

 

 

 

 

8、通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作,从而使片上外设可以使用 C 语言来操作。

 

9、Cortex-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果。

在STM32F10x里,外设寄存器和SRAM都被映射到一个位段区里,这允许执行单一的位段的写和读操作。

下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
其中:
- bit_word_addr 是别名存储器区中字的地址,它映射到某个目标位。
- bit_band_base 是别名区的起始地址。
- byte_offset 是包含目标位的字节在位段里的序号
- bit_number 是目标位所在位置(0-31)
下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位2:
0x22006008 = 0x22000000 + (0x300*32) + (2*4).
对0x22006008地址的写操作和对SRAM中地址0x20000300字节的位2执行读-改-写操作有着相同的效果。

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhulinfeiba/archive/2009/09/15/4556644.aspx

此帖出自单片机论坛

最新回复

学习了   详情 回复 发表于 2010-7-28 14:29
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
学习了
此帖出自单片机论坛
 
个人签名我的博客
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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