《最新嵌入式系统设计VIVIPPT课件.ppt》由会员分享,可在线阅读,更多相关《最新嵌入式系统设计VIVIPPT课件.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统设计嵌入式系统设计VIVI建立软件开发环境n1、安装n2、安装Jtag工具链n3、安装开发调试工具:ADS、GDBEvaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.SC2410的基础实验二C语言编写的LED亮程序实验n汇编语言可读性太差,现在开始实验二,用C语言来实现同样的功能nSC2410的基础实验二C语言编写的LED亮程序实验Evaluation only.Created with Aspose.Slide
2、s for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.SC2410的基础实验二C语言编写的LED亮程序实验n实验源码分析nC语言程序执行的第一条指令,并不在main函数中。当我们生成一个C程序的可执行文件时,编译器总是在我们的代码前加一段固定的代码crt0.o,它是编译器自带的一个文件。此段代码设置C程序的堆栈等,然后调用main函数。n在我们的裸板上,编译器自带的这段代码无法执行,所以我们得自己写一个。ncrt0.s代码:n1.text n2.global _start n3 _start:n4 ldr
3、 sp,=1024*4 设置堆栈,注意:不能大于4k nand flash中的代码在复位后会 移到内部ram中,它只有4k n5 bl main 调用C程序中的main函数 n6 halt_loop:n7 b halt_loop Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.SC2410的基础实验二C语言编写的LED亮程序实验n现在,我们可以很容易写出控制LED的程序了,led_on_c.c代码如下:n1#defin
4、e GPBCON(*(volatile unsigned long*)0 x56000010)n2#define GPBDAT(*(volatile unsigned long*)0 x56000014)n3 int main()n4 n5 GPBCON=0 x00004000;/设置GPB7为输出口 n6 GPBDAT=0 x00000000;/令GPB7输出0 n7 return 0;n8 Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Asp
5、ose Pty Ltd.SC2410的基础实验二C语言编写的LED亮程序实验n我们来看看Makefile:n1 led_on_c:crt0.s led_on_c.c n2 arm-linux-gcc-g-c-o crt0.o crt0.s n3 arm-linux-gcc-g-c-o led_on_c.o led_on_c.c n4 arm-linux-ld-Ttext 0 x0000000-g crt0.o led_on_c.o-o led_on_c_tmp.o n5 arm-linux-objcopy-O binary-S led_on_c_tmp.o led_on_c n6 clean:
6、n7 rm-f led_on_c n8 rm-f led_on_c.o n9 rm-f led_on_c_tmp.o n10 rm-f crt0.o n第2、3行分别对源程序crt0.s、led_on_c.c进行预编译,第4行将预编译得到的结果连接起来,第5行把连接得到的ELF格式可执行文件led_on_c_tmp.o转换成二进n制格式文件led_on_c。n可以开始上机实验了:Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty
7、Ltd.SC2410的基础实验二C语言编写的LED亮程序实验n实验步骤:na进入LED_ON_C目录后,执行如下命令生成可执行文件led_on_c:make nb执行如下命令将led_on_c写入nand flash:ni.Jflash-s3c2410 led_on_c/t=5 nii.当出现如下提示时,输入0并回车:nK9S1208 NAND Flash JTAG Programmer Ver 0.0 n0:K9S1208 Program 1:K9S1208 Pr BlkPage 2:Exit nSelect the function to test:niii.当出现如下提示时,输入0并回车
8、:nInput target block number:niv.当出现与步骤ii相同的提示时,输入2并回车 nc按开发板上reset键后可看见LED1被点亮了Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.arm-linux-ld 命令的理解n下arm-linux-ld连接命令的使用narm-linux-ld-Ttext 0 x00000000 crt0.o led_on_c.o-o led_on_c_tmp.o 意思
9、:-o选项设置输出文件的名字为led_on_c_tmp.o;“-Ttext 0 x00000000”设置代码段的起始地址为0 x00000000;这条指令的作用就是将crt0.o和led_on_c.o连接成led_on_c_mp.o可执行文件,此可执行文件的代码段起始地址为0 x00000000。n大多机器上电时是从地址0开始运行的,但是从地址0运行程序在性能方面总有很多限制,所以一般在开始的时候,使用与位置无关的指令将程序本身复制到它的连接地址处,然后使用向pc寄存器赋值的方法跳到连接地址开始的内存上去执行剩下的代码。Evaluation only.Created with Aspose.S
10、lides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.arm-linux-ld 命令的理解narm-linux-ld命令中选项“-Ttext”也可以使用选项“-Tfilexxx”来代替,在文件filexxx中,我们可以写出更复杂的参数来使用arm-linux-ld命令n源代码为head.s、init.c和main.c。head.s调用中的函数来关WATCH DOG、初始化SDRAM、初始化NAND Flash,然后将main.c中的代码从NAND Flash地址4096开始处复制到SDRAM中,最
11、后,跳到main.c中的main函数继续执行。代码本身没什么难度,与前面程序最大的差别就是“连接脚本”的引入:在arm-linux-ld命令中,选项“-Ttext”可以使用选项“-Tfilexxx”来代替。在本实验中,使用“-Tnand.lds”。nand.lds内容如下:n1 SECTIONS n2 firtst 0 x00000000:head.o init.o n3 second 0 x30000000:AT(4096)main.o n4 n如果想进一步了解连接脚本如何编写,请参考Using ld The GNU linkerEvaluation only.Created with As
12、pose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.n(1)阶段1:arch/s3c2410/head.S 完成如下几件事情:n1、关WATCH DOG:上电后,WATCH DOG默认是开着的 n2、禁止所有中断:vivi中没用到中断(不过这段代码实在多余,上电后中断默认是关闭的)n3、初始化系统时钟:启动MPLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。请参考实验十一:CL
13、OCK n4、初始化内存控制寄存器:还记得那13个寄存器吗Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.n5、检查是否从掉电模式唤醒,若是,则调用WakeupStart函数进行处理这是一段没用上的代码,vivi不可能进入掉电模式 n6、点亮所有LED n7、初始化UART0:na设置GPIO,选择UART0使用的引脚 nb初始化UART0,设置工作方式(不使用FIFO)、波特率115200 8N1、无流控等,Eval
14、uation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.n8、将vivi所有代码(包括阶段1和阶段2)从nand flash复制到SDRAM中:na设置nand flash控制寄存器 nb设置堆栈指针调用C函数时必须先设置堆栈 nc设置即将调用的函数nand_read_ll的参数:r0=目的地址(SDRAM的地址),r1=源地址(nand flash的地址),r2=复制的长度(以字节为单位)nd调用nand_read_ll进行复制 n
15、e进行一些检查工作:上电后nand flash最开始的4K代码被自动复制到一个称为“Steppingstone”的内部RAM中(地址为0 x00000000-0 x00001000);在执行nand_read_ll之后,这4K代码同样被复制到SDRAM中(地址为0 x33f00000-0 x33f01000)。比较这两处的4K代码,如果不同则表示出错 n9、跳到bootloader的阶段2运行就是调用init/main.c中的main函数:na重新设置堆栈 nb设置main函数的参数 nc调用main函数 Evaluation only.Created with Aspose.Slides f
16、or.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evalu
17、ation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.C
18、opyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.结束语结束语谢谢大家聆听!谢谢大家聆听!27