单片机
返回首页

GPIO接口及点亮第一个LED灯

2024-12-03 来源:cnblogs

一、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


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    


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章