利用汇编和C语言实现Exynos4412裸机开发系列之实现LED跑马灯(含源码)
一、前言
本篇使用华清远见的FS4412
开发板,对开发板的LED进行操作,来实现流水灯
的效果,知识包含GPIO寄存器
介绍、与ubuntu
下linux
操作系统通过进行交叉编译生成开发板可执行代码,通过本次实验来认识ARM
开发板的GPIO
知识。
二、准备工作
FS4412
开发板,我用的是华清远见的FS4412开发板
ubuntu
下linux
操作系统(包含交叉编译工具)
serial-com7
程序烧入执行工具
开发板电路原理图、芯片手册
开发板可在华清远见创客学院平台进行租借
租借网址:
开发板图
三、GPIO寄存器介绍以及配置过程
当拿到一个开发板时,可以不用着急关注它有多少个引脚,因为不同的芯片引脚都不同,本篇使用的Exynos 4412
芯片包含304个多功能输入/输出接口引脚和164个内存接口引脚,因此我们在最开始时,只需要关注需要用到的引脚,在根据电路原理图上,用到引脚的编号,去看数据手册。
1、LED电路原理图
引用
FS4412-DevBoard-V5
扩展板电路原理图与FS4412_CoreBoard_V2
核心板原理图
GPIO寄存器介绍
在芯片手册中找到4个LED灯对应的控制寄存器
的数据寄存器
。
GPX2_7控制寄存器
该寄存器地址是由基地址0x1100 0000
偏移0x0C40
位得到的,地址是0x11000C40
,默认配置是0x0000 0000
该寄存器8位控制一个引脚的功能,0~31分别控制GPX1_0
到GPX1_7
共8个引脚。
本篇用到输出功能,也就是output,写值为0x1000 00000
,其他功能用到的时候再介绍。
以下寄存器使用的方法与该方法相同,后面不做说明。
GPX2_7数据寄存器
该寄存器地址是由基地址0x1100 0000
偏移0x0C44
位得到的,地址是0x11000C44
,默认配置是0x0000 0000
该寄存器0-7位控制引脚输入输出,其他位只读不能用,0-7位每一位控制一个引脚的功能,分别控制引脚GPX1_0~GPX1_7
共8个引脚。
输入模式下位置1为输出高电平、位置0输出低电平。
GPX1_0控制寄存器
GPX1_0数据寄存器
GPX3_4控制寄存器
GPX3_4数据寄存器
GPX3_5控制寄存器
GPX3_5数据寄存器
引用(4412手册完整版)SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary
四、Makefile编写
CROSS = arm-none-linux-gnueabi-
CC=$(CROSS)gcc
LD=$(CROSS)ld
OBJCOPY=$(CROSS)objcopyall:$(CC) -g -c -o main.o main.c$(CC) -g -c -o start.o start.s$(LD) start.o main.o -Tmap.lds -o led.elf$(OBJCOPY) -O binary -S led.elf led.binclean:rm -f *.o *.elf *.bin *.dis
五、汇编代码编写
.text
.global _start
_start:b main.end
六、C代码编写
#define GPX2CON (*(volatile unsigned int *)0x11000C40)
#define GPX2DAT (*(volatile unsigned int *)0x11000C44)#define GPX1CON (*(volatile unsigned int *)0x11000C20)
#define GPX1DAT (*(volatile unsigned int *)0x11000C24)#define GPF3CON (*(volatile unsigned int *)0x114001E0)
#define GPF3DAT (*(volatile unsigned int *)0x114001E4)void LED2_INIT(void)
{GPX2CON=GPX2CON&(~(0xF<<28)|(0x1<<28));
}void LED2_ON(void)
{GPX2DAT=GPX2DAT|(0x1<<7);
}void LED2_OFF(void)
{GPX2DAT=GPX2DAT&~(0x1<<7);
}void LED3_INIT(void)
{GPX1CON=(GPX1CON & (~0xF))|0x1;
}void LED3_ON(void)
{GPX1DAT=GPX1DAT|(0x1);
}void LED3_OFF(void)
{GPX1DAT=GPX1DAT& (~(0x1));
}void LED4_INIT(void)
{GPF3CON=(GPF3CON&~(0xF<<16))|(0x1<<16);
}void LED4_ON(void)
{GPF3DAT= GPF3DAT|(0x1<<4);
}void LED4_OFF(void)
{GPF3DAT= GPF3DAT&~(0x1<<4);
}void LED5_INIT(void)
{GPF3CON=(GPF3CON&~(0xF<<20))|(0x1<<20);
}void LED5_ON(void)
{GPF3DAT= GPF3DAT|(0x1<<5);
}void LED5_OFF(void)
{GPF3DAT= GPF3DAT&~(0x1<<5);
}void delay(void)
{int i=0;for(;i<1000000;i++){;}
}
int main()
{LED2_INIT();LED3_INIT();LED4_INIT();LED5_INIT();while(1){LED2_ON();delay();LED2_OFF();delay();LED3_ON();delay();LED3_OFF();delay();LED4_ON();delay();LED4_OFF();delay();LED5_ON();delay();LED5_OFF();delay(); }
}
对程序进行编译
编译生成的led.bin
文件,将该文件从虚拟机拷贝到Windows
中。
七、程序烧入
1.打开serial-com7
,连接开发板(COM2
接口),烧入程序
2.打开串口烧写工具,波特率设置115200
3.开发板上电,并按回车进入boot模式
4.输入loadb 0x40008000,将程序led.bin程序烧录到0x40008000地址处,并按照如下操作,将文件烧录进开发板中。
5.烧录成功后,输入go 0x40008000,程序启动。
6.观察开发板LED灯,LED跑马灯实现。
到这里就结束啦!传作不易,麻烦点个赞呗。
利用汇编和C语言实现Exynos4412裸机开发系列之实现LED跑马灯(含源码)相关推荐
- 基于三星 ARM Cortex-A9 Exynos4412处理器的底层实验(led跑马灯、pwm蜂鸣器)
Exynos 4412简介: Exynos 4412又称为Exynos 4 Quad,Exynos 4412采用了三星32nm HKMG工艺,是三星的第一款四核处理器. [1]led灯试验 1.查看原 ...
- C语言十字消除游戏(超简单详细),详细思路+源码分享
十字消除,休闲小游戏,在规定时间内,只要是十字线能连接到的相同颜色的方块,就能获得相应的得分,如果点击后没有能够消除的方块会扣除时间,是一款益智小游戏. 我们将编写十字消除游戏,用户点击空白方块,沿其 ...
- C语言项目:接球小游戏(自制)!详细思路+源码分享
每天一个C语言小项目,提升你的编程能力! 用VS写了一个小小的游戏,在界面右侧有运行时间,接到的小球个数等信息,有 10 个小球下落,玩家可以控制一个盒子左右移动(方向键),来接小球,按 Esc 键退 ...
- S3C2416裸机开发系列十三_电容屏驱动实现
S3C2416裸机开发系列十三 电容屏驱动实现 象棋小子 1048272975 在人机交互系统中,键盘.触摸屏等输入设备是一个不可或缺的部分.对于手机.平板这些消费类电子而言,触摸屏以其非常良好 ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...
- 利用多线程爬虫搭建代理ip池的两种方法(含源码)
搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...
- (含源码)利用NVIDIA VPI之透视变换
(含源码)利用NVIDIA VPI之透视变换 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561 文章目录 (含源码)利用NVI ...
- 老男孩GO语言线下培训班1期整套教程(完整18天含源码)
老男孩GO语言线下培训班1期整套教程(完整18天含源码) 老男孩教育-Go语言第一期(共18天 含课程源码) 课程详细目录: ├─L001-Go语言-mp4 │ 01 Go开发1期 day1 ...
- 区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-熊丽兵-专题视频课程...
区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-103人已学习 课程介绍 区块链开发技术进阶-深入详解以太坊智能合约语言 solidity视频培训教程:本课程是 ...
最新文章
- 神经植入物是如何工作的?
- 当 Flutter 遇见 Web,会有怎样的秘密?
- 大数据资产管理在腾讯游戏的实践
- ubuntu系统中import h5py, ImportError: No module named h5py的解决方法
- return本质探究以及try-finaly下的return探究
- 类数据源Visual C++对ODBC数据库资源的访问
- python3.9性能_谁说Python性能差的
- 自动优化Windows Xp批处理文件
- LWIP协议栈详解(1)_LWIP协议与网络分层
- startuml如何画流程图_怎样在迅捷画图在线网站中绘制UML流程图
- Python基础——标准数据类型
- Thingworx自定义扩展开发(一)- 开发环境搭建、Extension Demo Coding
- python爬携程_用python selenium抓取携程信息
- 如何有效地阅读技术书籍
- 北斗由“高大上”转为“接地气” 芯片成国内智能手机标配
- linux与window文件通过串口传输方法(zmod传输方法)
- cij期刊_核心期刊评价与文献计量学研究CJournalJLX
- 云计算需要python吗_国内python云计算是啥
- 37互娱,2019秋招提前批,web后端工程师
- Java学习打卡第七天——[再谈Collection之Set,TreeSet,泛型Generic的简介和使用]