S5PV210实现流水LED

1、整体思路:把相应的配置数据写入相应的寄存器,控制GPIO电平(Led.s)——运用工程管理Makefile编译、链接文件(由Led.s编译得到led.bin,该文件用于USB启动方式点亮LED,若使用SD卡方式启动LED,则需要添加mkv210_image.c,使用gcc编译得到可执行程序mkmini210,然后通过执行mkmini210程序由led.bin加工得到210.bin)

2、所需文件:led.s、mkv210_image.c、Makefile

3、led.s

 1 /*
 2  * 文件名:    led.s
 3  * 描述:    流水灯
 4  */
 5
 6 #define GPJ0CON    0xE0200240
 7 #define GPJ0DAT    0xE0200244
 8
 9 .global _start    // 把_start链接属性改为外部,其他文件就可以看见_start
10 _start:
11     // 第一步:把所有引脚都设置为输出模式
12     ldr r0, =0x11111111    // 从=可以看出用的是ldr伪指令,需要编译器来判断这个数
13     ldr r1, =GPJ0CON    // 是合法立即数还是非法立即数。一般都用ldr伪指令
14     str r0, [r1]            // 寄存器间接寻址。把r0中的数写入到r1中的数为地址的内存中去
15
16 flash:
17     // 第1步:点亮LED1,其他熄灭
18     ldr r0, =~(1<<3)            //0000 0100,另外一种“低端”写法:ldr r0, =((0<<3) | (1<<4) | (1<<5))
19     ldr r1, =GPJ0DAT            //将GPJ0DAT地址赋值给r1
20     str r0, [r1]                // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮
21     bl delay                // 使用bl调用延时函数
22
23     // 第2步:点亮LED2,其他熄灭
24     ldr r0, =~(1<<4)
25     ldr r1, =GPJ0DAT
26     str r0, [r1]
27     bl delay
28
29     // 第3步:点亮LED3,其他熄灭
30     ldr r0, =~(1<<5)
31     ldr r1, =GPJ0DAT
32     str r0, [r1]
33     bl delay
34
35     //第4步:循环实现流水灯效果
36     b flash
37
38 // 延时函数:delay
39 delay:
40     ldr r2, =9000000
41     ldr r3, =0x0
42 delay_loop:
43     sub r2, r2, #1                //r2 = r2 -1
44     cmp r2, r3                    // cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立
45     bne delay_loop
46     mov pc, lr                    // 函数调用返回

4、mkv210_image.c
mkv210_image.c最终不是在开发板上执行,而是在主机linux(即执行make对整个项目进行编译的虚拟机)中执行,因此编译这个程序用gcc而不是用arm-linux-gcc。这个.c文件编译后得到可执行程序mkmini210,目的是通过执行这个mkmini210程序而由led.bin得到210.bin。(210.bin是通过SD卡启动时的裸机镜像,这个镜像需要由led.bin来加工的到,加工的具体方法和原理要在mkv210_image.c中编写实现)

5、Makefile

基本概念
目标:目标定格写,后面是冒号(冒号后面是依赖)
依赖:依赖是用来产生目标的原材料
命令:命令前面一定是Tab,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作

led.bin: led.o
    arm-linux-ld -Ttext 0x0 -o led.elf $^    //将当前目录下的.o文件链接成elf文件,
                                            //其中-Ttext 0x0表示程序的运行地址是0x0
                                            //当前编写的代码是未知无关码,所以程序能在任何一个地方运行
    arm-linux-objcopy -O binary led.elf led.bin //将elf文件抽取为可在开发板上运行的.bin文件
    arm-linux-objdump -D led.elf > led_elf.dis    //将elf文件反汇编后保存在dis文件中,可用于后期程序调试
    gcc mkv210_image.c -o mkx210
    ./mkx210 led.bin 210.bin

%.o : %.S
    arm-linux-gcc -o [email protected] $< -c    //将当前目录下存在的汇编文件编译成.o文件

%.o : %.c
    arm-linux-gcc -o [email protected] $< -c     //将当前目录下存在的C文件编译成.o文件

clean:
    rm *.o *.elf *.bin *.dis mkx210 -f
时间: 2024-10-11 18:20:06

S5PV210实现流水LED的相关文章

S5pv210——SD卡重入

1:s5pv210启动原理:s5pv210启动的时候首先查看OMpin设置的启动方式,如果设置为SDMMC启动的话,首先从SD的通道1启动,但是通道1连接的是iNand,如果iNand中启动不了, 则从SD卡的通道2启动,sd卡通道2连接外置的sd卡,BL0首先从sd卡的第一扇区中复制16kb到sram中去执行(包括16字节的校验头), 所以BL1所做的事情: (1) 开关置锁 (2) 关看门狗 (3) 开icache (4) 设置栈 (5) 初始化dram (6) 初始化dram以后,在执行s

利用51单片机做出一些炫彩效果

今天我们来讨论一下我们如何利用单片机做出一些炫彩的效果,而昨天好像是七夕节,很多人都把它当做了情人节,那么我们来做一个浪漫的"I  Love u":今天我就把代码写出来,而不再是截图挂出来.效果图我也就拍出来了,你们如果有单片机可以自己复制代码下来看一些效果.(其实这一次的代码有一点跨度大了,毕竟前面我并没有说的很深入,现在一下子又变得看不懂了,不过慢慢来,我会在以后的博客中把后边的讨论写详细一点)代码如下,注释我来写了一部分,但是不全,我会慢慢把它补齐. 效果大致如我以下描述:首先,

第一个FPGA工程—LED流水灯

这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始入门FPGA开发了. 1.1.1.电路说明 1.1.2.新建工程 第一步:从开始菜单启动Quartus II 13.1(64 bit) ,如下图. 第二步:菜单栏选择File->New Project Wizard,新建工程. 第三步:弹出新建工程对话框,点击Next,下一步. 第三步:如下图,依次

LED流水灯(一)

7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P1,TCON,等等. GPXCON:是X管脚的控制寄存器,控制它们的模式,比如输出模式,输入模式……GPXDAT:是X管脚的数据寄存器,存储它们的数据, GPIO ,通用的输入输出,其引脚可供编程使用,对于简单的外部设备,比如控制一个LED 灯的亮灭,自然 只需要一位 信号就够了. 使用传统的 串行

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

从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧: 开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312) 开发工具:UltraEdit 宿主机:VmWare Ubuntu12.04(64bit) 编译工具:arm-linux-gcc4.5.1 为了便于分类管理,特意开了一个Tiny4412学习专区,希望对大

嵌入式STM32程序编写基本流程(LED流水灯)

LED流水灯程序初始化流程 [cpp] view plain copy //1.定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure; //2.开启GPIOC的外部时钟,不同的外设开启不同的时钟,IO口复用时两个时钟都要开启.stmf10x_rcc.h RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //3.设置要控制的GPIO管脚 GPIO_InitStructure.GPIO_Pin=GPIO_Pin

Linux下控制GPIO实现LED流水灯(DM8168)

首先加载驱动模块,应用程序通过调用API实现GPIO控制功能. 驱动程序: 1 /* 2 * fileName: led_gpio.c 3 * just for LED GPIO test 4 * GP1_14 -> HDD 5 * GP1_15 -> REC 6 * GP1_27 -> NC 7 * GP1_28 -> IR 8 */ 9 10 #include <linux/device.h> 11 #include <linux/fs.h> 12 #i

利用简单的有限状态机(FSM)来实现一个简单的LED流水灯

有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路.一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有"记忆"功能的寄存器,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器.在有限状态机中,状态寄存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状

S5PV210裸机程序之点亮LED【基于九鼎X2103BVS】

前期准备: 查阅x210bv3s.pdf得到开发板LED模块的原理图: 从原理图中了解到:其中三颗LED分别接在GPJ0_3.GPJ0_4.GPJ0_5,还有一颗LED接在PWMTOUT1.下面我们继续查阅手册 查阅x210cv3.pdf得到PWMTOUT1对应的引脚原理图: 由此我们得到了PWMTOUT1所对应的引脚为GPD0_1. 3.  查阅S5PV210_UM_REV1.1.pdf手册,得到引脚对应的寄存器地址以及相关寄存器的设置: 从手册中,我们可知一下三个重要的参数: 1. GPJ0