随笔分类 - ARM9
摘要:分两阶段,第一阶段主要用汇编完成,第二阶段主要用c完成。个人觉得两个阶段的分工并没有什么明显的要求,很多硬件的初始化可以放到第一阶段也可以放到第二阶段。只不过有一些复杂工作用汇编比较麻烦。 一般来说第一阶段工作:1. 硬件设备初始化。2. 为加载bootloader的第二阶段代码准备RAM空间。3. 复制bootloader的第二阶段代码到RAM空间中。4. 设置好栈。5. 跳转到第二阶段代码...
阅读全文
摘要:Ldr和bl在启动程序中,都是可以负责pc跳转的指令。 1)bl是地址无关指令,和什么地址无关呢?和当前的运行地址无关,链接器脚本中标明了一个运行地址,但是arm中的代码实际是从地址0开始运行的。这个时候实际的地址和运行地址是不符的,如果想让程序正常的运行,就得使用地址无关指令。比如在完成将程序复制到内存之前想要跳转到一个函数里,就得使用bl,因为bl跳转依靠的是相对地址,和运行地址无关,所以能完...
阅读全文
摘要:时钟两种能够提供时钟的方式:1) 晶振2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路。 学习ARM9时钟的四步:1) 晶振:12MHZ2) 有多少个PLL:两个,MPLL和UPLL3) PLL产生了哪些时钟:MPLL:FCLK HCLK PCLKUPLL:UCLK4) 时钟都用来做什么了:FCLK:用于CPU核。HCLK:用于AHB总线设备,如cp...
阅读全文
摘要:GPIO 习惯了stm32的GPIO,发现高端处理器arm在这方面反而简单了。 ARM9控制GPIO只有三种寄存器。 GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚,1为输入引脚。GPBCON---GPH/JCON 则用两位控制一个引脚,分别是00表示输入,01表示输出,10表示特殊功能。 GPxDAT:当此引脚被设置为输入时,读此引脚可知相应引脚的电平状态...
阅读全文
摘要:这一快理解的非常浅:MMU 虚拟存储器对内存进行了逻辑上的扩充。比如一个32位的CPU系统,逻辑上的寻址可以达到4GB,但是如果直接对物理地址进行寻址,就要受到主存大小的限制。 在这种条件下,虚拟地址应运而生,每个应用程序的访存空间都可以达到4GB,当然这里用的是虚拟地址。Cpu发出虚拟地址之后会被转化为MVA(变化后的虚拟地址),MMU接收到MVA,将MVA转化为物理地址。 现在,先来看看...
阅读全文
摘要:Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备。一共八根片选线,也就是bank1,bank2…以此来实现1GB的寻址。 2440为32位,理论上的寻址范围为4GB,除了这1GB,其他的没有使用。2440的寄存器范围都处于0x48000000-0x5fffffff之间。 下图是分别...
阅读全文
摘要:上图中的cp15就是协处理器。 那么什么是协处理器呢?如下: Cp15的详细信息:系统控制协处理器,通过修改cp15的寄存器,可以修改MMU,cache,时钟模式等系统选项,从而完成系统控制。 CP15的寄存器要通过MRC和MCR指令来访问。来自为知笔记(Wiz)
阅读全文
摘要:好了,言归正传,裸机程序没有操作系统的支持,想要用c语言,就只能先使用汇编语言手动配置c语言需要的环境,听起来很高大上,其实需要做的很简单:指定堆栈指针的值就好。 那么完成这个简单的事情之前,先要明白c语言的栈的以下几个概念:1. 空栈和满栈:这两个概念不是说的栈是空的还是满的,空栈是指栈指针指向的是栈顶元素的下一个地址。满栈指的是栈顶指针指的是栈顶元素。 2. 升栈和降栈:升栈就是栈向上生长...
阅读全文
摘要:Mov 立即数受限的原因:因为根据下图,mov的机器指令中立即数最多能有12位,其中有四位代表移位,所以立即数最多能有8位。 伪指令有两种:操作类伪指令和定义类伪指令定义类伪指令 Global 定义一个全局的变量Data 定义数据段Ascii 定义一个字符串Byte 定义一个字节数据Word 定义一个字数据Equ 定义一个宏例子: 操作类伪指令(实际用其他指令替代) Ldr 伪指令:作...
阅读全文
摘要:工作模式Arm有7种工作模式:名称简称简介UserUsr正常用户程序执行的模式(linux下用户程序就是在这一模式执行的。)FIQFiq快速中断模式IRQIrq普通中断模式SupervisorSvc给操作系统准备的保护模式,权限很高的一种模式,linux的内核就是运行在此模式AbortAbt比如访问虚拟内存,导致了异常,就是进入这一模式。UndefinedUnd运行一条处理器并不支持的指令就进入此...
阅读全文
摘要:2440是arm9核,是基于v4 架构6410是arm11核 基于v6架构210是a8的核 基于v7架构 前面的是经典阵营,比较老。Arm11之后改为contex系列。Arm7的水准和M3相近Arm9,arm11的水准在R4和A5之间 妈蛋。。。2440停产了。。。。。。。。。。来自为知笔记(Wiz)
阅读全文
摘要:一个链接器脚本里面有三个段:代码段,数据段,bss段。 除了段的信息,一个链接器脚本还应该包括:1.规定起始链接地址。2.指明对齐方式。3.还可以设置变量。4.规定哪个文件时代码首文件。 下面敲得是一段完整的链接器脚本的文件。代码首文件是指链接的时候把哪一个文件放在最前面。 使用方法为: 来自为知笔记(Wiz)
阅读全文
摘要:Arm-linux-gcc: gcc和arm-linux-gcc的头文件并不一样。 Eg. Arm-linux-ld:链接器,-T参数是使用链接器脚本。 Eg. Arm-linux-readelf:读取elf文件信息 -a:查看全部信息 -d:查看用到的库 ...
阅读全文

浙公网安备 33010602011771号