欢迎光临
我们一直在努力

ARM学习笔记(6)

今天把内核启动流程和时钟系统的知识点理了一遍,记录一下核心内容。

 

一、CPS指令

 

CPS指令在armv6指令集之后才支持,主要用来快速切换CPU工作模式,或者直接开关中断。

常用的模式切换指令:

 

切换到IRQ模式

cps #0x12

切换到system模式

cps #0x1F

 

开关中断也可以直接用CPS指令完成:

 cpsie i :使能IRQ中断

cpsid i :屏蔽IRQ中断

 

二、ARM内核启动流程

 

标准的内核启动代码一共7步:

 

1. 设置异常向量表

2. 重映射异常向量表地址到0x87800000

3. 为不同工作模式开辟栈空间,主要是IRQ模式和system模式

4. 使能IRQ中断

5. 清零bss段

6. 打开icache

7. 引导内核跳转到C语言main函数执行

 

三、中断优先级

 

中断优先级的规则是编号越小,优先级越高。

 

GIC V2版本:最多支持1020个中断,256个优先级,范围0~255

IMX6ULL芯片:实际支持160个中断,32个优先级,范围0~31

 

优先级又分成抢占优先级(组优先级)和子优先级两级。

 

顺带提一下ocp原则:对代码修改是关闭的,对代码扩展是开放的,写驱动的时候尽量按这个思路来。

 

四、时钟系统基础

 

时钟源分无源晶振和有源晶振,IMX6ULL的外部主晶振是24MHz。

几个核心部件的作用:

 

PLL(锁相环):倍频,输入24MHz,乘以N倍得到高频时钟

Prescale(预分频器):分频,输入时钟除以M得到低频时钟

PFD(相位分数分频器):实现分数倍频/分频,比例为N/M,大于1是倍频,小于1是降频

 

预分频器的位宽决定分频范围,2位预分频器分频档位少,3位预分频器可以实现1~8分频。

 

五、IMX6ULL系统时钟配置

 

完整的时钟配置分三步:

1. 配置ARM内核时钟,设置为528MHz

2. 配置PLL2下的4个PFD和PLL3下的4个PFD

3. 配置三个根时钟,分别为132MHz、66MHz、66MHz

 

外设时钟就从这些根时钟里取源,再经过外设自己的分频器得到最终工作频率。

赞(0)
未经允许不得转载:171主机测评 » ARM学习笔记(6)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址