arm_day03

s5pv210处理器

datasheet 数据手册

 

 

初步认识

三星

ARMCortex-A8  1G   32位的处理器

寻址地址:0x0-0xFFFFFFFF(0~4G-1)4G bytes 线性编址

外设控制器

 

GPIO通用输入输出

 

将TPAD的LED1灯点亮

硬件原理图

LED1在底板,底板原理图

arm/硬件原理图/CW210-Peripherial.pdf(底板原理图)

核心板原理图:

CW210_CORE_TARENA.pdf(TARENA)

CW210_CORE_LHGZ.pdf(融慧广泽)

 

VDD5V:5V电源

GND:接地

Q1:三极管,数字电路中的三极管相当于电子开关,用来控制电路的导通和断开。

给Q1高电平,数字1,三极管导通,整个电路导通,LED1亮

 给Q1低电平,数字0,三极管截至,整个电路断开,LED1灭

 

GPC1_3管脚接到原理图的什么位置

GPC1_3到核心板原理图

 

 

 

GPC1_3

GPC0_3两个CPU(s5pv210)上的管脚

 

GPIO:CPU中所有的外设接口中最简单的一种接口,通用的IO口,IO就是输入输出,可以通过编程实现IO管脚输出高电平或者低电平,也可以输入高低电平

 

 

如何使得GPC1_3或者GPC0_3两个管脚产生高低电平?

要解决此问题,s5pv210的datasheet

P92

GPIO :237个 CPU中管脚绝大多数都是复用,多功能

 

GPC1组,共有5个管脚

GPC1_0

GPC1_1

GPC1_2

GPC1_3

GPC1_4

GPC0组,共有5个管脚

GPC0_0

GPC0_1

GPC0_2

GPC0_3

GPC0_4

 

寄存器

P141

P139

 

GPC1CON寄存器  0xE0200080

 

当GPC1_3管脚确定了输出功能后,如何具体的输出高低电平?

GPC1DAT寄存器

 

上下拉电阻寄存器

禁用CPU内部的上下拉电阻

 

什么上下拉电阻:

上拉电阻:

若按键按下,则XEINT0管脚向CPU输入低电平

若按键松开,则XEINT0管脚向CPU输入高电平

如果没有外接3.3V电源和上拉电阻,XEINT0管脚悬空,状态不确定,可能是高电平,也可能是低电平,上拉电阻就是保证了按键没有被按下时,该管脚有一个确定电平状态,高电平。

 

下拉电阻:

若按键按下,则XEINT0管脚向CPU输入高电平

若按键松开,则XEINT0管脚向CPU输入低电平

如果没有外接GND和下拉电阻,XEINT0管脚悬空,状态不确定,可能是高电平,也可能是低电平,下拉电阻就是保证了按键没有被按下时,该管脚有一个确定电平状态,低电平。

 

s5pv210处理器,如何控制GPC1_3管脚

输出高电平或者低电平,具体步骤如下:

1.配置GPC1_3管脚的功能为输出功能

   GPC1CON  0xE0200080

   bit[15:12]为0001(二进制),表示输出功能

2.禁止GPC1_3管脚的内部上下拉电阻

   GPC1PUD  0xE0200088

   bit[7:6]为00,表示禁止内部上下拉电阻

3.使得GPC1_3管脚产生高电平或低电平

   GPC1DAT  0xE0200084

   bit[3] 为1  向三极管输出高电平   LED1亮

         为0  向三极管输出低电平   LED1灭

 

s5pv210处理器,如何控制GPC0_3管脚

输出高电平或者低电平,具体步骤如下:

1.配置GPC0_3管脚的功能为输出功能

   GPC0CON  0xE0200060

   bit[15:12]为0001(二进制),表示输出功能

2.禁止GPC0_3管脚的内部上下拉电阻

   GPC0PUD  0xE0200068

   bit[7:6]为00,表示禁止内部上下拉电阻

3.使得GPC0_3管脚产生高电平或低电平

   GPC0DAT  0xE0200064

   bit[3] 为1  向三极管输出高电平   LED1亮

         为0  向三极管输出低电平   LED1灭

 

写程序:

 

GPC1PUD&= ~0xC0;   1100   0011

 

0x000000C0

0xFFFFFF3F

二进制:(24个1) 00111111

 

GPC1DAT |=8

             1000

 

 

 

arm-linux-gcc -march=armv5te-nostdlib -c -o led.o led.c

arm-linux-ld -nostartfiles-nostdlib -Ttext=0x20008000 -e led_main -o led led.o

arm-linux-objcopy  -O  binary led  led.bin

 

 

启动开发板:

tarena#tftp  0x20008000   led.bin

tarena#go   0x20008000

 

思考:如何让LED1闪烁

 

GPC1DAT

       循环体{

bit[3]=1

          延时

          bit[3]=0

          延时

        }

 

源文件—>可执行文件

1.预处理

2.编译   .cà.S(大写)

   C 语言 –> 汇编语言(低级语言)

3.汇编  .S(大写)->.o

   汇编语言—>机器语言

4.链接

   可执行文件(ELF格式,有操作系统的主机可执行)

   ELF->bin(二进制格式,裸板执行)

 

 

 

 

反汇编:(由可执行程序到汇编程序)

arm-linux-objdump  -d  led>led.s

 

tarena#tftp  20008000   led.bin

tarena#go   20008038

 

 

 

arm-linux-gcc -march=armv5te-nostdlib -c -o led.o led.c

-march=armv5te指定生成的指令的架构

-nostdlib 指定不使用标准库

 

arm-linux-ld -nostartfiles-nostdlib -Ttext=0x20008000 -e led_main  -o led  led.o

-nostartfiles不使用启动文件

-nostdlib    不使用标准库

-Ttext       指定代码段的起始地址

-e  led_main 指定程序的入口点,消除警告

led是ELF格式的可执行文件,必须在有操作系统的情况下,才能执行

 

arm-linux-objcopy  -O  binary led  led.bin

将ELF 可执行文件led转换成能在裸板上运行led.bin

 

Makefile

make

 

 %.o:%.c

          $(CC) $(CFLAGS)  -c  -o  $@  $<

 

%:表示*

$@:表示*.o

$<:表示*.c

 

蜂鸣器:

如何使得蜂鸣器响

 

原理图

 

GPD0_1管脚的操作

GPIO口

GPD0_1设置为输出功能

禁止GPD0_1管脚内部上下拉电阻

使GPD0_1管脚产生高低电平

         高电平:蜂鸣器响

         低电平:蜂鸣器不响

 

找到对应的寄存器

GPD0CON

GPD0PUD

GPD0DAT

 

GPIO

输入输出

s5pv210

采用分组的方式进行管理

GPA0

GPA1

GPAB

GPC0

GPC1

 

操作该组管脚对应的SFR(特殊功能寄存器),就能实现对管脚的操作

GPC1CON  控制寄存器,配置管脚的功能

   GPC1_3  bit[15:12]

GPC1PUD  禁止内部上下拉电阻

   GPC1_3  bit[7:6]

GPC1DAT

   GPC1_3  bit[3]

           

 

串口

UART

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ARM体系结构)