S3C2440学习笔记一(系统频率以及一些入门级问题)

发布者:VelvetDreamer最新更新时间:2016-08-01 来源: eefocus关键字:S3C2440  系统频率 手机看文章 扫描二维码
随时随地手机看文章
①MPLL和UPLL有何不同?

对于MPLL使用到MPLLCON,而UPLL使用到UPLLCON寄存器,同属于时钟电源管理单元。MPLLCON地址是0X4C000004,UPLL地址是0X4C000008。MPLL用于CPU及其他外围器件,这里把他理解成单片机的主频就对了,UPLL用于USB。产生FCLK,HCLK,PCLK三种频率。

CLKDIVN时钟分配控制寄存器,地址是0X4C000014,对FCLK分频给UCLK,PCLK,不分频或2分频,CAMDIVN照相机时钟分配寄存器,地址是0X4C000018,也是做一个时钟分配。

②2440slib.s中出现mrc,bic,mcr,MOV_PC_LR是什么意思,有什么资料学习和研究?

前面三条是属于嵌入式汇编指令,

MRC 指令的格式为:MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。
MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2 为协处理器将要执行的操作,目的寄存器为ARM 处理器的寄存器,源寄存器1 和源寄存器2 均为协处理器的寄存器。  
指令示例: 
MRC P3 , 3 , R0 , C4 , C5 , 6 ;该指令将协处理器 P3 的寄存器中的数据传送到 ARM 处理器寄存器中.

MCR 指令的格式为: MCR{条件} 协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2。 
MCR 指令用于将ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2为协处理器将要执行的操作,源寄存器为ARM 处理器的寄存器,目的寄存器1 和目的寄存器2 均为协处理器的寄存器。 

指令示例: 
MCR P3 , 3 , R0 , C4 , C5 , 6 ;该指令将 ARM 处理器寄存器 R0 中的数据传送到协处理器 P3 的寄存器 C4 和 C5 中。

 

CP15寄存器图概述

CP15定义了16个寄存器。CP15的寄存器图如下表所示

a.在位置0可以访问两个寄存器。具体访问哪一个寄存器取决于第二个操作码的值。

b.分指令寄存器和数据寄存器

Unpredictable(UNP):从这个地方读出的值可以是任意的

Should be zero(SBZ):往这个地方写入的时候,这个域的所有位都应该清0

只能在特权模式下使用MRC和MCR指令访问CP15的寄存器。MCR和MRC的指令位模式如下:

 它们的汇编代码为:MCR/MRC{cond} p15,opcode_1,Rd,CRn,CRm,opcode_2

cond是条件码,bit20是L位,如果L=1就表示Load,从外面读到CPU核中,也就是MRC指令,如果L=0就表示Store,也就是MCR指令。[11:8]这四个位是协处理器编号,CP15编号是15,因此是4个1。CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4位。对于CP15协处理器,规定opcod1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。

寄存器0,ID编码寄存器

这是一个用于返回设备ID编码的只读寄存器

你可以通过将opcode2设置为除1以外的值来访问CP15的ID编码寄存器R0(CRm此时应置为0)。例如:

MRC p15,0,Rd,c0,c0,0  ;返回ID寄存器的值

寄存器0,缓存类型寄存器

这是一个只读寄存器,它包含了缓存的架构和大小的信息,这就允许操作系统来确定要如何执行诸如清理缓存和锁定缓存的操作。所有ARMv4T版本及以后的带缓存处理器都包含这个寄存器,允许实时操作系统的厂商生产他们的操作系统的试验版本。

你可以通过将opcode_2设置为1来访问CP15的缓存类型寄存器R0。如:

MRC p15,0,Rd,c0,c0,1  ;返回关于缓存的详细信息

还有一个bic是清除指令,BIC―――――位清除指令指令格式:

BIC{cond}{S} Rd,Rn,operand2

BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。

最后还有一个MOV_PC_LR,这个是用于子程序返回,代码分析(这是自己在总结,将别人的东西通过归纳整理和分析):

                              MACRO                               //这个是宏定义的关键字

               MOV_PC_LR      //作用是子程序返回

                              [ THUMBCODE  

                   bx lr               //当目标程序是Thumb时,就要用BX跳转返回,并转换模式

                              |

                   mov               pc,lr        //目标程序是ARM指令集,直接把lr赋给pc就可以了,是直接处理的(这个要查THUMB指令集)。

                              ]

               MEND //宏定义的结束标志

③Main函数带了两个参数,有何不同,分别有什么用?

int Main(int argc, char **argv);这个语句是常用的程序开始接口函数,前面的int表示返回的类型,至于Main是经过启动引导的一个标记,可以对应的修改。至于里面的两个参数,argc的值表示后面argv数组传递了几个参数,可以使argv[0]、argv[1]...。

④对于GPIO如何控制,IO有多少功能?

大致有三个寄存器,拿portB口来说吧,GPBCON用来控制整个B口的功能,GPBDAT用来确定是高电平还是低电平,GPBUP就是要不要选择上拉。第二第三功能后面再说。

⑤什么是协处理器?

协处理器,一种芯片,用于减轻系统微处理器的特定处理任务。超级CPU,PC机一般没有协处理器,速度快乐,不需要帮忙了,ARM微处理器指令包括5条:一 CDP协处理器数操作指令,二 LDC协处理器数据加载指令,三 STC协处理器存储指令,四 MCR ARM处理器寄存器到协处理器的数据传送指令,五MRC协处理器寄存器到ARM处理器寄存器的数据传送指令。arm920T协处理器CP15。

⑥什么是影子寄存器?

所有的影子寄存器都是一个实际存在的物理寄存器,通过引入影子寄存器,指令可以重复使用相同的寄存器编码,但是在不同模式下,这些编码对应不同的物理寄存器。引入影子寄存器的另外一个目的是当中断或异常产生时,CPU会将当前“CPU的状态”保存在影子寄存器中。从CPU角度看,它的“状态”包括: (1) PC(也就是R15)值 (2) CPSR的值。您也许认为R0等通用寄存器也是状态,从某种意义上说您是对的。但是那些不是“CPU的状态”,它们是“应用的状态”。当中断或异常产生后,CPU并不关心它们,CPU只是:(1) PC值被保存在当前模式下的R14中 (2)CPSR值被保存在当前模式下的影子寄存器中

  保存CPU的状态是一种廉价的操作,但是要保存应用的状态可就很昂贵了,因为至少有13个寄存器(R0 ~ R12)需要保存,为了加快这种操作,ARM的内存访问指令可以将一组寄存器的内容保存到内存中,反之亦然。(后面复习时再彻底分析)

⑦THUMB指令如何对使PC工作?

原来ARM指令集是32位的,然而也兼容16位的THUMB指令集,Thumb指令集是ARM指令集的一个子集,是针对代码密度问题而提出的,它具有16位的代码宽度。当处理器在执行ARM程序段时,称ARM处理器处于ARM工作状态,当处理器在执行Thumb程序段时,称ARM处理器处于Thumb工作状态。Thumb指令集并没有改变ARM体系底层的编程模型,只是在该模型上增加了一些限制条件,只要遵循一定的调用规则,Thumb子程序和ARM子程序就可以互相调用。Thumb指令与ARM指令的时间效率和空间效率关系为:

l  Thumb代码所需的存储空间约为ARM代码的60%~70%。

l  Thumb代码使用的指令数比ARM代码多约30%~40%。

l  若使用32位的存储器,ARM代码比Thumb代码快约40%。

l  若使用16位的存储器,Thumb代码比ARM代码快约40%~50%。

l  与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%。

显然,ARM指令集和Thumb指令集各有其优点,若对系统的性能有较高要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高要求,则应使用16位的存储系统和Thumb指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。

⑧留给后面的问题:一程序是如何编译的,②程序是如何变成机器码或者二进制代码,如何烧录到目标板的,三硬件是根据内部电路和储存电荷跑起来的,四程序是如何编译和连接的,五ucos-II和linux有何不同,两种有何优劣。

关键字:S3C2440  系统频率 引用地址:S3C2440学习笔记一(系统频率以及一些入门级问题)

上一篇:S3C2440学习二(基础资源的使用)
下一篇:ARM926EJ-S/ARM920T 协处理器 CP14, CP15详解

推荐阅读最新更新时间:2024-03-16 15:02

s3c2440学习之路-001 汇编点亮led
1. 原理分析 2. 主要流程 3. 源码 4. dis文件分析 硬件平台:jz2440 软件平台:Ubuntu16.04 arm-linux-gcc-3.4.5 1.原理分析 点亮LED最简单的方法就是给二极管正负极接上电,中间串一个电阻 图1 点亮LED 由于2440芯片Pin脚的驱动能力不够,所以无法直接用Pin脚来点亮LED,只能把Pin脚连接到LED的负极,充当开关的作用。 当Pin脚为高电平时,LED两端无电压差,LED灭 当Pin脚为低电平时,LED两端有电压差,LED亮 图2 2440连接LED 2.主要流程 2.1原理图介绍 这里只介绍LED1, LED1负极与2440的GPF4相连,中
[单片机]
<font color='red'>s3c2440</font>学习之路-001 汇编点亮led
基于S3C2440的u-boot的移植
1 Bootloader及u-boot简介 Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。Bootloader代码与CPU芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC机的BIOS程序。由于Bootloader和CPU及电路板的配置情况有关,因此不可能有通用的bootloader ,开发时需要用户根据具体情况进行移植。嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot 等,其中u-boot是当前比较流行,功能
[单片机]
MSP430F5529火箭板 ---> 控制时钟系统输出频率实验(含时钟系统分析)
实验内容:上电控制MSP430F5529 Launch Pad上的主时钟系统达到25Mhz 实验准备: 1、硬件:MSP430F5529 Launch Pad 2、软件:Code Composer Studio集成开发工具(CCS) 3、提升MSP430F5529核心电压的办法及介绍请参考《MSP430F5529火箭板 ----> 关于核心电压提升实验(含电源管理模块和供电监控系统介绍)》文章链接link 一、时钟系统 1、MSP430F5529 Lanuch Pad晶振的物理层分析   在进入时钟系统之前我们先对MSP430F5529的时钟晶振做一个介绍。    MSP430F5529 Launch Pad 板载了1个3
[单片机]
MSP430F5529火箭板 ---> 控制时钟<font color='red'>系统</font>输出<font color='red'>频率</font>实验(含时钟<font color='red'>系统</font>分析)
嵌入式中基于Qt/Embedded的键盘接口设计
引言     随着嵌入式系统的不断发展,特别是嵌入式处理器运算能力的不断增强,嵌入式系统被广泛应用于信息家电、移动通信、手持信息设备以及工业控制等众多领域。与此同时,用户对于嵌入式系统图形用户界面的需求也不断提高。嵌入式Linux作为一种流行的嵌入式系统平台,它所具备的稳定、高效、易裁剪、易移植、硬件支持广泛等优点,结合其源码开放的特征,使得Linux在嵌入式操作系统中的地位日益重要。Qt/Embedded是一个完整的自包含GUI和基于 Linux的嵌入式平台开发工具,因其面向对象、跨平台、界面设计更美观和友好而得到广泛的应用。Qt/Embedded具有客户/服务器模型,直接向帧缓冲写入数据,摒弃了X窗口系统,节省了内存。同时
[嵌入式]
S3C2440-启动分析
本文是我对bootloader中2440init.s文件的一些理解,详细注释了一下,希望对大家有所帮助,下一步我准备移植一下uboot。 ;========================================= ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,stacks ; Initialize C-variables ; HISTORY: ; 2002.02.25:kwtark: ver 0.0 ; 2002.03.20:purnnamu: Add some functions for testing STOP
[单片机]
S3C2440 UART串口驱动(裸机)
1.1 UART 串口 通用异步接收器和发送器(Universal Asynchronous Receiver and Transmitter) 简称UART。通常是嵌入式设备中默认都会配置的通信接口。这是因为,很多嵌入式设备没有显示屏,无法获得嵌入式设备实时数据信息,通过UART串口和超级终端相连,打印嵌入式设备输出信息。并且在对嵌入式系统进行跟踪和调试时,UART串口了是必要的通信手段。比如:网络路由器,交换机等都要通过串口来进行配置。UART串口还是许多硬件数据输出的主要接口,如GPS接收器就是通过UART串口输出GPS接收数据的。 1.1.1 异步通信和同步通信 图2-56同步信号与异步信号 同
[单片机]
<font color='red'>S3C2440</font> UART串口驱动(裸机)
U-boot 在 mini2440-S3C2440 上的移植(3)-第一阶段:探索启动代码
1.本文以mini2440开发板为例: u-boot属于两阶段的Bootloader,第一阶段文件为CPU/arm920t/start.S和board/mini2440/lowlevel_init.S,前者是平台相关的,后者是开发板相关的; U-boot第一阶段代码: 1.硬件设备初始化 该部分完成:将CPU的工作模式设置为管理模式;关闭WATCHDOG; 设置FCLK;HCLK;PCLK的比例,关闭MMU;CACHE 参考代码:cpu/arm920t/start.S 2.为加载Bootloader的第二阶段代码准备RAM空间;所谓准备RAM空间,就是初始化内存芯片,参考代码start.S中调用的lowlevel_init.S函数
[单片机]
三 ARM9(S3C2440)的串口UART——程序实例讲解
串口通信程序编写步骤 UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。 选通道,通过函数Uart_Select();选UART0~UART2; 选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)来进行。时钟选UCLK ,rUCON0|=0x400;时钟选PCLK ,rUCON0&=0x3ff。 通信协议(rULCON0)设定,如果正常通信,一位停止位,8位数据位,无奇偶效验: rULCON0=(0 6
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved