arm 核心篇
fulinux
我热爱Linux、热爱Yocto、喜欢编程、热爱科学技术的码农!希望我的博客能帮助到哪些在茫茫黑夜中摸索的小白!
欢迎关注、点赞和订阅!
展开
-
算数右移和逻辑右移
算数右移是对于有符号数的逻辑右移是针对无符号数的。列:一8位二进制数:11110010如果用算数右移则前面加1变成11111001如果用逻辑右移则前面加0变成01111001算术右移 -- 左边添1逻辑右移 -- 左边添0原创 2012-11-26 20:32:03 · 2166 阅读 · 0 评论 -
Nand Flash
http://blog.163.com/wl5201314_@126/blog/static/7448854520111126102228195/本章我们将学习嵌入式系统中比较重要的存储器件-----Nand Flash,它相当于PC机的硬盘,用于保存系统运行所必需的操作系统、应用程序、用户数据、运行过程中产生的各类数据。与内存(Sdram)不同,Nand Flash掉电后,数据仍可以永久保存转载 2012-12-13 19:10:37 · 1733 阅读 · 0 评论 -
MOV PC, LR解析
MOV PC, LR如果在子程序中LR没有改变,则等同于 RET程序在 调用子程序时,会把 BL SUB_XXXXX 处的下一条指令送入 LR, 这样,当所调用的子程序没有改变LR的值时(注意这里我说说的是在整个子程序中LR没有被改变),返回父程序时,你就可以使用 MOV PC, LR;==============这一段代码完成从NAND Flash读原创 2012-12-13 18:57:37 · 8519 阅读 · 0 评论 -
Kernel评论ARM
尔现在是什么情况呢 Kernel 20:38:49[自动回复]您好,我现在有事不在,一会再和您联系。 Kernel 20:54:54X86体系架构功耗降不下来,这是他的致命弱点。也是ARM开始逐渐蚕食他的服务器市场,决定统治移动,嵌入式领域的根本原因 (^_^) 20:55:50龙芯怎么样 Kernel 20:56:58阉割版的MIPS架构,标称完全自主知识产权却原创 2012-12-13 21:48:34 · 1132 阅读 · 0 评论 -
关于mrc p15,0,r0,c1,c0,0
mrc是协处理器命令。用于读取协处理器中的寄存器的数据到ARM处理器的寄存器里面。mrc p15,0,r0,c1,c0,0 这句话的意思应该是读协处理器中的寄存器数据到ARM处理器的r0里面。应该是ARM访问MMU,一般cp15就是MMU。{cond} p#, ,Rd,cn,cm{, }MRC 从协处理器移到ARM7寄存器(L=1)MCR 从ARM7寄存器移到协处理器(L=0)转载 2012-12-14 21:03:16 · 7203 阅读 · 0 评论 -
ARM协处理器
ARM920T协处理器接口ARM920T处理器通过一个外部协处理器接口来支持连接片上协处理器。ARM处理器支持所有的协处理器指令。ARM920T协处理器接口允许你附加一个专门设计的协处理器到ARM920T。包括:1.附加一个加速器:用于浮点运算,DSP,3-D图形,加密解密。2.ARM指令集可支持连接多达16个协处理器到ARM处理器,编号为0~15内部协处理器ARM920T转载 2012-12-14 22:06:35 · 1398 阅读 · 0 评论 -
TACLS TWRPH0 TWRPH1的设置
搜了搜 关于 TACLS TWRPH0 TWRPH1的设置 都是根据WE CLE/ALE来设置的 CLE Setup Time=12ns,CLE Hold Time=5nsALE Setup Time=12ns,ALE Setup Time=5ns,nWE Pulse Width=12ns为了满足K9F2G08U0A的时序要求,需要TACLS+TWRPH0+TW转载 2012-12-15 20:23:48 · 1692 阅读 · 0 评论 -
ARM体系 指定代码段地址问题的自我理解
一直以来对ARM体系结构下 链接器指定代码段的原理与实现方式等搞不太清楚,网上查了很久好像也找不到相关问题,难道高手们都觉得这个问题太简单了?总之是没有找到答案。近日翻看韦东山老师的《嵌入式Linux 应用开发完全手册》中SDRAM的例子,想了一天,并且试了一下,于是有了下面的一些拙见。话不多少,直接上例子 汇编部分源码如下@************************转载 2012-12-15 21:50:46 · 3303 阅读 · 0 评论 -
ARM地址空间
ARM的体系结构有很多很多介绍的地方,从其7种模式到CPSR状态寄存器,这些都是属于最底层的硬件直接相关的ARM属性,再向上一点,考虑一下在ARM上运行的嵌入式应用,一般称在ARM上直接运行的嵌入式应用为Image就是直接烧进flash运行的可执行文件,这种可执行文件是由IAR,ADS,ARM-EABI-GCC等编译器经过编译所直接生成的。由于没有操作系统的支持,这种镜像文件是需要自己管理底层存储转载 2012-12-22 19:28:10 · 2520 阅读 · 0 评论 -
ARM非向量中断初始化程序和向量初始化程序
;********************************************************;* NAME : 44BINIT.S *;* Version : 10.April.2000 *;* Description: *;* C start up codes *;* Configu原创 2013-01-17 19:43:20 · 1691 阅读 · 0 评论 -
加载TQ2440驱动-Hello World 模块
开发平台:Ubuntu 10.04,内核版本2.6.32-33-generic,交叉编译器:天嵌公司提供的arm-linux-gcc 4.3.3,内核树:/opt/EmbedSky/linux-2.6.30.4/目标平台:天嵌公司的TQ2440开发板ARM9,内核版本2.6.30.41. 首先解压天嵌公司提供的内核源码包linux-2.6.30.4_2010053转载 2013-03-04 16:12:03 · 1752 阅读 · 0 评论 -
ARM处理器模式切换(含MRS,MSR指令)
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6556172++++++++++++++++++++++++++++++++++++++++++1.1.1 ARM处理器模式切换(含MRS,MSR指令)除转载 2013-03-09 21:10:22 · 2847 阅读 · 0 评论 -
【转】ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的
【转】ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的几天前一个学生问我ARM中断嵌套的问题,我才发现原在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的转载 2013-03-10 20:04:17 · 1794 阅读 · 0 评论 -
不能从nandflash启动原因之一
我在调试是怎么也不能从nandflash启动,但是能从norflash和SDRAM中启动,同时读写nandflash的功能也能实现,于是我就将nandflash全部搬到SDRAM中,结果发现nandflash中竟然只有0x40000大小的内容,我太高兴了,终于找到原因了,原因就是只有0x40000的内容被放进了nandflash,我大概知道原因所在了,我记得设置一个宏时是设置0x40000的。同时原创 2013-03-23 19:54:55 · 4723 阅读 · 0 评论 -
s3c2440存储控制器和地址以及启动的理解
1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。 NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。 结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash. Nand Fl转载 2012-12-10 21:01:51 · 1558 阅读 · 0 评论 -
ARM地址空间
摘编: 在嵌入式系统中,内核映像与根文件系统映像存储在 ROM 或 Flash 等固态存储设备中,并且可以直接运行。但这样做是运行速度太慢,所以要把他们加载到ram中.实现主要有以下过程以嵌入式linux为例)*******************************************1.检测内存映射. 内存映射就是指在整个 4GB(CPU) 物理地址转载 2012-12-22 18:18:27 · 2459 阅读 · 0 评论 -
s3c2440启动文件详细分析
http://blog.csdn.net/zhaocj/article/details/5302370启动文件就是引导ARM启动,并进入我们熟悉的C语言程序。它主要完成了ARM最基本的硬件初始化工作。虽然启动文件的内容大同小异(就是设置系统时钟、内存、中断向量表、栈等内容),而且只要有一个现成的启动文件,即使不用详细了解该文件的内容,直接进入C语言编程工作也可以对ARM进行操作,但我认为熟悉启转载 2012-12-08 20:43:56 · 1245 阅读 · 0 评论 -
标志位寄存器的说明
一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运转载 2012-11-26 20:43:12 · 2947 阅读 · 0 评论 -
ADS1.2 Error:(Fatal) L6002u:could not open file C:/...
我今天也遇到了同样的问题,后来解决了,方法如下: 首先:工程名、文件名中不能有汉语,不能有括号。其次:在ADS 1.2中,Project——>Remove Object Code——>All targets。搞定!转载 2012-12-01 20:58:22 · 3064 阅读 · 0 评论 -
WINCE6.0+S3C2443的启动过程---eboot2
上接:http://blog.csdn.net/chinesedragon2010/archive/2010/09/20/5895956.aspx1.2 关闭所有的CPU中断通过对INTMSK,INTSUBMSK寄存器特定为设置为1来屏蔽中断源的中断请求,接着通过对中断模式寄存器INTMOD清零来把中断设置为IRQ模式。1.3系统时钟设置我的另一篇博客介绍了S3C2转载 2012-12-03 20:44:47 · 1394 阅读 · 0 评论 -
s3c2440.inc文件
启动文件就是引导ARM启动,并进入我们熟悉的C语言程序。它主要完成了ARM最基本的硬件初始化工作。虽然启动文件的内容大同小异(就是设置系统时钟、内存、中断向量表、栈等内容),而且只要有一个现成的启动文件,即使不用详细了解该文件的内容,直接进入C语言编程工作也可以对ARM进行操作,但我认为熟悉启动文件的内容,还是有必要的,它对我们熟悉ARM的体系结构,编写出更高效的程序是大有益处的。因此我花了一些时原创 2012-12-06 21:48:04 · 1693 阅读 · 0 评论 -
2440init.s完全解析
;=========================================; NAME: 2440INIT.S; DESC: C start up codes; Configure memory, ISR ,stacks; Initialize C-variables;=========================================;汇编不能使用i转载 2012-12-07 20:11:00 · 3600 阅读 · 0 评论 -
bx lr
bx lr的作用等同于mov pc,lr即跳转到lr中存放的地址处。那么lr存放的是什么地址呢?lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。 当通转载 2012-12-07 20:57:58 · 2891 阅读 · 0 评论 -
bx lr 和 mov pc,lr
;bx lr 和 mov pc,lr 都是跳转到lr地址处,不同的是lr跳转到thumb模式,二另一个是ARM模式 是不是这样呢?原创 2012-12-07 21:06:42 · 3837 阅读 · 0 评论 -
理解$HandlerLabel HANDLER $HandleLabel宏
接下来的代码如下(注黑色为源程序,蓝色为解说部分代码):MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;减少sp(用于存放转跳地址)实质上是在计算返回地址,用来存储PC地址 stmfd sp!,{r0} ;把将要使用的r0寄存器入栈转载 2012-12-07 22:29:22 · 1327 阅读 · 0 评论 -
stosb指令解析
stosb需要寄存器edi配合使用。每执行一次stosb,就将al中的内容复制到[edi]中。 即:stosb == al --> [edi]原创 2012-12-08 15:56:45 · 6345 阅读 · 0 评论 -
LOCKTIME寄存器
刚设置好PLL时,系统认为这时PLL还没稳定,所有这时不用PLL的时钟,而用外部晶振做时钟,将PLL锁住,过了LOCKTIME后认为PLL已经稳定了,才使用PLL给系统提供时钟。例如S3c2410手册上给出锁住时间必须大于150us,外部晶振为12M,那么(1/12M)*N>150us,其中N为U_LTIME或M_LTIME,N>1800,可以设置U_LTIME或和M_LTIME为0xff原创 2012-12-08 21:52:07 · 2339 阅读 · 0 评论 -
DCD 伪指令解析
原文地址:关于汇编ARM指令DCD作者:晓喻数据定义( DataDefinition)伪指令数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。— DCD ( DCDU)用于分配一片连续的字存储单元并用指定的数据初始化。3、 DCD(或DCDU)语法格式:标号 DCD (或 DCDU ) 表达式DCD (或 DCDU )转载 2012-12-08 20:12:57 · 13322 阅读 · 5 评论 -
Image$$RO$$Limit
ARM IMPORT Image$$RO$$Limit 的含义IMPORT |Image$$RO$$Base| ; Base of ROM codeIMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)IMPORT |Image$$RW$$Base| ; Base of RAM to initialise转载 2012-12-08 19:23:33 · 1299 阅读 · 0 评论 -
ASSERT :DEF:ENDIAN_CHANGE
; ASSERT---在汇编编译器对汇编程序的第二遍扫描中,如果ASSERT 条件不成立,ASSERT伪指令将报告该错误信息ASSERT :DEF:ENDIAN_CHANGE [ ENDIAN_CHANGE ASSERT :DEF:ENTRY_BUS_WIDTH [ ENTRY_BUS_WIDTH=32 b ChangeBigEndian ;DCD 0xea0000转载 2012-12-08 19:45:32 · 1555 阅读 · 0 评论 -
uboot中timer定时器的设置
uboot中timer定时器的设置,uboot汇编部分没有对timer初始化,而是在C中。在C入口函数void start_armboot(void)中,首先是通过如下代码方式调用:typedef int (init_fnc_t) (void);init_fnc_t *init_sequence[] = { a/a/l/board.c原创 2013-03-20 13:45:12 · 10215 阅读 · 1 评论