ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序
Mini6410上最简单的LED点灯裸机程序 :
实验环境:
根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个SecureCRT代替超级终端。
一定要,把AXD也设置上。
secureCRT的配置:选择Serial串口,波特率115200,端口号:USB转串(去驱动程序查端口号,今天插了一个COM4,一个COM5)
实验步骤:
配置好了以后,打开CodeWarrior编译mini6410-led.bin文件
将bin文件直接复制到SD卡的images文件夹就行了, 然后配置FriendlyARM.ini文件
6410有两种运行机制:一种是将程序直接从SD卡加载到内存运行,一种是将SD的镜像烧到NAND FLASH上启动,因为我的FLASH上系统有用,就先不覆盖了。
第一种方法是烧到NAND FLASH上
Action=install
OS= UserBin
UserBin‐Image=mini6410‐led.bin
借助已经安装了SuperbootSD卡,可以把把mini6410‐led.bin 加载到内存中运行,步骤如下:
把mini6410‐led.bin 拷贝到SD卡的images 目录下,
打开FriendlyARM.ini配文件,修改如下关键定义:
第二种方法是直接在SD卡加载运行
Action=run
OS= UserBin
UserBin‐Image=mini6410‐led.bin
UserBin‐StartAddress=50000000
通过读卡器拷贝到SD卡中——失败。。
通过查找,发现配置文件FriendlyARM.int搞错了——不是直接添加,是修改已有的东西(尤其UserBin)
修改红色部分就行了,Action设置一下,安装还是运行?OS,换成UserBin,UserBin不能自己添加,是修改底部红色部分(要自己发现,友善的说明书真糙。。。。。)
- #This line cannot be removed. by FriendlyARM(www.arm9.net)
- LCD-Mode = Yes
- LCD-Type = S70
- CheckOneButton=No
- <span style="color:#ff0000">Action=install
- OS= Linux</span>
- VerifyNandWrite=No
- StatusType = Beeper| LED
- #################### Linux #####################
- Linux-BootLoader = superboot-6410.bin
- Linux-Kernel = Linux/zImage
- Linux-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=nuxrc console=ttySAC0,115200
- Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4-SLC.ubi
- Linux-RootFs-RunImage = Linux/rootfs_qtopia_qt4.ext3
- ################### Android ####################
- Android-BootLoader = superboot-6410.bin
- Android-Kernel = Android/azImage
- Android-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=nuxrc console=ttySAC0,115200 androidboot.console=s3c2410_serial0
- Android-RootFs-InstallImage = Android/rootfs_android-SLC.ubi
- Android-RootFs-RunImage = Android/rootfs_android.ext3
- ################### WindowsCE6 #################
- WindowsCE6-Bootloader= superboot-6410.bin
- WindowsCE6-BootLogo = WindowsCE6\bootlogo.bmp
- WindowsCE6-InstallImage = WindowsCE6\en\NK-i.bin
- WindowsCE6-RunImage = WindowsCE6\en\NK-i.bin
- #################### Ubuntu #####################
- Ubuntu-BootLoader = superboot-6410.bin
- Ubuntu-Kernel = Ubuntu/uzImage
- Ubuntu-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=nuxrc console=ttySAC0,115200
- Ubuntu-RootFs-InstallImage = Ubuntu/rootfs_ubuntu-SLC.ubi
- Ubuntu-RootFs-RunImage = Ubuntu/rootfs_ubuntu.ext3
- <span style="color:#ff0000">############### UserBin #################
- UserBin-Image=WindowsCE/NK-i.nb0
- userBin-StartAddress=50100000</span>
main.c文件如下
- #include "utils.h"
- static void LedDelay(void)
- {
- volatile unsigned int k;
- for(k = 0; k < 20000000; k++);
- }
- int main(void)
- {
- Uart_Init();
- Port_Init();
- Uart_SendString("\r\nHello, Mini6410\r\n");
- for(;;) {
- Led_Display(0x9); // 1001
- LedDelay();
- Led_Display(0x6); // 0110
- LedDelay();
- }
- return 0;
- }
比较简单,一看就懂,直接靠bit控制4个LED灯。for循环里LED灯先两边后中间,一个”LED灯对对碰“,可以修改一下玩,比如改成流水线,改成跳跃,或者交替闪烁,可以分别使用,嫌来回插拔SD卡麻烦我就一次试了。
事实证明,最好分开测试:发现这个位操作的LED,0才是亮,1是灭;且LED4是低位,LED1是高位
- void Led_Display(int data)
- rGPKDAT = (rGPKDAT & ~(0xf<<4)) | ((data & 0xf)<<4);
- #include "utils.h"
- static void LedDelay(void)
- {
- volatile unsigned int k;
- for(k = 0; k < 20000000; k++);
- }
- int main(void)
- {
- Uart_Init();
- Port_Init();
- Uart_SendString("\r\nHello, Mini6410\r\n");
- for(;;) {
- //LED对对碰
- Led_Display(0x9); // 1001
- LedDelay();
- Led_Display(0x6); // 0110
- LedDelay();
- //流水灭灯
- LedDelay();
- LedDelay();
- Led_Display(0x1);//0001
- LedDelay();
- Led_Display(0x2);//0010
- LedDelay();
- Led_Display(0x4);//0100
- LedDelay();
- Led_Display(0x8);//1000
- LedDelay();
- LedDelay();
- <span style="white-space:pre"> </span>//流水亮灯
- <pre name="code" class="plain"> Led_Display(0xe);//1110
- LedDelay();
- Led_Display(0xd);//1101
- LedDelay();
- Led_Display(0xb);//1011
- LedDelay();
- Led_Display(0x7);//0111
- LedDelay();
- LedDelay();</pre>//交替闪烁:1、3同闪,2、4同闪 Led_Display(0x5); // 0101
- <pre name="code" class="plain"> LedDelay(); </pre> Led_Display(0xa); // 1010<br>
- <pre name="code" class="plain"> LedDelay(); </pre><pre name="code" class="plain"></pre><pre name="code" class="plain"> LedDelay(); </pre><pre name="code" class="plain"> LedDelay(); </pre> } return 0;}
再来个mini6410-led-v2.bin,或者v3,再给ini设置一下就ok了。
- <pre name="code" class="cpp"></pre>
完成效果
ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序的更多相关文章
- Django入门实践(三)
Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- sass、less和stylus的安装使用和入门实践
刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用c ...
- ARM入门最好的文章
一 首先说说arm的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位.广义的嵌入式无非几种:传统的什么51.avr.pic称做嵌入式微控制器:arm是嵌入式微处理器 ...
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...
- Vuex入门实践(中)-多module中的state、mutations、actions和getters
一.前言 上一篇文章<Vuex入门实践(上)>,我们一共实践了vuex的这些内容: 1.在state中定义共享属性,在组件中可使用[$store.state.属性名]访问共享属性 2.在m ...
- webpack的入门实践,看这篇就够了
webpack的入门实践 我会将所有的读者概括为初学者,即使你可能有基础,学习本节之前我希望你具有一定的JavaScript和node基础 文中的 ... ...代表省略掉部分代码,和上面的代码相同 ...
- Azure DevOps Server 入门实践与安装部署
一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...
随机推荐
- mercurial(Hg) Server 搭建 过程记录
mercurial(Hg) Server 搭建 过程记录 1. 环境说明 只是测试搭建,环境为本机开发环境:win 8.1 + IIS8.5 软件准备: 2. 软件安装 先安装Python2.7, ...
- js 计算两个日期之间的周数
//返回两个日期相差的周数 function WeeksBetw(date1, date2) { //这里的date1,date2都是Date对象 var d1 = new Date(date1); ...
- windows中java读目录空格变成%20 处理方法
URL url = Thread.currentThread().getContextClassLoader().getResource(""); String path = ur ...
- static说明
1.最基本用法:加static的全局变量或者函数,只能在本文件中使用.可见性只在本文件中. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说 ...
- hdu5322 Hope(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Hope Time Limit: 10000/5000 MS (Java/Othe ...
- redis数据结构与主要命令
redis的数据类型有:string.hashes.lists.sets,sorted sets 1.string类型: set.get添加键值对获得键值对.如果多次赋值会覆盖掉原来的value se ...
- itunes一进store就提示已停止工作该怎么解决
改兼容,换盘重装什么的都试过了没用,可以听歌更新软件更改账号,但是就是进不了store,每次都是这个进度就卡死了. 问题事件名称: APPCRASH 应用程序名: iTunes.exe 应用程序版本: ...
- poj3294 --Life Forms
Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 12483 Accepted: 3501 Descr ...
- awk详解
一.简介 强大的文本分析工具,基于指定规则浏览和抽取信息.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理.awk有3个不同版本: awk.nawk和ga ...
- Find Median from Data Stream 解答
Question Median is the middle value in an ordered integer list. If the size of the list is even, the ...