摘要:1、程序优化 修改Makefile 把main.c里面的mmu代码复制到mmu.c并修改如下 main.c的修改 由于在bootloader当中一般不会使用MMU,所以 main.c 加入led.c文件 makefile 2440中断源初始化 打开开发板底板与核心板原理图 底板 比如K1对应EINT
阅读全文
摘要:中断概念 1、中断生命周期 串口先产生一个事件,该事件传送到中断控制器里面,中断控制器会进行相应过滤,能通过过滤,那么就交给CPU去处理。 2、中断源 2440芯片手册 6410芯片手册 3、中断过滤 4、中断处理 cpu处理方式有两种: 非向量方式: 向量方式: 总结:整个生命周期中软件的角色
阅读全文
摘要:1、段方式MMU 利用虚拟地址然后找到物理地址,通过物理地址访问到led,其过程如下: 一个段的大小是[19:0]总共有1M的地址空间。 从上面可知对应GPIO的段物理基地址是0x7f000000.那么要在虚拟地址当中找一个段与之形成对应关系,那么这个段是多少呢,假如是0xa0000000这个段,把
阅读全文
摘要:1、地址转化总体分析 level one fetch和level two fetch分为一级转换和二级转换。 由上图右边可以看出,首先通过TTB(Translation Table Base)寄存器找到转换表基地址,该表有4096项,然后用虚拟地址的[31:20]位来找该表里面的表项,再检查该表项最
阅读全文
摘要:1、Memory Management Unit(存储器管理单元) 单片机与ARM在硬件体系上的一些区别:其中就有MMU的区别。 虚拟地址的使用 把p1.c复制成P2.c,把变量a改成b,再进行编译看看情况如何 可以看出两个程序在同样地址读出不同的值,在这里就用到了MMU。 在这里程序当中的地址都是
阅读全文
摘要:1、为什么要混合编程 汇编语言:执行效率高;编写繁琐; 执行效率高;能够更直接地控制处理器。 c语言:可读性强,移植性好,调试方便。 1、汇编调用c函数 2、c调用汇编函数 汇编语言定义的函数(标号),需要把它定义为全局的。 在start.s中修改 在main.c中修改 3、c内嵌汇编 1、格式 输
阅读全文
摘要:1、跳转到c代码 因为内存中的代码来自于垫脚石SRAM,他们是相同的。 采用绝对跳转方式来完成。 因为我们是从汇编代码跳转到c语言的程序,所以我们要提前准备一个main.c文件。 修改makefile 2、验证看跳转成功没有 使用c语言来点亮led 汇编中的led点亮 在c语言当中地址一定要有类型的
阅读全文
摘要:1、BSS段的作用 初始化的全局变量存放在数据段; 局部变量存放在栈中; malloc的存放在堆; 未初始化的全局变量存放在BSS段; 找到bss段的起始与结束地址,往里面添加0,便初始化好了。 打开连接器脚本
阅读全文
摘要:1、概念解析 ARM系统使用的是满栈! ARM采用降栈!!! 栈帧 每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧。那么所有栈帧组成了整个栈。 子函数func里面保存了main函数的上边界FP和下边界SP。 2、栈的作用 保存局部变量 代码样例 编
阅读全文
摘要:1、回顾ARM启动流程就可知道需要执行代码搬移 2、代码搬移 1)起点:NAND FLASH,今天的起点是SRAM垫脚石。为什么?因为我们要从nandflash取搬移数据需要先对其进行初始化,二而我们并没有初始化;垫脚石SRAM起始地址:2440为0,6410为0x0c000000,210为0xd0
阅读全文
摘要:1、6410地址空间 外设区:从0x70000000-0x7FFFFFFF有256MB 主存储区:从0x00000000-0x6FFFFFFF有1972MB 对于主存储区: 静态存储区可以接我们的NOR Flash以及One nand等等设备,它的6*128MB意思是有6个BANK,每个BANK有1
阅读全文
摘要:1、2440地址空间 先去找PCB原理图,看CPU引出的内存地址线和数据线的宽度。 说明内存的其实地址是0x30000000为起始地址。 初始化内存其实是去初始化存储器控制器,只有初始化好这个存储器控制器之后才能访问相应的芯片。 2、内存芯片的硬件连接 3、存储控制器 打开芯片手册,找到存储器控制器
阅读全文
摘要:1、概念解析 1.1时钟脉冲信号 1.2时钟脉冲频率 1.3时钟源(提供时钟脉冲信号) a、晶振 b、锁相环PLL 2、时钟体系 2440: 晶振的频率、时钟体系有多少个PLL、这些PLL分别产生了哪些时钟、产生的时钟用来做什么的。 采用的是12MHZ,总共有2个PLL分别是MPLL、UPLL,MP
阅读全文
摘要:1、 2、GPIO 查阅芯片手册:GPIO 代码: 3、外设基地址初始化 打开arm核手册, 基地址为0x70000000,去搜芯片手册6410, 把这个基地址告诉处理器,通过协处理器的cp15, 转自http://comm.chinaaet.com/adi/blogdetail/40023.htm
阅读全文
摘要:1、ARM存储体系 2、cache 3、虚拟地址 那么谁来完成把虚拟地址转换成物理地址呢? 4、这个工作就由MMU来转换!! 5、关闭MMU和cache 他们都是通过cp15协处理器来控制的!应该在ARM核的手册里面搜索CP15 1、首先要使I/Dcache里面的数据无效 2、关闭I/D cache
阅读全文
摘要:1、关闭cpsr寄存器里面的I(中断)和F(快速中断)位; 2、设置中断屏蔽寄存器。 针对2440: 这是中断处理过程,当有中断源(没有子中断源)来的时候,它会把这个中断记录在SRCPND里面;它还要经过MASK屏蔽寄存器,如果我们对对应位屏蔽了,那么它就无法进入到IRQ这里来处理。对于有子中断源的
阅读全文
摘要:1、看门狗 作用 2、看门狗工作方式 3、原理图 时钟源来自于PCLK经过分频器,经过选择器,输出到作为看门狗定时器,WTDAT为一个预载值,当它计数为零的时候,还没有给WTDAT赋值,那么它会发出一个重启信号RESET。 找到S3C6410X文件,找到里面的watch dog章节, 关闭代码如下:
阅读全文
摘要:我们的Linux系统以及bootloader是工作在SVC模式!!怎么把处理器设置为SVC模式呢? CPSR寄存器或者SPSR寄存器最低5位可以设置模式,把该5位设置为0b10011, start.s文件
阅读全文