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不能自己添加,是修改底部红色部分(要自己发现,友善的说明书真糙。。。。。)

[plain] view plain copy

  1. #This line cannot be removed. by FriendlyARM(www.arm9.net)
  2. LCD-Mode = Yes
  3. LCD-Type = S70
  4. CheckOneButton=No
  5. <span style="color:#ff0000">Action=install
  6. OS= Linux</span>
  7. VerifyNandWrite=No
  8. StatusType = Beeper| LED
  9. #################### Linux #####################
  10. Linux-BootLoader = superboot-6410.bin
  11. Linux-Kernel = Linux/zImage
  12. Linux-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=nuxrc console=ttySAC0,115200
  13. Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4-SLC.ubi
  14. Linux-RootFs-RunImage = Linux/rootfs_qtopia_qt4.ext3
  15. ################### Android ####################
  16. Android-BootLoader = superboot-6410.bin
  17. Android-Kernel = Android/azImage
  18. Android-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs  init=nuxrc console=ttySAC0,115200 androidboot.console=s3c2410_serial0
  19. Android-RootFs-InstallImage = Android/rootfs_android-SLC.ubi
  20. Android-RootFs-RunImage = Android/rootfs_android.ext3
  21. ################### WindowsCE6 #################
  22. WindowsCE6-Bootloader= superboot-6410.bin
  23. WindowsCE6-BootLogo = WindowsCE6\bootlogo.bmp
  24. WindowsCE6-InstallImage = WindowsCE6\en\NK-i.bin
  25. WindowsCE6-RunImage = WindowsCE6\en\NK-i.bin
  26. #################### Ubuntu #####################
  27. Ubuntu-BootLoader = superboot-6410.bin
  28. Ubuntu-Kernel = Ubuntu/uzImage
  29. Ubuntu-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs  init=nuxrc console=ttySAC0,115200
  30. Ubuntu-RootFs-InstallImage = Ubuntu/rootfs_ubuntu-SLC.ubi
  31. Ubuntu-RootFs-RunImage = Ubuntu/rootfs_ubuntu.ext3
  32. <span style="color:#ff0000">############### UserBin #################
  33. UserBin-Image=WindowsCE/NK-i.nb0
  34. userBin-StartAddress=50100000</span>

main.c文件如下

[cpp] view plain copy

  1. #include "utils.h"
  2. static void LedDelay(void)
  3. {
  4. volatile unsigned int k;
  5. for(k = 0; k < 20000000; k++);
  6. }
  7. int main(void)
  8. {
  9. Uart_Init();
  10. Port_Init();
  11. Uart_SendString("\r\nHello, Mini6410\r\n");
  12. for(;;) {
  13. Led_Display(0x9); // 1001
  14. LedDelay();
  15. Led_Display(0x6); // 0110
  16. LedDelay();
  17. }
  18. return 0;
  19. }

比较简单,一看就懂,直接靠bit控制4个LED灯。for循环里LED灯先两边后中间,一个”LED灯对对碰“,可以修改一下玩,比如改成流水线,改成跳跃,或者交替闪烁,可以分别使用,嫌来回插拔SD卡麻烦我就一次试了

事实证明,最好分开测试:发现这个位操作的LED,0才是亮,1是灭;且LED4是低位,LED1是高位

[plain] view plain copy

  1. void Led_Display(int data)
  2. rGPKDAT = (rGPKDAT & ~(0xf<<4)) | ((data & 0xf)<<4);

[plain] view plain copy

  1. #include "utils.h"
  2. static void LedDelay(void)
  3. {
  4. volatile unsigned int k;
  5. for(k = 0; k < 20000000; k++);
  6. }
  7. int main(void)
  8. {
  9. Uart_Init();
  10. Port_Init();
  11. Uart_SendString("\r\nHello, Mini6410\r\n");
  12. for(;;) {
  13. //LED对对碰
  14. Led_Display(0x9); // 1001
  15. LedDelay();
  16. Led_Display(0x6); // 0110
  17. LedDelay();
  18. //流水灭灯
  19. LedDelay();
  20. LedDelay();
  21. Led_Display(0x1);//0001
  22. LedDelay();
  23. Led_Display(0x2);//0010
  24. LedDelay();
  25. Led_Display(0x4);//0100
  26. LedDelay();
  27. Led_Display(0x8);//1000
  28. LedDelay();
  29. LedDelay();
  30. <span style="white-space:pre">  </span>//流水亮灯
  31. <pre name="code" class="plain">     Led_Display(0xe);//1110
  32. LedDelay();
  33. Led_Display(0xd);//1101
  34. LedDelay();
  35. Led_Display(0xb);//1011
  36. LedDelay();
  37. Led_Display(0x7);//0111
  38. LedDelay();
  39. LedDelay();</pre>//交替闪烁:1、3同闪,2、4同闪     Led_Display(0x5); // 0101

[plain] view plain copy

  1. <pre name="code" class="plain">         LedDelay();  </pre>        Led_Display(0xa); // 1010<br>

[plain] view plain copy

  1. <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了。

[cpp] view plain copy

  1. <pre name="code" class="cpp"></pre>

完成效果

时间: 2024-12-10 01:58:06

ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序的相关文章

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

【教程】原创:历上最简单的游戏编程入门教程(基于cocos2d-js)

前言: 大家好.我是一个游戏开发者.曾就职于cocos2d-x这个手机游戏引擎的开发的公司. 在这边我准备了一个最简单的教程,想告诉大家制作一个游戏有多简单. 回忆起当年刚刚步入游戏这个行业,我也抱着非常多的疑问. 所以如果大家对游戏有兴趣的朋友,可以在下面留言. 这个教程我会讲的非常通俗易懂.争取几句话之内就让你看到一个效果. 另外教程里面有丰富的图文讲解.我保证你学完之后掌握了做游戏的真髓. 你完全可以马上开始做自己的游戏.并且能够让你的游戏在网页上,ios,android 还有pc平台上跑

Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代表用户的请求. ServletResponse – 代表用户的响应. 本篇博客讲解: ServletRequest – 代表用户的请求. ServletResponse – 代表用户的响应. 表单中的多选框参数接收. 文件的上传技术. ServletRequest : ServletRequest

VS单元测试入门实践教程

摘要:本教程不会介绍单元测试的基本理论知识,也不会和大家讨论在实际项目中是否需要写单元测试代码的问题.但是如果你此时想使用VS中的单元测试的工具来测试某个方法是否正确,可你又从来没真正实践过,那么本教程将带你一步一步使用VS2010集成的Unit Test进行断言(Assert)式验证数据的正确性,及代码覆盖率的查看. 关键词:Unit Test.单元测试.代码覆盖率.Assert.Twifly 正文: 在本入门教程中我们假设来测试一个简单的加法运算方法是否正确.该方法能够接受任意个参数,参数类

sass、less和stylus的安装使用和入门实践

刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用css预处理器来合作,是一种很痛苦,即使不痛苦那也是需要花费非常多的时间来协调合作上的.对于预处 理器的态度,目前是本着学习新技术和推动css向前进的思想来学习新玩意.下面这篇文章来自w3cplus,这是一篇非常强大的文章,私以为互联网上介绍这方面知识的就属这篇文章是鼻祖了. 经过了这篇文章的学习,我

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门

1.前言 即时通讯网整理了大量的网络编程类基础文章和资料,包括<TCP/IP协议 卷1>.<[通俗易懂]深入理解TCP协议>系列.<网络编程懒人入门>系列.<不为人知的网络编程>系列.<P2P技术详解>系列.<高性能网络编程>系列.甚至还有图文并貌+实战代码的<NIO框架入门>等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然.尤其现在移动网络大行其道的时代,在网络环境如此复杂的

编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语

四则运算编译器,虽然说功能很简单,只能编译四则运算表达式.但是编译原理前端部分几乎都有涉及,词法分析,语法分析,还有代码生成. 再复杂的编译器.再简单的编译器,功能上是差不多的,只是复杂的编译器实现上会更困难. 这个系列的文章是为了帮助你入门,在这个基础上再去看编译原理相关书籍,不至于打瞌睡. 如果你对编译原理很有兴趣,并且想更深一步的学习,在这里强烈推荐你看一本书--我心目中的神书--<计算机系统要素-从零开始构建现代计算机>. 这本书神在哪? 神在它通俗易懂,对小白足够友好,但又不过分肤浅

机器学习入门实践——线性回归&非线性回归&mnist手写体识别

把一本<白话深度学习与tensorflow>给啃完了,了解了一下基本的BP网络,CNN,RNN这些.感觉实际上算法本身不是特别的深奥难懂,最简单的BP网络基本上学完微积分和概率论就能搞懂,CNN引入的卷积,池化等也是数字图像处理中比较成熟的理论,RNN使用的数学工具相对而言比较高深一些,需要再深入消化消化,最近也在啃白皮书,争取从数学上把这些理论吃透 当然光学理论不太行,还是得要有一些实践的,下面是三个入门级别的,可以用来辅助对BP网络的理解 环境:win10 WSL ubuntu 18.04

scrapy入门实践1

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 这就是整个Scrapy的架构图了: 各部件职能: Scrapy Engine: 这是引擎,负责Spiders.ItemPipeline.Downloader.Scheduler中间的通讯,信号.数据传递等 Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队.并等待Scrapy Engine(引擎)来请