当前位置: 首页 > article >正文

LV.12 D12 GPIO实验 学习笔记

一、GPIO简介

        GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出

芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能

实验步骤
    1. 通过电路原理图分析LED的控制逻辑 

    2. 通过电路原理图查找LED与Exynos4412的连接关系

    3. 通过数据手册分析GPIO中哪些寄存器可以控制LED

    4. 通过程序去操控对应的寄存器完成对LED的控制
 

二、GPIO寄存器分析

高电平导通,低电平截止

 

 

 

 

  该实验需要输出,所以就是Output模式,GPX2CON[7] = 0x1

 输出高电平就对应位写1,输出低电平就对应位写0

三、GPIO编程

预处理->编译->汇编->链接

gcc -E

gcc -S

gcc -c

gcc

链接使用的工具是ld,objcopy是对可执行文件进行转化

.elf是Linux可执行文件的后缀

-Ttext 0x40005000  是将程序放到内存上,保证程序可以执行。

led-asm.s:

.text
_start:
 
LED_CONFIG:
    LDR R2, =0x11000c40
    LDR R1, =0x10000000
    STR R1, [R2]

LED_ON:
    LDR R2, =0x11000c44
    LDR R1, =0x00000080
    STR R1, [R2]
    B STOP

LED_OFF:
    LDR R2, =0x11000c44
    LDR R1, =0x00000000
    STR R1, [R2]
 
STOP:
        B STOP
.end

 Makefile:

 TARGET = led-asm
  CROSS_COMPILE = arm-none-linux-gnueabi-
  CC = $(CROSS_COMPILE)gcc
  LD = $(CROSS_COMPILE)ld
  OBJCOPY = $(CROSS_COMPILE)objcopy
  
  all:
          $(CC) -c $(TARGET).s -o $(TARGET).o
          $(LD) $(TARGET).o -Ttext 0x40005000 -o $(TARGET).elf
         $(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin
 
  clean:
         rm $(TARGET).o $(TARGET).elf $(TARGET).bin

然后通过共享文件夹吧编译好的.bin文件传给windows

 先输入loadb 0x40008000,把程序下载到0x40008000地址,然后发送Kermit协议的文件,选择led-asm.bin文件,然后输入go 0x40008000,跳转到0x40008000地址执行程序。led就会熄灭。

 四、LED实验

 写一个程序让LED2闪烁

.text
_start:

MAIN:
    BL LED_CONFIG
LOOP:
    BL LED_ON
    BL DELAY
    BL LED_OFF
    BL DELAY
    B LOOP 

LED_CONFIG:
    LDR R2, =0x11000c40
    LDR R1, =0x10000000
    STR R1, [R2]
    MOV PC, LR

LED_ON:
    LDR R2, =0x11000c44
    LDR R1, =0x00000080
    STR R1, [R2]
    MOV PC, LR

LED_OFF:
    LDR R2, =0x11000c44
    LDR R1, =0x00000000
    STR R1, [R2]
    MOV PC, LR
DELAY:
    LDR R1, =100000000
L:
    SUB R1, R1, #1
    CMP R1, #0
    BNE L
    MOV PC, LR    

STOP:
    B STOP
.end

再写一个让LED3闪烁

 

 让LED3闪烁的程序如下:

.text
_start:

MAIN:
    BL LED_CONFIG
LOOP:
    BL LED_ON
    BL DELAY
    BL LED_OFF
    BL DELAY
    B LOOP 

LED_CONFIG:
    LDR R2, =0x11000c20
    LDR R1, =0x00000001
    STR R1, [R2]
    MOV PC, LR

LED_ON:
    LDR R2, =0x11000c24
    LDR R1, =0x00000001
    STR R1, [R2]
    MOV PC, LR

LED_OFF:
    LDR R2, =0x11000c24
    LDR R1, =0x00000000
    STR R1, [R2]
    MOV PC, LR
DELAY:
    LDR R1, =100000000
L:
    SUB R1, R1, #1
    CMP R1, #0
    BNE L
    MOV PC, LR    

STOP:
    B STOP
.end


http://www.kler.cn/news/108670.html

相关文章:

  • Makefile泛谈
  • 9、电路综合-基于简化实频的任意幅频响应的微带电路设计
  • 【zookeeper】zk的ZAB原子广播协议
  • C语言实现输入一个字符串,递归将其逆序输出
  • appium操控微信小程序的坑
  • 【iOS】——知乎日报第二周总结
  • 【Java】Map集合中常用方法
  • 【2023年NCST C语言新生培训】| 五次培训总结 | C到C++内容补充 | 排位赛详细题解 |《万字长文》
  • Python之函数-传实参的两种方式
  • UNUNX安全的交易所
  • 大数据与人工智能的未来已来
  • 手写IOC
  • 不做学习的奴隶,更要注重生活
  • IntelliJ IDEA 常用快捷键-个人查阅
  • modelsim仿真报错:vlog-2388 ‘scl‘ already declared in this scope
  • Python求n位的自幂数
  • Maven第一章:Maven安装、验证、使用
  • 基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(二)板卡总体设计
  • html2pdf
  • Python实现双目标定、畸变矫正、立体矫正
  • 方太描画未来厨房的模样
  • CV计算机视觉每日开源代码Paper with code速览-2023.10.27
  • 2023上半年系统集成项目管理工程师下午真题
  • 【驱动开发】基于GPIO子系统编写LED驱动,编写应用程序进行测试设置定时器,5秒钟打印一次hello world
  • 嵌入式 Tomcat 调校
  • ABBYY FineReader PDF15免费版图片文件识别软件
  • Dockerfile镜像实战
  • ZYNQ连载02-开发环境
  • Pritunl搭建OpenVPN服务器详细流程,快速实现公网远程连接!
  • 【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性