第一部分是玩pcduino3下的裸机。这个过程能够让我们更好的理解嵌入式系统,熟悉我们使用的这个平台。

        首先介绍下开发环境:

虚拟机:VMware® Workstation 10.0.2 build-1744117

系统:Linux slackware 3.2.29-smp #2 SMP 

        交叉编译器:arm-linux-gnueabihf-    版本:gcc version 4.8.2 20130805 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2013.08 - Linaro GCC 2013.08)

        编辑器:Vim

        硬件连接例如以下:

        USB 5V电源线和USB转TTL线连接到pcduino3上,如图:

        

        

        说是流水灯,事实上我只用到两个灯,这个板子的LED不多,并没有专门的流水灯配置。

我们先看一下原理图:

        

        我只用到TX_LED和RX_LED两个灯:

        我们用到这里的TX和RX两个灯。又一次回到原理图看看哪两个管脚来控制这两个LED的:

        PH15和PH16分别控制TX_LED和RX_LED。

        在弄清楚硬件连接后。在正式编写汇编代码之前。我们先理清A20的boot顺序,依据其datasheet上简洁的介绍。它支持mmc启动。也支持nand flash启动,而且mmc启动优先于nand flash启动。A20的datasheet并没有具体写出boot的硬件细节,大概的估摸出大概过程例如以下:mmc启动条件下,硬件会自己主动将mmc卡中位于偏移量在8K和40K之间的数据搬移到内部的SRAM1和SRAM2中:

        如今的uboot支持spl方式,就是位于前32k的部分首先在SRAM中执行。然后初始化DRAM和MMC接口,然后再搬移兴许的uboot到内存中执行,再进行载入kernel的操作。

        除了这一点。还要注意,MMC启动时须要加上特定的头,这里我们要用到uboot/tools里面的mksunxiboot工具加这个头。这个头由32个字节的结构体boot_file_head定义,这个结构体里面有MAGIC和check sum。然后生成一条跳转代码来跳转到真正地代码处进行执行。

        代码分为两个汇编文件:start.S和led.S。start.S设定栈指针,然后就跳到led.S中的主函数中。

        start.S代码例如以下:

        

.text
.global _start _start: ldr sp, =0x00007f00 bl main halt_loop:
b halt_loop

        led.S例如以下:

.equ	PH_CFG1, 0x01C20900
.equ PH_CFG3, 0x01C20904 .equ PH_PULL0, 0x01C20918
.equ PH_PULL1, 0x01C2091C .equ PH_DAT, 0x01C2090C .global main main:
ldr r0,=PH_CFG1
ldr r1,=0x10000000
str r1, [r0] ldr r0,=PH_CFG2
ldr r1,=0x00000001
str r1, [r0] ldr r0,=PH_PULL0
ldr r1,=0x55555555
str r1, [r0] ldr r0,=PH_PULL1
ldr r1,=0x55555555
str r1, [r0]
ledloop: ldr r0,=PH_DAT
ldr r1,=0x000f0000
str r1, [r0] bl delay ldr r0,=PH_DAT
ldr r1,=0x0000f000
str r1, [r0] bl delay b ledloop delay:
ldr r3,=0xfffff delay1:
sub r3,r3,#1
cmp r3,#0x0
bne delay1
mov pc,lr

代码非常easy,编译完后记得使用mksunxiboot工具处理一下,最后使用dd命令烧写到8K偏移处。

        最后就能够看到两个灯一闪一闪亮晶晶了,如今还没有初始化时钟,注意调整延时,不然效果不大对。

        

        

        

一步步玩pcDuino3--mmc下的裸机流水灯的更多相关文章

  1. 【ARM】2410裸机系列-流水灯

    开发环境   1.硬件平台:FS2410(s3c2410) 2.主机:Ubuntu 12.04 LTS LED原理图 LED的GPIO的配置 配置GPFCON寄存器,设置GPF4-7为输出 配置GPF ...

  2. Tiny4412之C语言实现流水灯,Tiny4412裸机程序[3]

    在前边我们使用汇编完成了一个流水灯实验: Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 ---- - -- -- -- - -- -- 修改: # ${MKBL2} ${SOURCE ...

  3. Tiny4412汇编流水灯代码,Tiny4412裸机LED操作【转】

    本转载自:http://www.techbulo.com/1313.html Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 2014年10月20日 ⁄ 裸机程序 ⁄ 共 4171字 ...

  4. Tiny4412汇编流水灯代码,Tiny4412裸机LED操作[1]

    从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一 ...

  5. Zedboard学习(三):PL下流水灯实验 标签: fpgazynqPL 2017-07-05 11:09 21人阅读 评论(0)

    zynq系列FPGA分为PS部分和PL部分. PL: 可编程逻辑 (Progarmmable Logic), 就是FPGA部分. PS: 处理系统 (Processing System) , 就是与F ...

  6. 一步步玩pcDuino3--mmc下的bootloader

    pcDuino3下支持mmc启动.官方的Uboot是採用SPL框架实现的,由于内部的SRAM空间达到32K,我们全然能够在这32K空间内编写一个完整可用小巧的bootloader来完毕引导Linux ...

  7. 一步步玩pcDuino3--uboot下的ping,加入命令能够接受来自host的ping

    uboot是一个很优秀的开源项目.不只能够学习bootloader.嵌入式,各种总线协议. 还能够了解网络协议栈.在嵌入式开发中,常常使用uboot的tftp和nfs来加快开发的效率.那么在tftp能 ...

  8. 玩转 H5 下拉上滑动效果

    在APP中我们经常会在页面下拉时看到一些动效,例如下拉图片跟随放大.下拉刷新出现loading动画等,这个交互细节在各个主流APP以及手机原生系统中随处可见,能为APP增添个性亮点. 一.背景 在我们 ...

  9. 玩转 H5 下拉上滑动效

    按照上面的技术方案实施,具体过程为: 禁用页面顶部下拉事件  ------>  将页面的主体内容用一个DIV容器包含起来,同时复制需要放大处理的内容节点至主体内容之外  ------> 绑 ...

随机推荐

  1. x86服务器中网络性能分析与调优 转

    x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 ...

  2. Understanding Objective-C Blocks

    The aim of this tutorial is to give a gentle introduction to Objective-C blocks while paying special ...

  3. 【ActiveMQ】管理界面查看消息详情,报错/WEB-INF/tags/form/forEachMapEntry.tag PWC6199: Generated servlet error: The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

    ActiveMQ版本:5.12 JDK版本:1.8 ===================== 使用ActiveMQ过程中,在管理界面查看消息详情,发现报错: 查看日志信息,报错如下: 2017-11 ...

  4. 双网卡环境导致Oracle连接异常

    现在就是流行向最高水平看齐,这次项目的部署,好好的SQL Server扔了(有正版授权的企业版,神啊...),逢人就夸:“俺们那上的可是最顶级的Oracle Database System!”.看了看 ...

  5. 处理类型(typedef,uisng,auto,decltype)

    一:类型别名是一个名字,它是某种类型的定价.有两种方法定义类型别名: 1.使用typedef关键字,如: typedef int *Int_Ptr Int_Ptr p=nullptr;   //Int ...

  6. java编程思想第四版第9章

    练习3: public class MainTest { public static void main(String args[]){ Bcycle b=new Bcycle(); b.print( ...

  7. opengl加载多个3ds模型失败记

    VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...

  8. websocket关于禁止一个账号多窗口链接的问题

    通过websocket的session.getSessionId()与oldSession.getSessionId()来equals判断是否是新窗口. 如果不同不让链接. 问题1.虽然新来的链接连不 ...

  9. svn:冲突(<<<<<<.mine ==== >>>>>>.xxxx)

    http://blog.csdn.net/u014000377/article/details/50605895 在svn更新文件时会产生有冲突的文件,一般有两种解决办法: 1.更新文件之前直接查看对 ...

  10. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...