ARM学习笔记6-裸机之GPIO-LED
来源:互联网 发布:男生丁丁知乎 编辑:程序博客网 时间:2024/05/17 21:51
1 .裸机程序开发所需的软硬件环境和常用软件工具
1.1. 硬件环境
- 九鼎创展科技X210开发板(s5pv210)如下图
- 硬件特性:
- 内核:ARM Cortex-A8 1GHz
- 主频:1GHz;
- 内存:512MB DDR2
- Flash:4GB inand
1 .2. 软件环境
操作系统
- Win7 X32\x64(宿主机)
- Ubuntu14.04(虚拟机)
交叉编译工具链
- ARM-2009q3(三星官方编译器)
- 管理工程Makefile
- (详细参考Makefile相关书籍)
- 1.2.4. SecureCRT
- (远程登入Ubuntu14.04,用来做终端交互软件,后续也做串口终端软件)
1.3.裸机程序烧录方式
- 1.3.1. USB方式
- DNW v0.60c软件(三星官方工具)
- 1.3.2. SD卡方式
- X210_Fusing_Tool.exe(九鼎官方烧入工具) Windows
- nand_fusing.sh (三星官方烧入脚本) linux
2.裸机之GPIO点亮LED
2.1.点亮LED的开发步骤
1. 分析硬件电路
目的为了知道LED在开发板上的实际连接方式和LED正常工作所需要的条件
2. 分析SOC的datasheet中相关寄存器
目的为了想要点亮LED,如何用软件去控制SOC中的接口设备帮忙点亮LED
3. 编写控制程序(源码)并用交叉编译工具生成二进制烧录文件
参考对应寄存器配置方式编写点亮LED的步骤
4. 选择合适的烧录方式把程序烧入到开发板中运行
验证编写的程序是否能让LED正确地工作起来
2.2. 分析硬件原理图
2.2.1. 硬件连接方式如下图
从原理图上可知LED都接在SOC的GPIO接口上,其中LED1~LED3接在GPJ0端口上,LED4接在GPD0端口上
2.2.2. LED工作条件
根据LED器件的物理特性可知LED要正常工作必须要一个合适的电压差(正极到负极),从原理图中可知LED正极接电源VDD_IO,负极接GPIO,所以只要让GPIO端口形成电压差就可以了.
2.3. 分析SOC的datasheet
- 2.3.1. GPIO接口的相关寄存器
从SOC的datasheet中可知GPJ0、GPD0端口都有六个寄存器,如下图
- 2.3.2. 配置对应端口的寄存器
从SOC的datasheet中可知,这六个寄存器的作用如下
要点亮LED我们只需要用到模式寄存器和数据寄存器,把模式寄存器配置成输出模式,并向数据寄存器写入对应的数据
2.4. 编写控制程序
2.4.1. 根据任务需求编写让LED工作的步骤
第一步:设置引脚模式为输出模式(向GPxCON寄存器写入0001)
第二步:写入控制的数据(向GPxDAT寄存器写入0输出低电平,1输出高电平)2.4.2. 用汇编语言实现上述步骤,程序如下
/********************************************** * 文件名: gpip_led.S * 作 者: X_X_X * 日 期: 2017-6-29 23:02 * 功 能: 用GPIO点亮4颗LED(效果4颗同时闪烁) **********************************************/ #define GPJ0CON 0xE0200240 // 定义相关寄存器地址的宏 #define GPJ0DAT 0xE0200244 #define GPD0CON 0xE02000A0 #define GPD0DAT 0xE02000A4.globl _start //.globl 把_start符号声明为外部链接属性_start: ldr r0, =GPJ0CON ldr r1, =0x00111000 //配置GPJ0端口为输出模式(pin 3 pin 4 pin 5 ) str r1, [r0] ldr r0, =GPD0CON ldr r1, =0x0010 //配置GPD0端口为输出模式(pin 1 ) str r1, [r0]blink: ldr r0, =GPJ0DAT ldr r1, =0x38 //熄灭 LED1 LED2 LED3(b0011 1000) str r1, [r0] ldr r0, =GPD0DAT ldr r1, =0x2 //熄灭 LED4(b0010) str r1, [r0] bl delay //延时 ldr r0, =GPJ0DAT ldr r1, =0x0 //点亮 LED1 LED2 LED3 str r1, [r0] ldr r0, =GPD0DAT ldr r1, =0x0 //点亮 LED4 str r1, [r0] bl delay //延时 b blink //闪烁 b .delay: //延时函数 ldr r2, =9000000 //循环初始化 ldr r3, =0x0loop: sub r2, r2, #1 cmp r2, r3 bne loop mov pc, lr //函数返回, lr保存了进入函数之前的执行地址
- 2.4.3. 编译源程序得到二进制烧录文件
在SecureCRT终端中执行make编译指令并得到二进制gpio_led_usb.bin文件,如下图
2.5 烧入程序验证
- 用DNW软件把二进制.bin文件发送到开发板的0xd0020010地址上执行,效果如下
阅读全文
0 0
- ARM学习笔记6-裸机之GPIO-LED
- ARM裸机程序--GPIO实验 LED(1)
- ARM裸机程序--GPIO实验 LED(2)
- ARM学习笔记015之GPIO(汇编、key、led接线、int main、-wall)
- 1.4.ARM裸机第四部分-GPIO和LED
- ARM裸机程序之LED灯
- arm板裸机编程之led
- ARM裸机全集之ARM体系结构(学习笔记)
- ARM裸机点LED
- 02-JZ2440裸机学习之GPIO实验
- 一.ARM裸机学习之ARM汇编
- ARM裸机程序开发之led流水灯程序
- ARM学习之GPIO实验
- ARM9裸机之GPIO
- OK6410之裸机led
- s3c6410裸机之led
- 二.ARM裸机学习之S5PV210刷机
- 七.ARM裸机学习之SDRAM
- Java还要再学一遍基础(六)ArrayList详解
- Android 屏幕旋转 Sensor SensorManager
- 支持向量机通俗导论(理解SVM的三层境界)
- Codeforces 812C Sagheer and Nubian Market[二分]
- 和机器学习和计算机视觉相关的数学之一
- ARM学习笔记6-裸机之GPIO-LED
- 科技论文写作(一)——整体思路
- Spring--AOP--基本配置(切面Aspect,切入点Pointcut,通知Advice)
- java.lang.outOfMemory
- 一个python替换字符串的函数
- 消息中间件RabbitMQ-实战一
- NC65开发使用UAP-STUDIO6.5发布WebService
- 微信奇葩问题
- Android Studio中jni初体验