GPIO学习笔记

本文详细介绍了GPIO(通用输入输出)在嵌入式系统中的使用,从汇编语言出发,演示了如何通过配置寄存器来控制GPIO口,点亮和熄灭LED。接着,通过C语言实现轮流点亮多个LED,并讲解了如何设置栈、调用C函数。最后,介绍了如何读取按键状态,根据按键控制LED的亮灭。文中提供了详细的代码示例及步骤,适合嵌入式初学者学习。
摘要由CSDN通过智能技术生成

Gpio实验

 

一 用汇编点亮一个led

  1 看原理图 GPK4=0 ,led亮  GPK4=1,led灭

 2  怎么让GPK4输出高低电平 (看芯片手册,操作寄存器实现)

      配置功能:输入/输出/其他

      设置其输出高/低电平

  3 查看用户手册

   GPK4[19:16]

0000 = Input                     0001 = Output

0010 = Host I/F DATA[4]          0011 = HSI TX READY

0100 = Reserved                            0101 = DATA_CF[4]

0110 = Reserved                            0111 = Reserved

 GPKDAT 在第4位写写0就对应GPK4

GPK[15:0] [15:0]

When the port is configured as input port, the correspondingbit is the pin state.

When the port is configured as output port, the pin state isthe same as the

corresponding bit. When the port is configured as functionalpin, the undefined

value will be read.

 

Register    Address        R/W    Description Reset             Value

GPKCON0  0x7F008800     R/W PortK Configuration Register 0  0x22222222

GPKCON1  0x7F008804     R/W  PortK Configuration Register 1  0x22222222

GPKDAT   0x7F008808     R/W  Port K Data Register            Undefined

GPKPUD  0x7F00880C      R/W  Port K Pull-up/downRegister     0x55555555

 

协处理器

查看arm11芯片手册:

Cpu 访问的地址:内存0-0x6fff ffff

外设0x7000 0000-0x7fff ffff

 

 

 

c15 0 c2 4 Peripheral Port Memory

Remap

R/W, B, X R/W 0x00000000 page3-174

CRn Op1 CRm Op2 Register oroperation S type

NS

type

Reset

value

Page

 

b10011 = 256MB

 

For example:

MRC p15, 0, <Rd>, c15, c2,4 ; Read Peripheral Port Memory Remap Register

MCR p15, 0, <Rd>, c15, c2,4 ; Write Peripheral Port Memory Remap Register

 

查看6410用户手册

Register  Address R/W  Description  Reset Value

WTCON 0x7E004000 R/W Watchdogtimer control register  0x8021

 

 

示例代码如下:

start.S文件

.globl _start

_start:

/*硬件的相关设置:把外设的基地址告诉cpu*/

        ldr r0,=0x70000000 @伪汇编指令

        orrr0,r0,#0x13  @按位逻辑或操作

        mcrp15,0,r0,c15,c2,4 @b10011 = 256MB ,arm寄存器到协处理寄存器的数据传输

/*关闭看门狗*/

/*往往WTCON(0x7E004000)写0*/

        ldrr0,=0x7E004000  @字数据读取指令

        mov r1,#0  @数据传送指令

        strr1,[r0]     @将寄存器中数据写入到内存单元

/*设置GPKCON GPK4作为输出引脚*/

        ldr r1,=0x7F008800  @gpkcon的地址

        movr0,#0x10000000  @设为输出引角

        strr0,[r1]   @将寄存器数据写入到内存单元

/*设置GPKDAT让GPK4输出0*/

        ldr r1,=0x7F008808   @gpkdat的地址

        mov r0,#0

        str r0,[r1]

halt:

        b halt

 

 

Makefile文件 

1 Windows下的makefile文件

all : led.bin

led.bin:start.o

       arm-elf-ld -Ttext 0 -o led.elf start.o

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

       arm-elf-objdump -D led.elf > led.dis

 

start.o :start.S

       arm-elf-gcc -o start.o start.S -c

 

clean:

       rm *.o led.elf led.bin led.dis

 

2  Linux下的makefile文件          

led.bin: start.o

@-Ttext 0 表示代码段的地址为0

@nandFlash前4k数据会放到sram中,cpu从0地址开始读取

        arm-linux-ld-Ttext 0 -o led.elf start.o

@输出二进制文件

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

       arm-linux-objdump -D led.elf > led.dis

 

start.o : start.S

        arm-linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值