天嵌 ARM开发社区

 找回密码
 注册
查看: 7233|回复: 9

TQ210裸机编程(1)——点亮一个LED

[复制链接]
freewing 发表于 2014-6-8 00:52:18 | 显示全部楼层 |阅读模式
题外话:为什么要学习裸机编程?

学习裸机编程是为以后学习u-boot移植和内核驱动做铺垫的。

如果你只做应用编程的话,那就不必学习裸机编程。




首先查看TQ210的底板原理图



从原理图可知两个LED分别接在S5PV210的GPC0_3和GPC0_4

要点亮LED1,则需要在GPC0_3引脚输出高电平,使三极管Q1导通

如果以前学过arm编程的应该知道,需要设置GPC0_3为输出




查看S5PV210芯片手册



从这里可知,需要设置GPC0CON寄存器的[15:12]为0b0001,使GPC0_3为输出模式

代码如下

ldr r0, =0xE0200060        @GPC0CON寄存器
ldr r1, =0x00001000        
str r1, [r0]                         @设置GPC0_3为输出,GPC0[15:12] = 0b0001







当端口配置为输入时,对应位为引脚状态,当配置为输出时,引脚状态和对应位相同。

我们需要设置GPC0DAT[3] = 1,使GPC0_3输出高电平

完整代码如下:

.global _start                @声明一个全局的标号
_start:
     ldr r0, =0xE0200060        @GPC0CON寄存器
     ldr r1, =0x00001000        
     str r1, [r0]            @设置GPC0_3为输出,GPC0[15:12] = 0b0001

    ldr r0, =0xE0200064        @GPC0DAT寄存器
     ldr r1, =0x00000008        
     str r1, [r0]            @设置GPC0_3为高电平

halt:
     b halt                    @死循环

问:为什么需要后面的死循环?

答:CPU一旦从某个地址运行,它就会从这个地址往后依次取指运行,当运行完我们的代码,它不会停止,还会往后继续取指运行,但是后面的指令是未知的,CPU运行后不知道会是什么结果,可能正常执行,也可能出现异常,所以我们应该让CPU一直在那里死循环。




Makefile文件

led_on.bin: led_on.o
    arm-linux-ld -Ttext 0x20000000 -o led_on.elf $^
     arm-linux-objcopy -O binary led_on.elf $@
     arm-linux-objdump -D led_on.elf > led_on.dis
     
led_on.o : led_on.S
     arm-linux-gcc -c $< -o $@

clean:
     rm *.o *.elf *.bin *.dis

这里指定了程序的链接地址(程序运行时应该位于的地址)为0x20000000,这是开发板的DDR2内存的起始地址,下面就会将程序下载到这个地址。





下载程序测试:

首先安装天嵌提供的DNW程序,用USB线连接PC机和开发板的OTG口,如下图






启动开发板按空格进入u-boot
#####    Boot for TQ210 Main Menu       #####
#####     EmbedSky USB download mode     #####

[1] Download bootloader (u-boot or bootimage) to Nand Flash
[2] Download WinCE NK image (NK.bin) to Nand Flash
[3] Download Linux Kernel (zImage.bin) to Nand Flash
[4] Download LOGO Picture (logo.bin) to Nand  Flash
[5] Download UBIFS image (root.ubi) to Nand Flash
[6] Download YAFFS image (root.bin) to Nand Flash
[7] Download Program to SDRAM and Run it
[8] Boot the system
[9] Format the Nand Flash
[0] Set the boot parameters
[a] Download User Program
[n] Enter TFTP download mode menu
[r] Reboot u-boot
[t] Test Linux Image (zImage)
Download bootloader to SD Card
Enter your selection:
按7下载程序到内存并运行它

Enter download address:(eg: 0xc0008000)
*20000000

Insert a OTG cable into the connector!


这里输入要下载的地址,然后回车

如果之前没安装天嵌提供的USB下载驱动,这时会提示安装驱动,然后就安装驱动,驱动装好后,打开TQBoardDNW,点击

参数设置->选项,设置如下




然后点击确认




选择 USB下载->UBOOT->选择文件

选择要下载的文件led_on.bin,下载完成后,u-boot使CPU跳到0x20000000地址去运行,可以看到LED1已点亮




转载来源:http://blog.csdn.net/zjhsucceed_329/
xiebo 发表于 2015-5-3 02:43:34 | 显示全部楼层
你能不用u-boot下载,直接放在SD卡上,然后BL0将它拷贝到片内RAM(SRAM)中运行吗?
quanelc 发表于 2015-8-6 10:41:58 | 显示全部楼层
12222222222222222222222222222
ppppppc 发表于 2015-9-19 01:22:19 | 显示全部楼层
现在用裸机。。。。。。疯了
ppppppc 发表于 2015-9-19 01:23:33 | 显示全部楼层
ppppppc 发表于 2015-9-19 01:22
现在用裸机。。。。。。疯了

进入单片机时代
suxin 发表于 2016-2-3 18:29:19 | 显示全部楼层
你好,裸机情况下,确实可以点亮;(或者说让程序在c0008000,执行;也相当于裸机)
但是如果将这个程序编译进模块的init的函数中,就不好使了;问题是出在哪里了呢?
KORNY 发表于 2016-9-3 15:44:26 | 显示全部楼层
ppppppc 发表于 2015-9-19 01:23
进入单片机时代

思维没有转变过来啊,没办法
clxiaobai 发表于 2017-6-26 22:18:31 | 显示全部楼层
很不错的基础学习过程,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-3-29 20:07 , Processed in 1.046869 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表