目录

  • 1、 一步步点亮LED1_硬件工作原理及原理图查阅
  • 2、数据手册查阅及相关寄存器浏览
  • 3、从零开始手写汇编点亮LED
    • a、GPxCON、GPxDAT寄存器分析
    • b、从零开始写代码操作寄存器
    • c、编译、下载、运行看结果
  • 总结和回顾(软件控制硬件思想、寄存器意义、原理图数据手册的作用)

1、 一步步点亮LED1_硬件工作原理及原理图查阅

查阅原理图,发现开发板上一共有5颗LED。其中一颗D26的接法是:正极接5V,负极接地。因此这颗LED只要上电就会常亮。因此我们分析这颗LED是电源指示灯。
剩下4颗LED的接法是:正极接3.3V,负极接了SoC上的一个引脚(GPIO),具体详细接法是:
D22:GPJ0_3
D23:GPJ0_4
D24:GPJ0_5
D25:PWMTOUT1(GPD0_1)

2、数据手册查阅及相关寄存器浏览

GPIO概念的引入
GPIO:general purpose input output 通用输入输出
GPIO就是芯片的引脚(芯片上的引脚有些不是GPIO,只有一部分是),作为GPIO的这类引脚,他的功能和特点是可以被编程控制它的工作模式,也可以编程控制他的电压高低等。
通过之前的分析我们知道,我们设计电路时就把LED接在了一个GPIO上,这样我们就可以通过编程控制GPIO的模式和输入输出值来操控LED亮还是灭;如果你当时设计电路时把LED接在非GPIO上那就不可能了。

阅读数据手册中有关部分
当我们想要通过编程操控GPIO来操作LED时,我们首先需要通读一下S5PV210的数据手册中有关于GPIO的部分,这部分在数据手册的Section2.2中。

GPIO相关的寄存器介绍
回忆下之前说过的,软件操作硬件的接口是:寄存器
我们当前要操作的硬件是LED,但是LED实际是通过GPIO来间接控制的,所以当前我们实际要操作的设备其实是SoC的GPIO。要操作这些GPIO,必须通过设置他们的寄存器。

查阅数据手册可知,GPJ0相关的寄存器有以下:
GPJ0CON, (GPJ0 control)GPJ0控制寄存器,用来配置各引脚的工作模式
GPJ0DAT, (GPJ0 data)当引脚配置为input/output模式时,寄存器的相应位和引脚的电平高低相对应。
GPJ0PUD, (pull up down)控制引脚内部弱上拉、下拉
GPJ0DRV, (driver)配置GPIO引脚的驱动能力
GPJ0CONPDN,(记得是低功耗模式下的控制寄存器)
GPJ0PUDPDN  (记得是低功耗模式下的上下拉寄存器)
注:在驱动LED点亮时,应该将GPIO配置为output模式。实际上真正操控LED的硬件,主要的有:GPJ0CON, GPJ0DAT 这么2个。
如何点亮LED,编程的步骤是:
1、操控GPJ0CON寄存器中,选中output模式
2、操控GPJ0DAT寄存器,相应的位设置为0

3、从零开始手写汇编点亮LED

a、GPxCON、GPxDAT寄存器分析

GPJ0端口一共有8个引脚,分别记住:GPJ0_0 ~ GPJ0_7,相关重要寄存器就是GPJ0CON和GPJ0DAT
GPJ0CON寄存器中设置8个引脚的工作模式(32/8=4,每个引脚可以分到4位,譬如GPJ0_0对应的bit位为bit0 ~ bit3 ,GPJ0_3对应的位为bit12~bit15。工作方法是:给相应的寄存器位写入相应的值,该引脚硬件就会按照相应的模式去工作。譬如给bit12~bit15写入0b0001,GPJ0_3引脚就成为输出模式了)

b、从零开始写代码操作寄存器

需要哪些先决条件才能写呢?
1. 硬件接法和引脚:GPJ0_3 GPJ0_4 GPJ0_5 低电平亮/高电平灭
2. GPJ0CON(0xE0200240)寄存器和GPJ0DAT(0xE0200244)寄存器
3. 工程管理:Makefile等
根据以上分析,我们就知道代码的写法了,代码所要完成的动作就是:
把相应的配置数据写入相应的寄存器即可。

.globl _start_start: 设置GPJ2CON的bit[0:15],配置GPJ2_0/1/2/3引脚为输出功能// 设置GPJ0CON的bit[12:23],配置GPJ0_3/4/5引脚为输出功能ldr r1, =0xE0200240                  ldr r0, =0x00111000str r0, [r1]mov r2, #0x1000led_blink: 设置GPJ2DAT的bit[0:3],使GPJ2_0/1/2/3引脚输出低电平,LED亮// 设置GPJ0DAT的bit[3:5],使GPJ0_3/4/5引脚输出低电平,LED亮ldr r1, =0xE0200244                     mov r0, #0str r0, [r1]// 延时bl delay                          设置GPJ2DAT的bit[0:3],使GPJ2_0/1/2/3引脚输出高电平,LED灭// 设置GPJ0DAT的bit[3:5],使GPJ0_3/4/5引脚输出高电平,LED灭ldr r1, =0xE0200244                  mov r0, #0x38str r0, [r1]// 延时bl delay  sub r2, r2, #1cmp r2,#0bne led_blinkhalt:b haltdelay:mov r0, #0x900000
delay_loop:cmp r0, #0sub r0, r0, #1bne delay_loopmov pc, lr

c、编译、下载、运行看结果

译时用我们的工程管理,直接make编译得到led.bin和210.bin
下载运行可以用usb启动dnw下载;也可以用sd卡烧录下载,根据自己的情况用
一般都用usb下载,因为方便。如果电脑主板插上dnw会死机没法解决,那只有sd卡下载启动了。
注意:开发板上按下电源键之后4颗LED默认都是半亮的,当我们下载程序后其中3颗变的很亮,这说明我们的程序已经运行了。

总结和回顾(软件控制硬件思想、寄存器意义、原理图数据手册的作用)

软件到底是怎么控制硬件的?为什么程序一运行硬件就能跟着动?
软件编程控制硬件的接口就是:寄存器

arm裸机【4】 --- 一步步点亮LED(一)相关推荐

  1. 1.4.ARM裸机第四部分-GPIO和LED

    1.4.1.裸机实验体验之usb启动配合dnw工具下载 1.4.1.1.背景知识介绍 回顾S5PV210的启动方式,必须将OM5打到VCC,才能从USB启动. S5PV210的启动过程:开机时先执行内 ...

  2. 《1.4.ARM裸机第四部分-GPIO和LED》

    转发自 朱有鹏老师 嵌入式linux-核心开发教程 课件 在此对朱老师表示感谢! 第一部分.章节目录 1.4.1.裸机实验体验之usb启动配合dnw工具下载 1.4.2.裸机实验体验之SD卡下载 1. ...

  3. 关于FS4412的ARM开发环境搭建并点亮LED灯

    目录 一.ARM开发环境搭建 1.安装 GCC 编译工具 2.安装 Yagarto 工具包 3.安装FS-JTAG调试软件 4.安装JRE 5.安装FS-JTAG驱动 6.安装USB转串口驱动 7.安 ...

  4. ARM裸机开发——Linux环境搭建和LED灯闪烁实验

    写在前面  本文为学校开展的嵌入式系统设计课程,本文主要是记录课程中的相关作业与学习记录,本课程采用了S3C2440A嵌入式系统开发板,由于主要以学校开展课程为主,本文内容可能有一定的课程资料辅助以及 ...

  5. 一步步点亮LED3_从零开始手写汇编点亮LED

    1.GPxCON.GPxDAT寄存器分析 GPJ0端口一共有8个引脚,分别记作:GPJ0_0 ~ GPJ0_7,相关重要寄存器就是GPJ0CON和GPJ0DAT GPJ0CON寄存器中设置8个引脚的工 ...

  6. 点亮LED硬件工作原理及原理图查阅

    一步步点亮LED:首先分析LED硬件工作原理及查阅理图得知硬件是怎么接的. 1.LED物理特性介绍 LED本身有2个接线点,一个是LED的正极,一个是LED的负极.LED这个硬件的功能就是点亮或者不亮 ...

  7. 1.3.ARM裸机第三部分-开发板、原理图和数据手册

    以上内容来自<朱老师物联网大课堂>, QQ群: 397164505 第一部分.章节目录 1.3.1.开发板和光盘资料简介 1.3.2.开发板硬件手册带读 1.3.3.开发板刷系统1 1.3 ...

  8. ARM裸机的知识总结(4) ------- 利用GPIO控制LED

    一.一步步点亮LED1_硬件工作原理及原理图查阅 1.LED物理特性介绍 LED本身有2个接线点,一个是LED的正极,一个是LED的负极.LED这个硬件的功能就是点亮或者不亮,物理上想要点亮一颗LED ...

  9. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

最新文章

  1. 谁是全球最顶级AI实验室?
  2. Glossary in Turbulence
  3. 曲面屏敲代码飞起,包邮送到家!
  4. Eclipse中查看源码
  5. 21.3.3 原子性与易变性 21.3.4 原子类
  6. “对技术没有好奇心”真的是很失败的一件事情
  7. 【caffe-Windows】训练自己数据——数据集格式转换
  8. 29 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义分配
  9. php调用sqlldr失败,php system()命令调用sqlplus导致php挂起
  10. 湖北孝感学校计算机好吗,湖北省孝感市2018年上半年计算机等级考试注意事项...
  11. call mysql_connect_Call to undefined function mysql_connect()
  12. Yii源码解读 - 事件
  13. AsyncTask的理解和使用
  14. Linux模块化增加设备驱动程序
  15. 快速傅里叶变换功率谱密度matlab_信号的频谱 频谱密度 功率谱密度 能量谱密度...
  16. Frame-Relay基础及配置学习笔记
  17. android 转 ios 开发,如何快速从android开发转向ios开发--oc语法篇
  18. css3技巧——实现一个正方体
  19. BadEncoder: Backdoor Attacks to Pre-trained Encoders in Self-Supervised Learning 论文笔记
  20. Java Web安全之代码审计

热门文章

  1. ESD防静电保护管PESDHC2FD4V5BH原装芯导Prisemi,DFN1006-2反向关断电压4.5V,箝位电压5.8V,PESDHC2FD4V5BH双向静电保护
  2. Navi.Soft31.WinCE框架.开发手册(含下载地址)
  3. 整柜海运到美国的规格和收费标准是什么
  4. JAVA垃圾回收机制-精简版
  5. falkon在哪个Linux目录,深度商店应用Falkon、Papyrus、Min、ProcessOn网页版
  6. 3分钟看完凯迪克金奖作品
  7. ai智能写诗你了解吗?
  8. 资源下载管理软件Folx Pro 5 Mac
  9. C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3
  10. MAC_Excel针对时间维度汇总生成表格