读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇

读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇_第1张图片
读书笔记| ARM9 嵌入式学习

读书笔记| ARM9 嵌入式学习

1. 启动代码


1.1 功能:ARM处理器初始化

  • 硬件初始化
  • 程序代码的搬移
  • 程序为C,硬件无法识别,须初始化程序运行环境

1.2 代码实现流程步骤

  • 建立异常中断向量表

    • 硬件固有的向量表,硬件实现,简单跳转
    • 软件设定的向量表,进一步确定中断源
  • 初始化各模式的堆栈

  • 初始化硬件

    • 关闭看门狗
    • 屏蔽所有中断
    • 初始化pll和系统时钟
    • 初始化存储系统(SDRAM...)
      • 对存储器控制器的初始化
      • 即是对13个寄存器的初始化
        • 与存储器控制器相关
        • 设定外部数据总线相关参数
  • 初始化应用程序执行环境
    将代码和数据全部复制到SDRAM中

  • 跳转到主程序

    • 方法一:b Main
    • 方法二:调用标准C库函数__main()

1.3 相应外部中断的pro执行流程

  • 切换模式
    • 处理器执行完当前指令
    • 将当前cpsr保存到IRQ模式下spsr上
    • PC-4存放到IRQ模式下的R14上
  • 硬件强制将PC指向中断向量表0x18处
    • b HandlerIRQ
  • 执行HandlerIRQ,获取IsrIRQ地址
  • 跳到该地址2次查表,找具体中断服务函数地址
  • 跳到中断服务程序执行
  • 执行中断,返回

2. ARM可执行程序的映像文件


  • 文件结构
    • ZI: 未初始化的数据段
    • RW: 可读/写数据段
    • RO: 代码,只读数据段
    • 加载域
    • 运行域

3. Nand/Nor


3.1 Nand:

  • 对应PC硬盘,容量大,断电数据不丢失
  • 无法直接寻址
  • 须有控制器控制

3.2 Nor:

  • 容量小,断电数据不丢失
    与SDRAM的区别
  • 可直接寻址
  • 用于执行小程序

3.3 启动方式:

  • nor启动
    • 上电后直接执行nor中程序
    • 执行一小段后,将程序搬移到SDRAM中
  • nand启动
    • 上电后,将nand前4k数据复制到Stepping Stone
    • 执行SStone中的程序
      该程序中会实现将所有程序从搬到SDRAM中
    • 跳到SDRAM执行

4、系统时钟


4.1 S3C2440处理器有关时钟

  • Fin: 外部晶振频率
  • FCLK用于CPU核
  • HCLK
    • 用于AHB总线互连的设备上
    • AHP上的外设
      • 存储器控制器
      • LCD控制器
      • 中断控制器
  • PCLK
    • 用于APB总线互连的低速设备上
    • ADC/UART/GPIO/RTC/IIC/SPI

4.2 锁相环(MPLL、UPLL):实现倍频

4.3 相关控制寄存器

MPLLCON: 控制FCLK和Fin的比例关系
CLKDIVN: 控制FCLK、HCLK、PCLK比例关系

4.4 系统时钟初始化流程

  • 刚上电,FCLK=Fin
  • 复位信号nRESET恢复高电平,开始生成时钟频率
  • 锁相环捕获,需要一定时间(LockTime)
  • 锁相环输出新频率值

5、中断


5.1 定义

ARM处理器与各类外部设备进行通信的方式之一

5.2 中断类型

  • 硬中断: 硬件设备出发的中断
  • 软中断:
    • 软件触发
    • 具体是由某段程序代码触发的
    • 该函数需加swi关键字

5.3 相关寄存器

  • 中断寄存器
    • SRCPND
    • SUBSRCPND
  • 中断屏蔽寄存器
    • INTMSK
    • INTSUBMSK
  • INTOFFSET
  • 中断模式寄存器
    • INTMODE
  • 中断优先级寄存器

5.4 中断处理流程

  • 中断源将中断请求发送给中断控制器

    • 中断产生,SUBSRCPND相应位置1
    • 如果INTSUBMSK不对相应位进行屏蔽,SRCPND也置一
  • 中断控制器将最需要处理的中断请求发送给CPU

  • cpu保存现场,切换工作模式(IRQ),响应中断

    • 非独立寄存器放该模式下的堆栈
    • 将该模式下的CPSR保存到即将进入的模式的SPSR中
    • ???将pc减4存进R14
      * R14=PC-4
      * 减4的原因: 要返回发生中断指令的下一条指令处执行
    • PC值设为0X00000018,中断向量表中IRQ的入口地址
  • 调用中断处理程序,识别具体中断源,并进行处理

  • 从中断处理程序中返回,恢复现场,接着执行

5.5 清除中断

  • 对中断寄存器清除中断,与其他寄存器不同
  • 写1清除中断标志,清除之后相应位值为0

5.6 相关要点

  • 切换cpu工作模式时,非独立的寄存器值需要入堆栈
  • 为什么FIQ比IRQ中断响应速度快?

FIQ独立寄存器数多于IRQ,独立寄存器不需入栈保存

6 存储器控制器


6.1 用途:提供CPU访问外部设备所需的信号

6.2 地址空间:128MB/BANK、8个BANK,总寻址空间1GB

  • s3c2440的cpu具有32位地址、数据总线
  • 但地址线只引出27根,即最大寻址空间128M
  • 每个128m作为一个BANK,引出8跟片选信号nGCSx,实现1G
  • 理论物理地址空间可达4g
    • 除去1G外设空间
    • cpu内部使用的特殊功能寄存器地址空间

6.3 SDRAM

  • 同步动态随机存取内存
  • 内部结构: 存储阵列,由行、列、逻辑存储体组成

6.3.1 工作原理:

  • 读操作需控制线、地址线配合发出一系列命令来完成
  • 发出L-BANK激活命令,锁存相应L-BANK地址
  • 指定行、列,找到所需单元格

你可能感兴趣的:(读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇)