题外话:为什么要学习裸机编程?
学习裸机编程是为以后学习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)
[u] 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/
分享到:
相关推荐
关于如何使用TQ210裸机,以及裸机的开发下载方式。资源分有点贵,见谅,不过绝对值得!
包含TQ210_BOARD_V6板卡中的LED,时钟初始化,UART初始化,printf格式化输出裸机代码
本文是关于S5PV210(TQ210)学习笔记——内存配置(DDR2)。
本文是关于Nand配置。
在和网友聊天过程中,他让我写一个tq210开发板的led裸机程序,所幸不辱使命,配合数据手册完成了这个小程序,对tq210的使用有借鉴意义
经常有客户咨询TQ210修改启动logo,为了让客户在后续方便使用,现在分享TQ210修改启动logo的方法,资料以PDF文档上传到百度网盘,欢迎大家下载!
linux环境下的TQ2440裸机例子,主要是通过makefile来编译的,可以直接下到TQ2440的开发板上运行,通过jlink下到norflash上运行,需要disconnect和复位。
TQ210按键驱动,用中断方式编写。使用串口0打印按键值。还是裸机程序,希望玩裸机程序的朋友需要。
资源:S3C2440裸奔之LCD显示图片和画图.rar
TQ2440裸机开发试验之Mmu_Nand.rarTQ2440裸机开发试验之Mmu_Nand.rar
TQ2440的裸机程序,分别用KEY1~4控制LED1~4!RVMDK工程!
TQ2440裸机开发试验之RTC.rar
TQ2440裸机开发蜂鸣器程序,包含启动代码的各文档说明。
TQ2440裸机开发试验之MMU.raTQ2440裸机开发试验之MMU.ra
TQ2440裸机开发试验之Nand_1.rar
TQ2440裸机开发舵机控制测试程序。1.利用Timer1的PWM功能实现TOUT1输出舵机控制信号;2.模仿C51程序,Timer1定时并设置Timer1中断,中断函数控制GPA0输出PWM信号。上述2个程序均利用串口接收键盘输入,键盘+和-,...
TQ2440开发板按键点亮LED驱动开发详解 很好,很强大,代码都有解释。
TQ2440裸机开发试验之ADC.rar
温度高于32摄氏度,启动报警器同时让LED1每隔200ms进行闪烁; 2.终端界面每隔10秒刷新显示当前电压值(用于模拟烟雾浓度),单位伏;电压高于2.5伏,启动报警器同时让LED2每隔400ms闪烁; 3.终端界面显示红外监控...