Linux裸机开发学习笔记(四)

Linux裸机开发学习笔记(四)

韦东山裸机开发教程学习笔记
(使用arm开发板-S3C2440)

九、第一个ARM程序
1、第一个程序-点亮LED步骤
(1)看原理图确定控制LED的引脚
  a)二极管单向导通,反向截止
  b)NPN型三极管:P->N相当于一个二极管,P->导通,三极管NPN导通
  c)PNP型三极管:P->N相当于一个二极管,P->导通,三极管PNP导通
Linux裸机开发学习笔记(四)_第1张图片
Linux裸机开发学习笔记(四)_第2张图片

(2)看主芯片手册,确定如何设置/控制引脚

  a)主芯片引脚输出高低电平,即可点亮LED灯
  b)我们不关心GPIO引脚输出的具体电压是多少,只关心输出是高低电平
  c)输出:逻辑1为-高电平,逻辑0为-低电平
  d)原理图中线的标识称为net,同名net表示连在一起
  e)net的名称:n开头,代表低电平有效
Linux裸机开发学习笔记(四)_第3张图片

(3)怎么让GPF4输出I/O
  a)配置为输出引脚
  b)设置引脚状态
Linux裸机开发学习笔记(四)_第4张图片

(4)S3C2440的框架及启动流程
  a)GPIO:通用的输入输出口
  b)Nor启动:Nor flash基地址为0,片内RAM地址为0x4000,00000,CPU读出Nor上
第一个指令(前四字节)执行,CPU继续读出其他指令执行
  c)Nand启动:片内4kRAM基地址为0(Nor flash不可访问),2440的硬件把Nand前4k内容
复制到片内RAM中,然后CPU从0地址取出第一条指令开始执行
  d)大部分CPU从0地址开始启动
(5)编写程序,点亮LED
  a)直接访问:CPU可访问CPU内部的寄存器
  b)间接访问:CPU访问GPIO控制器的寄存器,必须以地址访问
  c)配置为输出引脚:把0x100写入GPFCON,及写到地址为0x5600,0050上
  d)设置引脚状态:高电平,把0x10写到地址为0x56000054上
低电平,把 0写到地址为0x56000054上
  e)LDR(load):读内存命令,LDR R0 [R1] 读取地址R1上的数据(4个字节),保存到R0中
  f)STR(store):写内存命令,STR R0 [R1] 把R0的值写到地址R1中
  g)B:跳转
  h)mov:MOV R0, R1 把R1的值赋给R0
MOV R0,#0X100 R0=0X100
  i)LDR R0,=0X12345678 结果R0=0x12345678
  这是一条伪指令,会被拆分成几条真正的RAM指令
一条RAM指令占32位,包括指令本身,被赋值的区域等,剩下的复制部分不足32位,
不能表示任意值,只能表示简单值(被称为立即数),所以引入了伪指令LDR R0,=任意值
2、ARM指令
Linux裸机开发学习笔记(四)_第5张图片

  用户模式(User),管理模式(Svc),普通中断模(IRQ),快速中断模式(FIQ)等
  r0-r3主要用于子程序间传递参数,r4-r11 主要用于保存局部变量;r12 用作子程序间scratch 寄存器,即IP寄存器;r13 通常用做栈指针,即 SP;r14寄存器又被称为连接寄存器(lr),用于保存子程序以及中断的返回地址;r15用作程序计数器(pc),ARM 采用了流水线机制,当读取 PC 的值后,该值为当前指令地址加8个字节,即 PC 指向当前指令的下两条指令地址。

你可能感兴趣的:(linux_s3c2440,linux,操作系统,嵌入式,arm)