S5PV210开发1.0.4------点亮led灯

2023-12-12 10:08

本文主要是介绍S5PV210开发1.0.4------点亮led灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.USB下载.bin文件
2.SD卡下载.bin文件
3.安装交叉编译工具链
4.简述Makefile
5.mkv210_image.c+Makefile
6.点亮LED1原理图
7.点亮LED数据手册查阅
8.汇编点亮led
9.位运算实现
10.延时函数+LED闪烁
11.流水灯
12.反汇编工具objdump

1.USB下载.bin文件

1.安装usb驱动在这里插入图片描述

2.用dnw下载,注意下载地址选择0xd0020010
在这里插入图片描述
在这里插入图片描述
从usb启动做裸机实验时,因为不需要16字节的校验头,所以直接下载到0xd0020010

2.SD卡下载.bin文件

1.SD卡烧录
2.拨码至SD卡通道启动(SD2),(提前破坏SD0通道)
3.接通电源
管理员身份运行

3.安装交叉编译工具链

1.解压
tar -jxvf filename
2.环境变量
2.1 cd ~
2.2 .bashrc
2.3 最后一行 export PATH = xxxxx:&PATH
2.4 source
3.软链接(a.sh)

#!/bin/sh
ln arm-none-linux-gnueabi-addr2line -s arm-linux-addr2line
ln arm-none-linux-gnueabi-ar -s arm-linux-ar
ln arm-none-linux-gnueabi-as -s arm-linux-as
ln arm-none-linux-gnueabi-c++ -s arm-linux-c++
ln arm-none-linux-gnueabi-c++filt -s arm-linux-c++filt
ln arm-none-linux-gnueabi-cpp -s arm-linux-cpp
ln arm-none-linux-gnueabi-g++ -s arm-linux-g++
ln arm-none-linux-gnueabi-gcc -s arm-linux-gcc
ln arm-none-linux-gnueabi-gcc-4.4.1 -s arm-linux-gcc-4.4.1
ln arm-none-linux-gnueabi-gcov -s arm-linux-gcov
ln arm-none-linux-gnueabi-gdb -s arm-linux-gdb
ln arm-none-linux-gnueabi-gdbtui -s arm-linux-gdbtui
ln arm-none-linux-gnueabi-gprof -s arm-linux-gprof
ln arm-none-linux-gnueabi-ld -s arm-linux-ld
ln arm-none-linux-gnueabi-nm -s arm-linux-nm
ln arm-none-linux-gnueabi-objcopy -s arm-linux-objcopy
ln arm-none-linux-gnueabi-objdump -s arm-linux-objdump
ln arm-none-linux-gnueabi-ranlib -s arm-linux-ranlib
ln arm-none-linux-gnueabi-readelf -s arm-linux-readelf
ln arm-none-linux-gnueabi-size -s arm-linux-size
ln arm-none-linux-gnueabi-sprite -s arm-linux-sprite
ln arm-none-linux-gnueabi-strings -s arm-linux-strings
ln arm-none-linux-gnueabi-strip -s arm-linux-strip

执行:
chmod a+x a.sh
./a.sh

测试:
打开终端
arm-linux-gcc -v
arm-linux-gcc -a.c
file a.out

4.简述Makefile

4.1Makefile中的一些基本概念:
目标:目标定格写,后面是冒号(冒号后面是依赖)
依赖:依赖是用来产生目标的原材料。
命令:命令前面一定是Tab,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作。

不标准,但是可以用

5.mkv210_image.c+Makefile

//镜像目标:依赖
led.bin: start.o //链接arm-linux-ld -Ttext 0x0 -o led.elf $^//用arm-linux-objcopy工具链生成镜像arm-linux-objcopy -O binary led.elf led.bin//反汇编arm-linux-objdump -D led.elf > led_elf.dis//在ubuntu内通过gcc编译mkv210_image.c后,生成的可执行程序可以把led.bin变为210.bin(SD卡烧录)gcc mkv210_image.c -o mkx210./mkx210 led.bin 210.bin%.o : %.S//gcc -o指定名字 -c只编译不链接%  .o是$@    %.S是$<arm-linux-gcc -o $@ $< -c%.o : %.c//gcc -o 只编译不链接arm-linux-gcc -o $@ $< -c clean:rm *.o *.elf *.bin *.dis mkx210 -f

编译要使用编译器gcc,链接要使用链接器ld
write.2sd是通过sd卡下载的脚本

6.点亮LED原理图

在这里插入图片描述
1.低电平点亮
2. D22:GPJ0_3
D23:GPJ0_4
D24:GPJ0_5
D25:PWMTOUT1(GPD0_1)

7.点亮LED数据手册查阅

在这里插入图片描述
GPD0
在这里插入图片描述
GPJ0
在这里插入图片描述
在这里插入图片描述
解析:
以GPJ0为例:
GPJ0CON, R/W, Address = 0xE020_0240
GPJ0CON作用:0xE020_0240地址的32位bit分为8组,每组代表一个GPJ0_X,设置0001可以时管理led的寄存器处于输出状态
GPJ0DAT作用:0xE020_0244的地址的8位,每一位对应CON中的一组,1表示高电平,0表示低电平,结合原理图(给0点亮led)

8.汇编点亮led

/** 文件名:	led.s	* 作者:	LS* 描述:	汇编写的第一个裸机程序*/_start:// 第一步:把0x11111111写入0xE0200240(GPJ0CON)位置ldr r0, =0x11111111	// 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数ldr r1, =0xE0200240	// 是合法立即数还是非法立即数。一般写代码都用ldr伪指令str r0, [r1]// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去// 第二步:把0x0写入0xE0200244(GPJ0DAT)位置ldr r0, =0x0ldr r1, =0xE0200244str r0, [r1]				// 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮flag:b flag	

9.位运算实现

/** 文件名:	led.s	* 作者:	ls* 描述:	加入位运算、宏定义*/#define GPJ0CON	0xE0200240
#define GPJ0DAT	0xE0200244.global _start					// 把_start链接属性改为外部,这样其他文件就可以看见_start了
_start:// 第一步:把所有引脚都设置为输出模式,代码不变ldr r0, =0x11111111			// 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON			// 是合法立即数还是非法立即数。一般写代码都用ldr伪指令str r0, [r1]				// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去// 第二步:把中间LED(GPJ0_4)的输出设置为0,其余两颗设置为1,剩下的其他位不管//ldr r0, =((1<<3) | (1<<5))	// 等效于0b00101000,即0x28ldr r0, =((1<<3) | (0<<4) | (1<<5))	// 清清楚楚的看到哪个灭,哪个是亮ldr r1, =GPJ0DATstr r0, [r1]// 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮b .	

10.延时函数+LED闪烁

/** 文件名:	led.s	* 作者:	ls* 描述:	延时函数+LED闪烁*/#define GPJ0CON	0xE0200240
#define GPJ0DAT	0xE0200244.global _start					// 把_start链接属性改为外部,这样其他文件就可以看见_start了
_start:// 第一步:把所有引脚都设置为输出模式,代码不变ldr r0, =0x11111111			// 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON			// 是合法立即数还是非法立即数。一般写代码都用ldr伪指令str r0, [r1]				// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去flash:// 第二步:全部点亮ldr r0, =((0<<3) | (0<<4) | (0<<5))	// 清清楚楚的看到哪个灭,哪个是亮ldr r1, =GPJ0DATstr r0, [r1]				// 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮// 第三步:延时bl delay					// 使用bl进行函数调用// 第四步:全部熄灭ldr r0, =((1<<3) | (1<<4) | (1<<5))	// 清清楚楚的看到哪个灭,哪个是亮ldr r1, =GPJ0DATstr r0, [r1]		// 第五步:延时bl delayb flash// 延时函数:函数名:delay
delay:ldr r2, =9000000ldr r3, =0x0
delay_loop:	sub r2, r2, #1				//r2 = r2 -1cmp r2, r3					// cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立bne delay_loopmov pc, lr					// 函数调用返回

11.流水灯

#define GPJ0CON	0xE0200240
#define GPJ0DAT	0xE0200244
#define GPDOCON 0xE02000A0
#define GPDODAT 0xE02000A4
.global _start
_start:ldr r0, =0x11111111			ldr r1, =GPJ0CONstr r0, [r1]ldr r4, =0x1111ldr r5, =GPDOCONstr r4, [r5]
flash:ldr r0, = ~(1<<3)ldr r1, =GPJ0DATstr r0, [r1]ldr r4, = (1<<1)ldr r5, =GPDODATstr r4, [r5]bl delayldr r0, = ~(1<<4)ldr r1, =GPJ0DATstr r0, [r1]ldr r4, = (1<<1)ldr r5, =GPDODATstr r4, [r5]bl delayldr r0, = ~(1<<5)ldr r1, =GPJ0DATstr r0, [r1]ldr r4, = (1<<1)ldr r5, =GPDODATstr r4, [r5]bl delay	ldr r4, = ~(1<<1)ldr r5, =GPDODATstr r4, [r5]ldr r0, = (1<<5)|(1<<3)|(1<<4)ldr r1, =GPJ0DATstr r0, [r1]bl delayb flash
delay:ldr r2, = 9000000ldr r3, = 0x0
delay_loop:	sub r2,r2,#1cmp r2,r3bne delay_loopmov pc ,lr

12.反汇编工具objdump

arm-linux-objdump -D led.elf > led_elf.dis
objdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf格式的可执行程序反过来得到汇编源代码
-D表示反汇编	> 左边的是elf的可执行程序(反汇编时的原材料),>右边的是反汇编生成的反汇编程序反汇编的原因有以下:1.逆向破解。2.调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使用objdump主要目的是这个),尤其是在理解链接脚本、链接地址等概念时。3. 把C语言源代码编译链接生成的可执行程序反汇编后得到对应的汇编代码,可以帮助我们理解C语言和汇编语言之间的对应关系。非常有助于深入理解C语言。

这篇关于S5PV210开发1.0.4------点亮led灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484219

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex