关于FS4412的ARM开发环境搭建并点亮LED灯
目录
- 一、ARM开发环境搭建
- 1、安装 GCC 编译工具
- 2、安装 Yagarto 工具包
- 3、安装FS-JTAG调试软件
- 4、安装JRE
- 5、安装FS-JTAG驱动
- 6、安装USB转串口驱动
- 7、安装MobaXterm远程终端软件
- 8、建立串口终端会话
- 9、Eclipse for ARM使用
- 二、创建一个工程点亮LED
- 1、新建一个工程
- (1) 添加common 文件夹
- (2) 新建一个 MakeFile 文件
- (3) 新建一个Exynos4412.init脚本文件
- (4)新建一个map.lds连接脚本文件
- (5)新建一个start汇编源文件
- (6) 新建一个 main 文件
- 2、添加代码
- (1) 在汇编源文件(start/start.S)中输入汇编代码:
- (2) 在 map.lds 中输入如下信息
- (3) 编写 MakeFile 文件编译规则,在 MakeFile 中输入如下信息:
- (4) 在 Exynos4412.init 文件中输入如下信息:
- (5) 在 main.c 文件中输入如下信息:
- (6)所有文件编辑完成后,保存文件
- 3、调试工程
- (1)编译
- (2)配置调试工具
一、ARM开发环境搭建
我的计算机操作系统: Windows11
1、安装 GCC 编译工具
双击安装yagarto-bu-2.21_gcc-4.6.2-c-c++_nl-1.19.0_gdb-7.3.1_eabi_20111119.exe
2、安装 Yagarto 工具包
双击安装yagarto- - tools- - 20100703- - setup.exe
3、安装FS-JTAG调试软件
双击 setup.exe 安装 FS-JTAG 工具
4、安装JRE
双 击 安 装jre- - 6u7- - windows- - i586- -p p- - s.exe
5、安装FS-JTAG驱动
将 FS-JTAG 通过 USB线与 PC 连接,右键点击“我的电脑”选择“管理”,左侧栏里选择“设备管理”,找到该项设备右键点击选择“更新驱动”,选择“浏览计算机以查询驱动程序软件(R)”。
tip:此安装过程需要进行3次,直到设备管理器中没有感叹号标记或问号未知设备标记
6、安装USB转串口驱动
安装CH340
7、安装MobaXterm远程终端软件
安装MobaXterm
8、建立串口终端会话
选择USB转串口线所接端口COM,然后波特率选择115200,建立新会话,将FS4412板子关闭电源,再将拨码开关SW1调至0110(EMMC启动模式),然后打开板子电源。此时串口终端会话中会显示
Hit any key to stop autoboot:5
并且一直倒计时,在数字变成0之前按下空格(任意键)
tip:以后每次连接仿真前,都需要确定处于此状态,保证不要启动到 Linux ,因为启动到 Linux 后, MMU 功能会打开,导致仿真器无法正常使用
9、Eclipse for ARM使用
下载解压eclipse.exe(32位)文件
二、创建一个工程点亮LED
1、新建一个工程
在一个 C 工程中,必须包含如下必要的文件:
├─工程名称
│ ├─common //存放华清远见 FS_4412 通用库,已囊括本开发板所有硬件资源
│ │ ├─include
│ │ ├─src
│ ├─start //存放汇编工程原代码
│ │ ├─start.S
│ ├─main.c //C 工程源码
│ ├─Exynos4412.init //存放仿真用初始化文件
│ ├─map.lds //链接脚本文件
│ ├─Makefile //用来定义整个工程的编译规则
tip:在 C 实验过程中,common 文件夹、start 文件夹、Makefile 文件、map.lds 文件、Exynos4412.init 文件是通用的,我们可以直接拷贝已有 C 工程中的这些文件或者自行对这些文件进行修改编写
进入主界面后,选择“File→New→C Project”命令,Eclipse 将打开一个标准对话框,输入希望新建
工程的名字并单击“Finish”按钮即可创建一个新的工程.
创建完成后,会在工程工作界面里有你创建的工程名,接下来添加工程必要文件。
(1) 添加common 文件夹
拷贝 common 文件夹(华清远见 FS_4412 通用库)到 eclipse 工作目录下。如D:\eclipse_projects\FS4412 目录,复制 common 文件夹,进入 Eclipse 界面,右键点击我们新建的c 工程,选择 Paste。
(2) 新建一个 MakeFile 文件
选择“File→New→Other”命令,在弹出的对话框 New 中的“General”下单击 File,然后单击 Next;
然后选择所要指定的工程后,在文件名文本框中输入文件名 MakeFile,单击“Finish”按钮。
(3) 新建一个Exynos4412.init脚本文件
选择“File→New→Other”命令,在弹出的对话框中的 General 下单击 file,然后单击 next;然后选择
所要指定的工程后,在文件名文本框中输入文件名 Exynos4412.init,单击“Finish”按钮。
(4)新建一个map.lds连接脚本文件
选择“File→New→Other”命令,在弹出的对话框中的 General 下单击 file ,然后单击 next;然后选择所要指定的工程后,在文件名文本框中输入文件名 map.lds,单击“Finish”按钮。
(5)新建一个start汇编源文件
首先在工程目录下创建 start 文件夹,“File→New→Other”命令,在弹出的对话框中的 General 下单击Folder ,然后单击 next;然后选择所要指定的工程后,在文件名文本框中输入文件夹名 start,单击“Finish”按钮。
创建好 start 文件夹之后选择“File→New→Other”命令,在弹出的对话框中的 General 下点击 File ,单击 next;然后选择所要指定的工程文件(这里选择刚创建的 start 文件),在文件名文本框中输入文件名start.S(注 start 扩展名.S 为大写),单击“Finish”按钮。
(6) 新建一个 main 文件
选择“File→New→Other”命令,在弹出的对话框中的 General 下单击 file ,然后单击 next;然后选择所要指定的工程后,在文件名文本框中输入文件名 main.c,单击“Finish”按钮。
2、添加代码
至此工程及所需文件已经基本创建完成,为了能够实现工程的相关功能,我们必须在对应的文件中添
加相应的代码。
(1) 在汇编源文件(start/start.S)中输入汇编代码:
.text
.global _start
_start:b resetldr pc,_undefined_instructionldr pc,_software_interruptldr pc,_prefetch_abortldr pc,_data_abortldr pc,_not_usedldr pc,_irqldr pc,_fiq_undefined_instruction: .word _undefined_instruction
_software_interrupt: .word _software_interrupt
_prefetch_abort: .word _prefetch_abort
_data_abort: .word _data_abort
_not_used: .word _not_used
_irq: .word irq_handler
_fiq: .word _fiqreset:ldr r0,=0x40008000mcr p15,0,r0,c12,c0,0 @ Vector Base Address Registermrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr,r0 @ Enable svc mode of cpumov r0, #0xfffffffmcr p15, 0, r0, c1, c0, 2 @ Defines access permissions for each coprocessor@ Privileged and User mode access/** Invalidate L1 I/D*/mov r0, #0 @ set up for MCRmcr p15, 0, r0, c8, c7, 0 @ invalidate TLBsmcr p15, 0, r0, c7, c5, 0 @ invalidate icache@Set the FPEXC EN bit to enable the FPU:MOV r3, #0x40000000fmxr FPEXC, r3/** disable MMU stuff and caches*/mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00002000 @ clear bits 13 (--V-)bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)orr r0, r0, #0x00001000 @ set bit 12 (---I) Icacheorr r0, r0, #0x00000002 @ set bit 1 (--A-) Alignorr r0, r0, #0x00000800 @ set bit 11 (Z---) BTBmcr p15, 0, r0, c1, c0, 0/* LED Test Code */ldr r0, =0x114001E0ldr r1, [r0]bic r1, r1, #0xf0000orr r1, r1, #0x10000str r1, [r0]ldr r0, =0x114001E8ldr r1, [r0]bic r1, r1, #0x300str r1, [r0]ldr r0, =0x114001E4ldr r1, [r0]orr r1, r1, #0x10str r1, [r0]init_stack:ldr r0,stacktop /*get stack top pointer*//********svc mode stack********/mov sp,r0sub r0,#128*4 /*512 byte for irq mode of stack*//****irq mode stack**/msr cpsr,#0xd2mov sp,r0sub r0,#128*4 /*512 byte for irq mode of stack*//***fiq mode stack***/msr cpsr,#0xd1mov sp,r0sub r0,#0/***abort mode stack***/msr cpsr,#0xd7mov sp,r0sub r0,#0/***undefine mode stack***/msr cpsr,#0xdbmov sp,r0sub r0,#0/*** sys mode and usr mode stack ***/msr cpsr,#0x10mov sp,r0 /*1024 byte for user mode of stack*/b main.align 4/**** swi_interrupt handler ****//**** irq_handler ****/
irq_handler:sub lr,lr,#4stmfd sp!,{r0-r12,lr}
// bl do_irqldmfd sp!,{r0-r12,pc}^stacktop: .word stack+4*512
.datastack: .space 4*512
(2) 在 map.lds 中输入如下信息
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{. = 0x40008000;. = ALIGN(4);.text :{start/start.o(.text)*(.text)}. = ALIGN(4);.rodata : { *(.rodata) }. = ALIGN(4);.data : { *(.data) }. = ALIGN(4);.bss :{ *(.bss) }
}
(3) 编写 MakeFile 文件编译规则,在 MakeFile 中输入如下信息:
# CORTEX-A9 PERI DRIVER CODE
# VERSION 2.0
# ATHUOR www.dev.hqyj.com
# MODIFY DATE
# 2014.05.28 Makefile
SHELL=C:\Windows\System32\cmd.exe
CROSS_COMPILE = arm-none-eabi-
NAME = led_c
CFLAGS += -g -O0 -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp \
-fno-builtin -nostdinc -I ./common/include
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
OBJSss := $(wildcard start/*.S) $(wildcard common/src/*.S) \$(wildcard *.S)\$(wildcard start/*.c) $(wildcard common/src/*.c) \$(wildcard usr/*.c) $(wildcard *.c)
OBJSs := $(patsubst %.S,%.o,$(OBJSss))
OBJS := $(patsubst %.c,%.o,$(OBJSs))
%.o: %.S$(CC) $(CFLAGS) -c -o $@ $<
%.o: %.c$(CC) $(CFLAGS) -c -o $@ $<
all:clean $(OBJS)$(LD) $(OBJS) -T map.lds -o $(NAME).elf$(OBJCOPY) -O binary $(NAME).elf $(NAME).bin$(OBJDUMP) -D $(NAME).elf > $(NAME).dis
clean:rm -rf $(OBJS) *.elf *.bin *.dis *.o
tip: :MakeFile 每条命令的开头必须以[Tab] 键开头 , 如该文件为拷贝 自 已 有工程, 那么直接 修改 第 行 九行 NAME 即可
(4) 在 Exynos4412.init 文件中输入如下信息:
target remote localhost:3333
monitor halt reset
(5) 在 main.c 文件中输入如下信息:
#include "exynos_4412.h"void mydelay_ms(int ms)
{int i, j;while(ms--){for (i = 0; i < 5; i++)for (j = 0; j < 514; j++);}
}
/*-------------------------MAIN FUNCTION------------------------------*/
/**********************************************************************
* @brief Main program body
* @param[in] None
* @return int
**********************************************************************/
int main(void)
{/**Config*/GPX2.CON = (GPX2.CON & ~(0xf<<28))| 1<<28;//GPX2_7:output, LED2GPX1.CON = (GPX1.CON & ~(0xf)) | 1; //GPX1_0:output, LED3GPF3.CON = (GPX3.CON & ~(0xf<<16 | 0xf<<20)) | (1<<16 | 1<<20);//GPF3_4:output, LED4 GPF3_5:output, LED5while(1){//Turn on LED2GPX2.DAT |= 0x1 << 7;mydelay_ms(500);//Turn on LED3GPX1.DAT |= 0x1;//Turn off LED2GPX2.DAT &= ~(0x1<<7);mydelay_ms(500);//Turn on LED5GPF3.DAT |= (0x1 << 5);//Turn off LED3GPX1.DAT &= ~0x1;mydelay_ms(500);//Turn on LED4GPF3.DAT |= (0x1 << 4);//Turn off LED5GPF3.DAT &= ~(0x1 << 5);mydelay_ms(500);//Turn off LED4GPF3.DAT &= ~(0x1 << 4);}return 0;
}
(6)所有文件编辑完成后,保存文件
3、调试工程
(1)编译
点击编译图标
(2)配置调试工具
①选中“Run” “Debug Configuras…”
②在“Zylin Embedded debug (Native)”选项上右击鼠标,在点击“New”选项
③点击“Main”选项栏中红色框内的“Browse”选项选择将要执行的程序,调试的程序格式为 xx.elf的文件。找到 LED_GPIO 工程对应的目录,选中目录中的 led_gpio.elf 文件,然后选择“打开”
④在 Debugger 选项卡中的 Main 子选项卡中的 GDB debugger 的框中单击“Browse”按钮选择前面安装的 arm-none-eabi-gdb.exe(这里选择自己安装 gcc 编译工具的安装目录C:\ProgramFiles\yagarto\bin,在GDB Command file 中选择自己工程目录下的 Exynos4412.init 文件
⑤在 Command 选项中,在“Initialize’ commands”中添加 3 行命令
load
break main
c
⑥添加完后点击如下图所示的“ Apply”,调试选项配置完成。再点击“ Debug”选项进入就可以进
行调试了
⑦进入调试界面后,点击全速运行 的调试按钮,如果开发板上 led 灯开始闪烁,则表示整个开发
环境搭建成功。
关于FS4412的ARM开发环境搭建并点亮LED灯相关推荐
- (嵌入式)ARM开发环境入门-----一个简单的LED灯闪烁的实现
ARM开发环境入门 一.一个简单的LED灯闪烁程序 1.1.工具 1.2.步骤 1.2.1.我们需要创建一个uVision Project 1.2.2.取名保存 1.2.3.这里选择我们需要的芯片类型 ...
- esp8266 micropython开发环境搭建及点亮led
电脑兼容安装python2.7.7和python3.6.6成功后解决了清除和下载固件失败问题,成功点亮led 1.安装esptool 在命令行下输入 pip install esptool pip i ...
- 【esp8266】:python也能控制单片机?esp8266 micropython开发环境搭建及点亮led
买来8266后好久没用,今天才发现自己安装的python3.6版本不支持,电脑兼容安装python2.7.7和python3.6.6成功后解决了清除和下载固件失败问题,成功点亮led 1.安装espt ...
- linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程
LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...
- 嵌入式LINUX搭建arm环境,手把手教你嵌入式ARM开发环境搭建
原标题:手把手教你嵌入式ARM开发环境搭建 1. 安装,配置,启动FTP服务 · 安装FTP: sudo apt-get install vsftpd · 修改vsftpd的配置文件/etc/vsft ...
- 高云FPGA系列教程(1):FPGA和ARM开发环境搭建
文章目录 @[toc] 1. 获取安装包 2. 申请License 3. 安装高云FPGA开发环境 4. 安装高云MCU开发环境 5. 替换TangNano 4K专用下载软件 总结 本文是高云FPGA ...
- Linux下ARM开发环境搭建
本人的系统环境:Linux ubuntu 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:25:33 UTC 2013 i686 i686 i686 GNU/ ...
- QT5.7.0 arm开发环境搭建
参考文章http://blog.csdn.net/singleroot/article/details/54344873 1.创建项目 创建一个c++项目,但是发现平台没有arm的平台,需要我们自己添 ...
- RICO BOARD驱动探索之旅_环境搭建与点亮LED
今天开始更新我的博客,一个专题: RICO BOARD驱动探索之旅 机缘巧合,我申请到了RICO BOARD,一直想自己玩玩,现在开播!!! 这款板的渊源我就不赘述了,它是以TI Sitara AM4 ...
最新文章
- 第8章6节MonkeyRunner启动运行过程-启动Monkey 4
- Object family not exist issue in Equipment download
- CSS3实现多样的边框效果
- luogu P1659 养猪 dp 好理解
- Qt学习笔记-自绘时钟
- 漫步微积分二十三——重力作用下的运动 逃逸速度和黑洞
- C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
- python3.7怎么安装turtle_Python turtle安装和使用教程
- 超星未来张剑谈智能网联汽车计算平台:不能只考虑算力
- C++对象池技术剖析
- C#实现多功能记事本
- 极域电子教室中计算机图标对齐,极域电子教室使用手册整理,新手必备
- 康泰克音源采样器完整版-Native Instruments Kontakt 6.5.3 WiN-MAC
- Evo使用过程问题汇总
- 解决老Mac强行双系统后Mac系统引导丢失出现no bootable device
- Android 源代码分享
- gnss_伽利略gnss消息认证过程
- VMware教程(二):CentOS 7 网络配置
- Matlab_逐步回归
- 一个JAVA渣渣的校招成长记,附BAT美团网易等20家面经总结
热门文章
- Component MSCOMCTL.OCX or one of its dependencies not currently registered
- 前端练习--京东导航
- 国标GB/T28181协议下EasyGBS互联网无插件视频播放器起播慢或延迟高问题解决方案
- C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数
- linux使用线程实现生产者消费者问题,Linux下生产者与消费者的线程实现
- 剖析KCP以及KCP在游戏中是如何使用的
- 如何在应用中打开系统播放器
- 镭速传输 Linux离线激活教程
- 推荐系统——用户画像
- 汉字转拼音和简拼工具类分享