dc咨询交流网2017地址:优龙FS2410跑裸机程序(linux下和ADS1.2下的区别)

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 00:53:39

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

2011-07-15 19:52:15|  分类: ARM&LINUX |字号 订阅

一、功能实现最简单的点灯功能:点亮灯D9、D10、D11、D12二、运行环境及相关资料:硬件:FS2410开发板引脚接口电路:见光盘资料里的FS2410用户光盘v2008/原理图/protel原理图、PCB结构尺寸/schematics  引脚I/O寄存器地址:见FS2410手册第九章第16页:P9-16  三、Linux下编译裸机程序代码分析LINUX环境下的示例代码:共两个文件led_on.S和Makefileled_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.Sarm-softfloat-linux-gnu-gcc -g -c -o led_on.o led_on.Sarm-softfloat-linux-gnu-ld -Ttext 0x0000000 -g led_on.o -o led_on_elfarm-softfloat-linux-gnu-objcopy -O binary -S led_on_elf led_on.binclean:rm -f   led_on.bin led_on_elf *.o
注意:Linux下,与ADS1.2编写的程序略有不同。汇编程序开头和结尾不一样;linux里循环语句有冒号,linux下的注释用@符号。这里要注意的是Makefile里的交叉编译工具要和自己系统上装的编译器名字一样yun@yun-desktop:/work/luojichengxu/led_on$ ls -ltotal 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 Makefileyun@yun-desktop:/work/luojichengxu/led_on$ makearm-softfloat-linux-gnu-gcc -g -c -o led_on.o led_on.Sarm-softfloat-linux-gnu-ld -Ttext 0x0000000 -g led_on.o -o led_on_elfarm-softfloat-linux-gnu-objcopy -O binary -S led_on_elf led_on.binyun@yun-desktop:/work/luojichengxu/led_on$ gedit Makefile yun@yun-desktop:/work/luojichengxu/led_on$ ls -ltotal 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:SSTSST39VF1601MEMORY SECTION:16-BIT X 1-CHIP0x000000000x30000000XTAL SECTION:NULLTCK SECTION:-1-1SCRIPT SECTION:SoftReset+++Setmem+32-Bit+0x53000000+0x00000000 Setmem+32-Bit+0x4A000008+0xFFFFFFFFSetmem+32-Bit+0x4A00001C+0x000007FFSetmem+32-Bit+0x53000000+0x00000000 Setmem+32-Bit+0x56000050+0x000055AASetmem+32-Bit+0x4C000014+0x00000003Setmem+32-Bit+0x4C000000+0x00FFFFFFSetmem+32-Bit+0x4C000004+0x00074012 Setmem+32-Bit+0x4C000008+0x00058042Setmem+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-FLASHS3C2410+K9F1208MEMORY SECTION:08-BIT X 1-CHIP0x00x30000000XTAL SECTION:NULLTCK SECTION:-1-1SCRIPT SECTION:SoftReset+++Setmem+32-Bit+0x53000000+0x00000000 Setmem+32-Bit+0x4A000008+0xFFFFFFFFSetmem+32-Bit+0x4A00001C+0x000007FFSetmem+32-Bit+0x53000000+0x00000000 Setmem+32-Bit+0x56000050+0x000055AASetmem+32-Bit+0x4C000014+0x00000003Setmem+32-Bit+0x4C000000+0x00FFFFFFSetmem+32-Bit+0x4C000004+0x00074012 Setmem+32-Bit+0x4C000008+0x00058042Setmem+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$ lsJflash-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~4095Input target block number:0target start block number     =0target size        (0x4000*n) =0x4000STATUS:Eppp
总结:裸机程序从编写到烧入板子运行的完整流程,关键注意linux下和ADS1.2下汇编程序的区别,ADS1.2的配置。