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

前期准备:

  1. 查阅x210bv3s.pdf得到开发板LED模块的原理图:

    从原理图中了解到:其中三颗LED分别接在GPJ0_3、GPJ0_4、GPJ0_5,还有一颗LED接在PWMTOUT1。下面我们继续查阅手册

  2. 查阅x210cv3.pdf得到PWMTOUT1对应的引脚原理图:

由此我们得到了PWMTOUT1所对应的引脚为GPD0_1。

3.  查阅S5PV210_UM_REV1.1.pdf手册,得到引脚对应的寄存器地址以及相关寄存器的设置:

从手册中,我们可知一下三个重要的参数:

1. GPJ0CON的寄存器地址为: 0xE0200240,GPJ0DAT的寄存器地址为:0xE0200244

2. GPJ0_3~GPJO_5中对应位设置为0001则为Output模式

3.结合LED原理图得知,当对应的引脚输出低电平时,则LED灯就点亮,否则就熄灭

同样道理,我们找到GPD0相关的说明文档:

可知,GPD0CON对应寄存器的地址为:0xE02000A0。GPD0DAT对应寄存器的地址为:0xE02000A4,对应位的设置参数与上面的一致。

至此,我们对于这个开发板中LED的分析工作就告一段落,下面就开始我们的编程。

编程实现:

  1. 目的:实现四颗LED同时点亮和熄灭的循环闪烁。
  2. 代码:

#define GPJOCON 0xE0200240
#define GPJ0DAT 0xE0200244
#define GPD0CON 0xE02000A0
#define GPD0DAT 0xE02000A4

.global _start
_start:

//GPJ0_3 ~ GPJ0_5 are output
 ldr r1,=GPJOCON
 ldr r0,=0x00111000
 str r0,[r1]

//GPD0_0 is output
 ldr r0,=0x0010
 ldr r1,=GPD0CON
 str r0,[r1]
bling:
 //led1-3 are on
 ldr r0,=(0<<3 | 0<<4 | 0<<5)
 ldr r1,=GPJ0DAT
 str r0,[r1]
 
 //led4 is on
 ldr r0,=0<<1
 ldr r1,=GPD0DAT
 str r0,[r1]

bl delay
 
 //led1-3 are off
 ldr r0,=(1<<3 | 1<<4 | 1<<5)
 ldr r1,=GPJ0DAT
 str r0,[r1]
 
 led4 is off
 ldr r0,=1<<1
 ldr r1,=GPD0DAT
 str r0,[r1]

bl delay

b bling

delay:
 ldr r2,=9999999
 ldr r3,=0x0
 delay_loop:
  cmp r2, r3
  sub r2, r2, #1
  bne delay_loop
 mov pc,lr

3.  通过交叉编译工具得到led.bin

4. 通过DNW工具,将bin写入到地址D0020010中(查手册可知),这个LED点亮实验就算是完成了

时间: 2024-09-30 20:43:37

S5PV210裸机程序之点亮LED【基于九鼎X2103BVS】的相关文章

3.修改第一个程序来点亮LED

在上一节中已经将驱动程序框架搭建好了 接下来开始写硬件的操作(控制LED): (1)看原理图,确定引脚 (2)看2440手册 (3)写代码(需要使用ioremap()函数映射虚拟地址,在linux中只能使用虚拟地址) (4)修改上一节的测试程序 (5)使用次设备号来控制设备下不同的灯 1.看led引脚 最终确定: LED1 ->GPF4  LED2 ->GPF5   LED3 ->GPF6 2.看2440手册 配置GPFCON[15:0](0x56000050)的位[8:9].位[10:

S5PV210裸机程序之重定位与链接脚本

s5pv210开发板要求代码在0xD0020010处开始执行(BL1),但是有时我们的程序需要重定位在另外一个地址执行(如uboot),这个时候需要我们在汇编代码处加入重定位操作的代码,使得程序能够长跳转到另外一个地址继续执行代码而不会因为执行了与地址有关编码而导致执行错误. 链接脚本如下: SECTIONS {     . = 0xD0024000;     .text : {         start.o         * (.text)         }     .data : {

tq2440裸机程序. 按键控制LED灯.

http://blog.csdn.net/w_ww_w/article/details/8211538 http://blog.csdn.net/shengnan_wu/article/details/8168795

TQ2440按键点亮LED灯的裸机程序

一,说到做ARM的裸机程序,很多人马上就会联想到一个名为ADS的开发工具,但是我们在linux下同样也可以做ARM的裸机程序,下面来说说其具体实施过程: 步骤一:编辑代码,这个没什么好说的. 步骤二:编译代码,编译代码分为三个方面的内容:1.链接脚本 2.用命令行确定链接时的文件顺序 3.用命令行编译.这三部分的内容可以全部写成一个Makefile文件,编译的时候执行make命令就可以了. 步骤三:把编译后的".bin"文件烧写进开发板,重新上电观察效果. 二,TQ2440按键点亮LE

嵌入式Linux裸机开发(一)——点亮Led

嵌入式Linux裸机开发(一)--点亮Led 开发板:友善之臂smart210 一.电路图查阅 1.底板电路图 查阅开发板底板电路图,查阅LED相关部分 LED电路工作原理: LED的正极接3.3V,负极接地时导通,LED发光. 开发板共有四颗LED,正极接3.3V,负极接开发板的LED1_LED4引脚,如果LED要点亮则需要输入低电平. 2.核心板电路图 查阅核心板电路图可知,LED1-LED4接在SoC的GPJ2_0-GPJ2_3,通过控制GPJ2_0-GPJ2_3的寄存器使对应GPIO引脚

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

Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个SecureCRT代替超级终端. 一定要,把AXD也设置上. secureCRT的配置:选择Serial串口,波特率115200,端口号:USB转串(去驱动程序查端口号,今天插了一个COM4,一个COM5) 实验步骤: 配置好了以后,打开CodeWarrior编译mini6410-led.bin文件

ARM裸机之点亮LED

声明:本文由个人学习过程中整理而成,转载请注明出处 实验开发版:S5PV210 1.什么是GPIO? General Purpose Input Output (通用输入/输出)简称为GPIO,属于芯片引脚的一部分. 嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号.而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭.对这些设备/电路的控制,使用传统的串行口或并行口都不合适

ARM裸机程序之LED灯

从3月份开始看arm的裸机程序,到现在一个半月了,做到后来,发现自己越做到综合的程序,越吃力,还是得回头看看,为了最终写一个bootloader打下点基础吧,所以以这篇文章为开始,总结一下之前做过的裸机程序,希望会有所收获,我用的开发板是友善之臂的mini2440. 首先声明一点我都是在linux环境下写裸机程序的,因为这样能知道更多底层的东西,不过在这里面写就是有点不方便的是调试的时候,所以你程序要是调试不出来,你得把程序移植到一些编译器里调试(请注意移植的时候格式有点不同),所以偶尔在kei

基于KEIL4开发ARM9(S3C2440)的裸机程序

本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程:   1.新建工程,选择S3C2440A处理器: 2.对工程进行设置 1)设置RAM.ROM地址: RAM1: Start:0x30000000 Size:0x200000 ROM1: Start:0x30200000 Size:0x200000 2)生成Hex文件 3)设置生成.0 .bin .