GPIO接口及点亮第一个LED灯

一、GIPIO介绍

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

1.GPIO的优点
  • 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。
  • 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。
  • 小封装:GPIO器件提供最小的封装尺寸 ― 3mm x 3mm QFN!
  • 低成本:您不用为没有使用的功能买单。
  • 快速上市:不需要编写额外的代码、文档,不需要任何维护工作。
  • 可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。
2.GPIO的寄存器
    • GPxCON 寄存器
      用于配置引脚功能。 PORT A 与 PORT B~PORT H/J 在功能选择上有所不同,GPACON 中每一位对应一根引脚,共 23 个引脚。当某位被设为 0 时候,相应引脚为 输出引脚。此时我们可以在GPADAT 中相应的写入 1或者 0 来让此引脚输出高电平或者低电平;当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADATA无用。
      一般而言 GPACON 通常被设为 1 ,以便访问外部器件。
      PORT B~PORT H/J在寄存器操作方面完全相同,GPxCON 中每两位控制一根引脚,

      • 00 输入
      • 01 输出
      • 10 特殊功能
      • 11 保留不用
    • GPxDAT 寄存器
      GPxDAT用于读写引脚,当引脚被设为输入时候,读此寄存器可知道相应引脚的电平状态高还是低,当引脚被设为输出时候,写此寄存器的位,可令引脚输出高电平还是低电平。
    • GPxUP寄存器
      GPxUP寄存器某位为1时,相应管脚没有内部上拉电阻;为 0 时候 相应管脚有内部上拉电阻。
      上拉电阻作用在于,当GPIO 引脚处于第三种状态时候,既不是输出高电平,也不是输出低电平。而是呈现高阻态,相当于没有接芯片。它的电平状态由上下拉电阻决定。

二、控制LED实例

1.查看硬件原理图

2.查看数据手册
  • 在三星公司提供的DataSheet手册中找到介绍GPIO的章节

3.确定关键定义
    • GPJ0CON寄存器
      寄存器地址:0xE0200240
      要控制的位数:[15:12]
      要设置的二进制数据:0b0001
    • GPJ0PUD寄存器
      寄存器地址:0xE0200248
      要控制的位数:[7:6]
      要设置的二进制数据:0b00
    • GPJ0DAT寄存器
      寄存器地址:0xE0200244
      要控制的位数:[3]
      要设置的二进制数据:0b1
4.编写程序
start:
    @;配置GPJ0CON寄存器 Address=0xE0200240 [15:12]=0b0001
    ldr r0,=0xE0200240
    ldr r1,=0x1000
    str r1,[r0]

    @;配置GPJ0PUD寄存器 Address=0xE0200248 [7:6]=0b00
    ldr r0,=0xE0200248
    ldr r1,=0x0
    str r1,[r0]

    @;配置GPJ0DAT寄存器 Address=0xE0200244 [3]=1
    ldr r0,=0xE0200244
    ldr r1,=0x4
    str r1,[r0]
5.实例测试

生成目标文件
arm-linux-gcc -c led.S

生成可执行文件
arm-linux-gcc -Ttext 0x34000000 -nostartfiles -nostdlib led.o -o led

生成独立执行的二进制
arm-linux-objcopy -O binary led led.bin

使用tftp命令下载
tftp 0x34000000 led.bin

使用go命令执行
go 0x34000000

6.简单的流水灯实现

.global _start
_start:
    ldr r0, =0x11111111
    ldr r1, =0xE0200240
    str r0, [r1]

    ldr r0, =0x11111111
    ldr r1, =0xE02000A0
    str r0, [r1]

flash:
    ldr r0, =(1<<1)
    ldr r1, =0xE02000A4
    str r0, [r1]

    ldr r0, =~(1<<3)
    ldr r1, =0xE0200244
    str r0, [r1]
    bl delay

    ldr r0, =~(1<<4)
    ldr r1, =0xE0200244
    str r0, [r1]
    bl delay

    ldr r0, =~(1<<5)
    ldr r1, =0xE0200244
    str r0, [r1]
    bl delay

    ldr r0, =~(1<<1)
    ldr r1, =0xE02000A4
    str r0, [r1]
    bl delay

    b flash

delay:
    ldr r2, =100000000
    ldr r3, =0x0
delay_loop:
    sub r2, r2, #1
    cmp r2, r3
    bne delay_loop

    mov pc, lr    

原文地址:https://www.cnblogs.com/xiehuan-blog/p/9704240.html

时间: 2024-11-07 09:47:15

GPIO接口及点亮第一个LED灯的相关文章

2016.12.12 点亮第一个LED灯

一.keil编译程标准流程 注意事项: 1.建立的 工程 和 .c文件 文件名一样. 二.LED模块图 三.点亮第一个LED灯代码:    

[MSP430DriverLib-1]使用库开发并点亮第一个LED灯

???? MSP430DriverLib库下载地址:http://www.ti.com/tool/MSPDRIVERLIB ???? 下载后进入driverlib文件夹,选择对应的型号,这里我选择的是MSP430F5xx_6xx,进入后将里面的文件都复制到你的msp430工程目录下即可.这里我将要复制的文件都放在DriverLib文件夹里. ???? 这里我用的是TI的MSP430F5529 LaunchPad Evaluation Kit的板子.首先我们来点亮第一个LED,以下为源代码: #i

第8课 点亮第一个LED灯

8.1 点亮LED 硬件连接图, 由硬件图可知,当175引脚GPIO[0]输出为0时,LED点亮,当GPIO[0]输出为1时,LED就熄灭,GPIO寄存器的基地址为0x8000d000,下图为用到的几个寄存器的偏移地址 首先,选中GPIO引脚, *((unsigned short *)(0x8000d000+0x00)) = 0x5555; *((unsigned short *)(0x8000d000+0x04)) = 0x5555; 然后,GPIO[0]作为输出,其余的引脚置为输入. *((

BlinkLED 点亮第一个LED灯(C#)

界面: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox Name="infoText" Text="Ready" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center&q

BlinkLED 点亮第一个LED灯

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT) while True: GPIO.output(25,GPIO.HIGH) time.sleep(0.5) GPIO.output(25,GPIO.LOW) time.sleep(0.5)

ESP8266-12F学习之点亮一个LED灯

点亮一个LED灯     上一篇文章,我们介绍了怎么在Windows系统下搭建一个SEP8266的开发环境,那在这一篇文章中我们要开始来编写一个硬件入门经典小程序,如何点亮一个LED小灯,同时在这一章中我们还会介绍怎么样将编译好的程序下载到ESP8266-12f中.  第一步:下载官方demo框架,从http://wiki.ai-thinker.com/esp8266/examples 下载,当然,也可以在文章最后下载我的附件,下载完后,我们将文件添加到SDK中进行编译,步骤如图: 点开C/C+

nodejs和树莓派开发以及点亮RGB的LED灯代码

前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ssh [email protected](ip)密码:raspberry 设置显示设备 推荐选购3.5吋或者5吋的HDMI显示设备,我第一次买的3.2吋的串口显示器,占用了我20个串口的针脚. 设备链接见这里 使用3.5吋显示器 cd /boot/LCD-show/./LCD35-show使用HDMI

点亮一个LED灯

设计定义: 二选一多路器 两个输入IO,a.b.可以是高电平, 输入按键按下时,LED灯与a端口状态保持一致, 按键释放时,LED灯与b端口状态保持一致 设计输入:创建一个project 编写功能代码 module LED(a,b,key_in,led_out); input a;//输入端口a,b: input b; input key_in;//按键输入,实现输入通道的选择 output led_out;//led控制端口 assign led_out=(key_in==0)?a:b;//当

在 S5PV210 的 开发板上 点亮 一个 LED 灯

参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准备 一个 Ubuntu  32位 ,装上 交叉编译链.. 使用下面 代码 和 Makefile 文件 进行编译  ,生成的  执行 文件  利用 winscp 软件复制到 Linux开发板上 ,利用 xshell 运行 这个可执行文件. 下面    代码的  功能  是   新建 一个 TCP 客户