打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
优龙FS2410跑裸机程序(linux下和ADS1.2下的区别)

一、功能

实现最简单的点灯功能:点亮灯D9、D10、D11、D12

二、运行环境及相关资料:

硬件:FS2410开发板

引脚接口电路:见光盘资料里的

FS2410用户光盘v2008/原理图/protel原理图、PCB结构尺寸/schematics

引脚I/O寄存器地址:见FS2410手册第九章第16页:P9-16

三、Linux下编译裸机程序代码分析

LINUX环境下的示例代码:共两个文件led_on.S和Makefile

led_on.S

@******************************************************************************

@ File:led_on.S

@ 功能:LED点灯程序,点亮LED D9、D10、D11、D12

@******************************************************************************       

.text

.global _start

_start:     

LDR     R0,=0x56000050      @ R0设为GPFCON寄存器。此寄存器

@ 用于选择端口F各引脚的功能:

@ 是输出、是输入、还是其他

MOV     R1,#0x00005500        

STR     R1,[R0]             @ 设置GPF4、GPF5、GPF6、GPF7为输出口

LDR     R0,=0x56000054      @ R0设为GPFDAT寄存器。此寄存器

@ 用于读/写端口F各引脚的数据

MOV     R1,#0x00000000      @ 此值改为0x000000F0,

@可让LED9、LED10、LED11、LED12熄灭灭

STR     R1,[R0]             @ GPF4、GPF5、GPF6、GPF7输出0,LED9、LED10、LED11、LED12点亮

MAIN_LOOP:                            @注意这里有冒号,ADS1.2里没有

B       MAIN_LOOP

Makefile

led_on.bin : led_on.S

arm-softfloat-linux-gnu-gcc -g -c -o led_on.o led_on.S

arm-softfloat-linux-gnu-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf

arm-softfloat-linux-gnu-objcopy -O binary -S led_on_elf led_on.bin

clean:

rm -f   led_on.bin led_on_elf *.o

注意:Linux下,与ADS1.2编写的程序略有不同。汇编程序开头和结尾不一样;linux里循环语句有冒号,linux下的注释用@符号。

这里要注意的是Makefile里的交叉编译工具要和自己系统上装的编译器名字一样

yun@yun-desktop:/work/luojichengxu/led_on$ ls -l

total 8

-rw-rw-rw- 1 yun yun 966 2011-07-15 15:18 led_on.S

-rw-rw-rw- 1 yun yun 259 2011-07-15 13:04 Makefile

yun@yun-desktop:/work/luojichengxu/led_on$ make

arm-softfloat-linux-gnu-gcc -g -c -o led_on.o led_on.S

arm-softfloat-linux-gnu-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf

arm-softfloat-linux-gnu-objcopy -O binary -S led_on_elf led_on.bin

yun@yun-desktop:/work/luojichengxu/led_on$ gedit Makefile 

yun@yun-desktop:/work/luojichengxu/led_on$ ls -l

total 24

-rwxr-xr-x 1 yun yun    36 2011-07-15 18:16 led_on.bin

-rwxr-xr-x 1 yun yun 34145 2011-07-15 18:16 led_on_elf

-rw-r--r-- 1 yun yun  1412 2011-07-15 18:16 led_on.o

-rw-rw-rw- 1 yun yun   966 2011-07-15 15:18 led_on.S

-rw-rw-rw- 1 yun yun   259 2011-07-15 13:04 Makefile

然后将led_on.bin烧入板子即可

四、XP下ADS1.2里编译裸机程序代码分析

XP下在ADS1.2环境下的示例代码:只需一个led_on.S 文件

;******************************************************************************

; File:led_on.S

; 功能:LED点灯程序,点亮LED9、LED10、LED11、LED12

;******************************************************************************       

CODE32

AREA Init,CODE,READONLY

ENTRY      

LDR     R0,=0x56000050      ; R0设为GPFCON寄存器。此寄存器

; 用于选择端口F各引脚的功能:

; 是输出、是输入、还是其他

MOV     R1,#0x00005500        

STR     R1,[R0]             ; 设置GPF4、GPF5、GPF6、GPF7为输出口

LDR     R0,=0x56000054      ; R0设为GPFDAT寄存器。此寄存器

; 用于读/写端口F各引脚的数据

MOV     R1,#0x00000000      ; 此值改为0x000000F0,

; 可让LED9、LED10、LED11、LED12熄灭

STR     R1,[R0]             ; GPF4、GPF5、GPF6、GPF7输出0,LED9、LED10、LED11、LED12点亮

MAIN_LOOP                            ;注意这里没有冒号,linux里才有

B       MAIN_LOOP

END                            ;注意这里有END结尾

注意:汇编程序linux下和ADS1.2不一样,ADS1.2循环语句没有冒号,ADS1.2下注释用英文状态下的;符号

ADS1.2编译操作流程:

新建工程

新建文件点击工具栏最左边的按钮

然后在新文件中添加代码,即led_on.S 中的代码。点击保存,保存到工程led所在目录,这里只是存放led.S

在空白处右击鼠标

将新建的文件添加到led工程里 

编译和链接工程,关键是配置 

编译工程

编译生成的led.bin烧入板子即可

五、烧写裸机程序的方法

1)XP下用H-JTAG烧写

FS2410关于H-JTAG的配置文件如下所示:

烧写nor-flash,导入配置文件2410x-nor.hfc(切记拔掉FS2410板子上JP1短接帽。)

FLASH SECTION:

SST

SST39VF1601

MEMORY SECTION:

16-BIT X 1-CHIP

0x00000000

0x30000000

XTAL SECTION:

NULL

TCK SECTION:

-1

-1

SCRIPT SECTION:

SoftReset+++

Setmem+32-Bit+0x53000000+0x00000000 

Setmem+32-Bit+0x4A000008+0xFFFFFFFF

Setmem+32-Bit+0x4A00001C+0x000007FF

Setmem+32-Bit+0x53000000+0x00000000 

Setmem+32-Bit+0x56000050+0x000055AA

Setmem+32-Bit+0x4C000014+0x00000003

Setmem+32-Bit+0x4C000000+0x00FFFFFF

Setmem+32-Bit+0x4C000004+0x00074012 

Setmem+32-Bit+0x4C000008+0x00058042

Setmem+32-Bit+0x48000000+0x22111120 

Setmem+32-Bit+0x48000004+0x00002F50 

Setmem+32-Bit+0x48000008+0x00000700 

Setmem+32-Bit+0x4800000C+0x00000700 

Setmem+32-Bit+0x48000010+0x00000700 

Setmem+32-Bit+0x48000014+0x00000700 

Setmem+32-Bit+0x48000018+0x0007FFFC 

Setmem+32-Bit+0x4800001C+0x00018005 

Setmem+32-Bit+0x48000020+0x00018005 

Setmem+32-Bit+0x48000024+0x008E0459 

Setmem+32-Bit+0x48000028+0x00000032 

Setmem+32-Bit+0x4800002C+0x00000030 

Setmem+32-Bit+0x48000030+0x00000030 

PGMOPTION SECTION:

烧写nand-flash,导入配置文件2410x-nand.hfc(切记盖上FS2410板子上JP1短接帽。)

FLASH SECTION:

NAND-FLASH

S3C2410+K9F1208

MEMORY SECTION:

08-BIT X 1-CHIP

0x0

0x30000000

XTAL SECTION:

NULL

TCK SECTION:

-1

-1

SCRIPT SECTION:

SoftReset+++

Setmem+32-Bit+0x53000000+0x00000000 

Setmem+32-Bit+0x4A000008+0xFFFFFFFF

Setmem+32-Bit+0x4A00001C+0x000007FF

Setmem+32-Bit+0x53000000+0x00000000 

Setmem+32-Bit+0x56000050+0x000055AA

Setmem+32-Bit+0x4C000014+0x00000003

Setmem+32-Bit+0x4C000000+0x00FFFFFF

Setmem+32-Bit+0x4C000004+0x00074012 

Setmem+32-Bit+0x4C000008+0x00058042

Setmem+32-Bit+0x48000000+0x22111120 

Setmem+32-Bit+0x48000004+0x00002F50 

Setmem+32-Bit+0x48000008+0x00000700 

Setmem+32-Bit+0x4800000C+0x00000700 

Setmem+32-Bit+0x48000010+0x00000700 

Setmem+32-Bit+0x48000014+0x00000700 

Setmem+32-Bit+0x48000018+0x0007FFFC 

Setmem+32-Bit+0x4800001C+0x00018005 

Setmem+32-Bit+0x48000020+0x00018005 

Setmem+32-Bit+0x48000024+0x008E0459 

Setmem+32-Bit+0x48000028+0x00000032 

Setmem+32-Bit+0x4800002C+0x00000030 

Setmem+32-Bit+0x48000030+0x00000030 

PGMOPTION SECTION:

ADDON SECTION:

NULL

另外:可参考:韦东山的书《嵌入式Linux应用开发技术大全》第五章,用韦东山书中提供的烧写软件烧写

韦东山书中提供的烧写软件也有支持windows下烧写,不过它要求待烧写程序要和软件放在同一级目录下,

切记将JTAG硬件上的跳转按钮设置为SJF模式

建议烧写到nand-flash里

2)linux下用Jflash-s3c2410烧写裸机程序

可参考:韦东山的书《嵌入式Linux应用开发技术大全》第五章,用韦东山书中提供的烧写软件烧写

目前linux下只支持烧写到nand-flash

切记将JTAG硬件上的跳转按钮设置为SJF模式

首先为虚拟机VMware添加一个并口设备

点击工具栏VM->settings,点击Add,选择Parallel Port

切记不能点击Connect at power on,否则XP下的并口不能使用。最后点击OK,

记住以后每次要使用虚拟机VMware的并口时,手动连接如下图,使用完切记断开连接

其次,将烧写工具Jflash-s3c2410复制到linux下

yun@yun-desktop:/work/luojichengxu$ ls

Jflash-s3c2410  key_led  led_on  leds

查看烧写命令格式:

yun@yun-desktop:/work/luojichengxu$ sudo ./Jflash-s3c2410 

+------------------------------------+

|     SEC JTAG FLASH(SJF) v 0.11     +

|     modified by MIZI 2002.7.13     +

+------------------------------------+

Usage: SJF/t=/d=

Flash Type List

1:SMDK2410:K9S3208 4MB

2:SMDK2410:K9S6408 8MB

3:SMDK2410:K9S2808 16MB

4:SMDK2410:K9S5608 32MB

5:SMDK2410:K9S1208 64MB

6:SMDK2410:AM29LV800BB

开始烧写:

yun@yun-desktop:/work/luojichengxu$ sudo ./Jflash-s3c2410 ./led_on/led_on.bin /t=5

+------------------------------------+

|     SEC JTAG FLASH(SJF) v 0.11     +

|     modified by MIZI 2002.7.13     +

+------------------------------------+

> flashType=5

> S3C2410X(ID=0x0032409d) is detected.

> K9S1208 is detected. ID=0xec76

K9S1208 NAND Flash JTAG Programmer Ver 0.0

0:K9S1208 Program      1:K9S1208 Pr BlkPage   2: Exit                

Select the function to test :0

[SMC(K9S1208) NAND Flash Writing Program]

Source size: 0x23

Available target block number: 0~4095

Input target block number:0

target start block number     =0

target size        (0x4000*n) =0x4000

STATUS:Eppp

总结:裸机程序从编写到烧入板子运行的完整流程,关键注意linux下和ADS1.2下汇编程序的区别,ADS1.2的配置。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
ARM下裸机开发环境大全
mini2440裸机程序LED
MSP430单片机实践篇-数码管显示-74HC595动态扫描
复旦微ZYNQ EMIO控制PL LED
ARM9/ARM11裸机开发笔记1之MDK开发环境和点亮LED
从裸机编程到嵌入式Linux编程思想的转变
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服