一、功能
实现最简单的点灯功能:点亮灯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的配置。
联系客服