一、前言

本篇使用华清远见的FS4412开发板,对开发板的LED进行操作,来实现流水灯的效果,知识包含GPIO寄存器介绍、与ubuntulinux操作系统通过进行交叉编译生成开发板可执行代码,通过本次实验来认识ARM开发板的GPIO知识。

二、准备工作

FS4412开发板,我用的是华清远见的FS4412开发板
ubuntulinux操作系统(包含交叉编译工具)
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_0GPX1_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跑马灯(含源码)相关推荐

  1. 基于三星 ARM Cortex-A9 Exynos4412处理器的底层实验(led跑马灯、pwm蜂鸣器)

    Exynos 4412简介: Exynos 4412又称为Exynos 4 Quad,Exynos 4412采用了三星32nm HKMG工艺,是三星的第一款四核处理器. [1]led灯试验 1.查看原 ...

  2. C语言十字消除游戏(超简单详细),详细思路+源码分享

    十字消除,休闲小游戏,在规定时间内,只要是十字线能连接到的相同颜色的方块,就能获得相应的得分,如果点击后没有能够消除的方块会扣除时间,是一款益智小游戏. 我们将编写十字消除游戏,用户点击空白方块,沿其 ...

  3. C语言项目:接球小游戏(自制)!详细思路+源码分享

    每天一个C语言小项目,提升你的编程能力! 用VS写了一个小小的游戏,在界面右侧有运行时间,接到的小球个数等信息,有 10 个小球下落,玩家可以控制一个盒子左右移动(方向键),来接小球,按 Esc 键退 ...

  4. S3C2416裸机开发系列十三_电容屏驱动实现

    S3C2416裸机开发系列十三 电容屏驱动实现 象棋小子    1048272975 在人机交互系统中,键盘.触摸屏等输入设备是一个不可或缺的部分.对于手机.平板这些消费类电子而言,触摸屏以其非常良好 ...

  5. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...

  6. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  7. (含源码)利用NVIDIA VPI之透视变换

    (含源码)利用NVIDIA VPI之透视变换 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561 文章目录 (含源码)利用NVI ...

  8. 老男孩GO语言线下培训班1期整套教程(完整18天含源码)

    老男孩GO语言线下培训班1期整套教程(完整18天含源码) 老男孩教育-Go语言第一期(共18天 含课程源码) 课程详细目录: ├─L001-Go语言-mp4 │      01 Go开发1期 day1 ...

  9. 区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-熊丽兵-专题视频课程...

    区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-103人已学习 课程介绍         区块链开发技术进阶-深入详解以太坊智能合约语言 solidity视频培训教程:本课程是 ...

最新文章

  1. 神经植入物是如何工作的?
  2. 当 Flutter 遇见 Web,会有怎样的秘密?
  3. 大数据资产管理在腾讯游戏的实践
  4. ubuntu系统中import h5py, ImportError: No module named h5py的解决方法
  5. return本质探究以及try-finaly下的return探究
  6. 类数据源Visual C++对ODBC数据库资源的访问
  7. python3.9性能_谁说Python性能差的
  8. 自动优化Windows Xp批处理文件
  9. LWIP协议栈详解(1)_LWIP协议与网络分层
  10. startuml如何画流程图_怎样在迅捷画图在线网站中绘制UML流程图
  11. Python基础——标准数据类型
  12. Thingworx自定义扩展开发(一)- 开发环境搭建、Extension Demo Coding
  13. python爬携程_用python selenium抓取携程信息
  14. 如何有效地阅读技术书籍
  15. 北斗由“高大上”转为“接地气” 芯片成国内智能手机标配
  16. linux与window文件通过串口传输方法(zmod传输方法)
  17. cij期刊_核心期刊评价与文献计量学研究CJournalJLX
  18. 云计算需要python吗_国内python云计算是啥
  19. 37互娱,2019秋招提前批,web后端工程师
  20. Java学习打卡第七天——[再谈Collection之Set,TreeSet,泛型Generic的简介和使用]

热门文章

  1. “2019上海老字号品牌白皮书”发布 有活力才能复活
  2. Java判断超大文件中图书种类类别
  3. 戴尔与易安信(EMC)完成历史性合并,成立全球规模最大的私人控股科技公
  4. SOA与ERP整合的神速奇迹
  5. pyqt5 多线程遇到的问题总结
  6. 解决win7 USB键盘鼠标未识别
  7. 非常基础的双极性NRZ码元序列通过升余弦滚降系统冲激响应
  8. ffmpeg 编译后静态库链接失败
  9. Zilliz 顾钧:开源是协调技术供应商、开发者和用户之间利益的一种更健康的方式 I OpenTEKr 大话开源 Vol.2
  10. Retrofit2+Kolin协程