最新嵌入式系统设计VIVIPPT课件

上传人:枫** 文档编号:570163550 上传时间:2024-08-02 格式:PPT 页数:27 大小:1.28MB
返回 下载 相关 举报
最新嵌入式系统设计VIVIPPT课件_第1页
第1页 / 共27页
最新嵌入式系统设计VIVIPPT课件_第2页
第2页 / 共27页
最新嵌入式系统设计VIVIPPT课件_第3页
第3页 / 共27页
最新嵌入式系统设计VIVIPPT课件_第4页
第4页 / 共27页
最新嵌入式系统设计VIVIPPT课件_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《最新嵌入式系统设计VIVIPPT课件》由会员分享,可在线阅读,更多相关《最新嵌入式系统设计VIVIPPT课件(27页珍藏版)》请在金锄头文库上搜索。

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.Slid

2、es 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:

3、n4 ldr 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代码如下

4、: n1 #define GPBCON (*(volatile unsigned long *)0x56000010) n2 #define GPBDAT (*(volatile unsigned long *)0x56000014) n3 int main() n4 n5 GPBCON = 0x00004000; /设置GPB7为输出口 n6 GPBDAT = 0x00000000; /令GPB7输出0 n7 return 0; n8 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.

5、Copyright 2004-2011 Aspose 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 0x0000000 -g crt0.o led_on_c.o -o led_on_c_tmp.o n5 arm-linux-objcopy -O binary

6、-S led_on_c_tmp.o led_on_c n6 clean: 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 Pr

7、ofile 5.2.0.0.Copyright 2004-2011 Aspose Pty 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: Ex

8、it nSelect the function to test : niii.当出现如下提示时,输入0并回车: 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-l

9、d -Ttext 0x00000000 crt0.o led_on_c.o -o led_on_c_tmp.o 意思:-o选项设置输出文件的名字为led_on_c_tmp.o;“-Ttext 0x00000000”设置代码段的起始地址为0x00000000;这条指令的作用就是将crt0.o和led_on_c.o连接成led_on_c_mp.o可执行文件,此可执行文件的代码段起始地址为0x00000000。n大多机器上电时是从地址0开始运行的,但是从地址0运行程序在性能方面总有很多限制,所以一般在开始的时候,使用与位置无关的指令将程序本身复制到它的连接地址处,然后使用向pc寄存器赋值的方法跳到连

10、接地址开始的内存上去执行剩下的代码。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 命令的理解narm-linux-ld命令中选项“-Ttext”也可以使用选项“-Tfilexxx”来代替,在文件filexxx中,我们可以写出更复杂的参数来使用arm-linux-ld命令n源代码为head.s、init.c和main.c。head.s调用中的函数来关WATCH DOG、初始化SDRAM、初始

11、化NAND Flash,然后将main.c中的代码从NAND Flash地址4096开始处复制到SDRAM中,最后,跳到main.c中的main函数继续执行。代码本身没什么难度,与前面程序最大的差别就是“连接脚本”的引入:在arm-linux-ld命令中,选项“-Ttext”可以使用选项“-Tfilexxx”来代替。在本实验中,使用“-Tnand.lds”。nand.lds内容如下: n1 SECTIONS n2 firtst 0x00000000 : head.o init.o n3 second 0x30000000 : AT(4096) main.o n4 n如果想进一步了解连接脚本如何

12、编写,请参考Using ld The GNU linkerEvaluation only.Created with Aspose.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=100MH

13、z,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。请参考实验十一:CLOCK 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设置GPI

14、O,选择UART0使用的引脚 nb初始化UART0,设置工作方式(不使用FIFO)、波特率115200 8N1、无流控等,Evaluation 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=目的地址(SDR

15、AM的地址),r1=源地址(nand flash的地址),r2=复制的长度(以字节为单位) nd调用nand_read_ll进行复制 ne进行一些检查工作:上电后nand flash最开始的4K代码被自动复制到一个称为“Steppingstone”的内部RAM中(地址为0x00000000-0x00001000);在执行nand_read_ll之后,这4K代码同样被复制到SDRAM中(地址为0x33f00000-0x33f01000)。比较这两处的4K代码,如果不同则表示出错 n9、跳到bootloader的阶段2运行就是调用init/main.c中的main函数: na重新设置堆栈 nb设置

16、main函数的参数 nc调用main函数 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

17、 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.Evaluatio

18、n 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.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.结束语结束语谢谢大家聆听!谢谢大家聆听!27

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号