Skip to content

Latest commit

 

History

History
executable file
·
237 lines (126 loc) · 7.12 KB

第1个ARM裸板程序及引申.md

File metadata and controls

executable file
·
237 lines (126 loc) · 7.12 KB

第1个ARM裸板程序及引申

简单ARM裸板程序-点亮LED

步骤:看原理图确定引脚+看主芯片手册确定引脚控制方法+码代码

1536202730086.png

LED简介-贴片or插脚

1536202752877.png

1536202772483.png

不管怎样LED都是由两个引脚

1536202811420.png

LED符号

典型点亮LED方法

1536202830681.png

LED电阻一般很小

1536202866318.png

由于电阻非常小,电流太大容易烧掉,所以需要串联一个电阻

1536202901332.png

如果接到控制芯片呢?

1536203168122.png

控制芯片无非就是有很多引脚,通用引脚GPIO可以设定高低电平

1536203223358.png

两种方案,大同小异。

如果引脚驱动能力不够呢?不是所有引脚都是很强劲的。有些芯片为了省电,电压很低,怎么破?三极管也称为晶体管出来了

1536203369843.png

1536203496335.png

  • 一般都是主芯片引脚输出高低电平改变LED状态,具体高低点亮就要看芯片原理图
  • 然后就要看芯片手册,怎么控制引脚输出高低电平
  • 不关心GPIO引脚输出的电平是多少,3.3V或1.3V,简称输出1或0代表高低电平

电路基本知识

1536205688861.png

1536205747644.png

1536205808880.png

第四个引脚接地,比较正统

1536205825810.png

  • 三极管厉害的地方在于:它可以通过小电流控制大电流

秒懂三极管原理

假设三极管是个大坝,这个大坝奇怪的地方是,有两个阀门,一个大阀门,一个小阀门。小阀门可以用人力打开,大阀门很重,人力是打不开的,只能通过小阀门的水力打开。所以,平常的工作流程便是,每当放水的时候,人们就打开小阀门,很小的水流涓涓流出,这涓涓细流冲击大阀门的开关,大阀门随之打开,汹涌的江水滔滔流下。

1536206810861.png

如果不停地改变小阀门开启的大小,那么大阀门也相应地不停改变,假若能严格地按比例改变,那么,完美的控制就完成了。

1536206866035.png

在这里,be流向就是小水流,ce流向就是大水流,人就是输入信号。当然,如果把水流比为电流的话,会更确切,因为三极管毕竟是一个电流控制元件 。

  • 截止区:应该是那个小的阀门开启的还不够,不能打开打阀门,这种情况是截止区。
  • 饱和区:应该是小的阀门开启的太大了,以至于大阀门里放出的水流已经到了它极限的流量,但是 你关小 小阀门的话,可以让三极管工作状态从饱和区返回到线性区。
  • 线性区:就是水流处于可调节的状态。
  • 击穿区:比如有水流存在一个水库中,水位太高(相应与Vce太大),导致有缺口产生,水流流出。而且,随着小阀门的开启,这个击穿电压变低,就是更容易击穿了。

1536206981521.png

1536206985498.png

jz2440原理图-LED

1536207283096.png

1536207251960.png

1536207305019.png

1536207366066.png

1536207393646.png

n表示低电平有效,低电平表示灯亮。通过原理图看到GPF4

jz2440芯片手册-GPF4-LED

1536207466991.png

1536207560660.png

1536207578239.png

1536207616002.png

1536207658795.png

1536207748710.png

1536207757086.png

1536207811828.png

1536207849481.png

1536207818073.png

1536207833109.png

S3C2440框架及启动过程

  • SOC(System on chip)片上系统
  • GPIO(Gernel Purpose I/O)通用输入输出口

1536207982996.png

Nor启动过程,此时基地址为0的地址落在Nor上,片内RAM地址为0x4000,0000

  1. CPU读出Nor第一个指令(前四字节)执行
  2. CPU继续读出其他指令

Nand启动过程,此时基地址为0的地址落在片内SRAM中,SRAM开头为Nand Flash内容的拷贝,Nor Flash不可访问

  1. 2440硬件将Nand前4KB内容复制到片内内存SRAM然后CPU从0地址处取指执行

jz2440点亮led

1536281741859.png

1536281852309.png

S3C2440属于soc,片上集成处理器,不仅包括CPU还包括一波寄存器和IO控制器

1536281997023.png

并没有避免修改其他寄存器设置。。简单粗暴,其实要用与或进行。

1536282062063.png

LDR R0,[R1]   			;读取R1地址值存到R0中,四字节
STR R0,[R1]					;将R0寄存器的值写到R1所指向的地址处,四字节
B             			;跳转
MOV R0,R1     			;R0 = R1
MOV R0,#0x100 			;R0 = 0x100
LDR R0,=0x12345678	;伪指令,拆分成几条指令arm指令

LDR R0,任意值 会被拆分成多条arm指令

MOV R0,0X12345678

ARM精简指令集,长度固定32位的话,0x12345678已经32位了,剩下的位肯定不能保存操作码

1536282584668.png

1536282605905.png

简单值成为立即数,无非就是位数有限

代码编写LED点亮

  1. 配置GPF4引脚位输出引脚
  2. 配置GPF4输出高电平

1536282841775.png

1536282726319.png

1536282787519.png

程序结束必须添加死循环,为了避免执行到后续指令

1536282813968.png

交叉编译

1536282939729.png

1536282955314.png

1536282972170.png

烧写程序

1536283009658.png

1536283029026.png