zynqgo语言 zynq编程语言
zynq怎么把文件系统烧写到sd中
长话短说开始搞SD卡烧写UBOOT,从SD启动UBOOT。从s5pv210_irom_applicationnote_preliminary_20091126.pdf知道,s5pv210启动分BL0、BL1、BL2阶段。BL0是s5pv210内部IROM固化的代码,这段代码根据OM引脚配置状态来选择从哪个外部存储设备加载BL1段代码(实际上BL1代码就是我们编写的UBOOT的前8K代码,这段代码要包含完整的将后半部UBOOT代码复制和清bss段的功能,当然我们要从SD卡启动烧写在上面的UBOOT,OM引脚就必须配置为从SD卡启动配置)。图1从上图可知,从sd启动的时候BL0加载的代码是从第512个字节处开始加载代码,为什么要这样做呢?由于以后功能扩展的需要三星的软件工程师写的固化到IROM中的BL0代码是从SD卡的512字节处加载BL1的,他就是这样写的,我们对应UBOOT放置在SD卡中的位置就要往后移动512字节,后面有介绍怎么指定把uboot写到sd卡指定的位置的命令。还有一定要注意如下所示的地方:图2在BL1之前要加16个字节的头部信息。也就是在真正的UBOOT第一条指令之前要加16个字节的头部信息,于是就有我们所看到的uboot代码如下的用宏定义的一段:[cpp]viewplaincopy#ifdefined(CONFIG_EVT1)!defined(CONFIG_FUSED).word0x2000.word0x0.word0x0.word0x0#endif.globl_start_start:bresetldrpc,_undefined_instructionldrpc,_software_interruptldrpc,_prefetch_abort其中的.word0x2000代表BL1size(8K长度),.word0x0为保留字节.word0x0为checksum(后续会通过一个mkbl1工具来计算bl1的checksum并填写这个位置),最后一个.word0x0也为保留字节。再来看看uboot的下面的部分,如果bl0正常读取了bl1,代码就会到如下段:[cpp]viewplaincopy/*Readbootinginformation*/ldrr0,=PRO_ID_BASEldrr1,[r0,#OMR_OFFSET]//读OM引脚的配置状态bicr2,r1,#0xffffffc1#ifdefCONFIG_VOGUES/*PS_HOLD(GPH0_0)settooutputhigh*/ldrr0,=ELFIN_GPIO_BASEldrr1,=0x00000001strr1,[r0,#GPH0CON_OFFSET]ldrr1,=0x5500strr1,[r0,#GPH0PUD_OFFSET]ldrr1,=0x01strr1,[r0,#GPH0DAT_OFFSET]#endif/*NANDBOOT*/cmpr2,#0x0@512B4-cyclemoveqr3,#BOOT_NAND//根据OM引脚配置状态来给R3寄存器赋予代表系统是从何冲外部存储器启动的配置值。cmpr2,#0x2@2KB5-cyclemoveqr3,#BOOT_NANDcmpr2,#0x4@4KB5-cycle8-bitECCmoveqr3,#BOOT_NANDcmpr2,#0x6@4KB5-cycle16-bitECCmoveqr3,#BOOT_NANDcmpr2,#0x8@OneNANDMuxmoveqr3,#BOOT_ONENAND/*SD/MMCBOOT*/cmpr2,#0xcldrsp,_TEXT_PHY_BASE/*setuptempstackpointer*/subsp,sp,#12movfp,#0/*nopreviousframe,sofp=0*//*whenwealreadyruninram,wedon'tneedtorelocateU-Boot.*andactually,memorycontrollermustbeconfiguredbeforeU-Boot*isrunninginram.*/ldrr0,=0xff000fffbicr1,pc,r0/*r0moveqr3,#BOOT_MMCSD/*NORBOOT*/cmpr2,#0x14moveqr3,#BOOT_NOR#if0/*AndroidC110BSPusesOneNANDbooting!*//*Forseconddevicebooting*//*OneNANDBOOTONGfailed*/cmpr2,#0x8moveqr3,#BOOT_SEC_DEV#endif/*UartBOOTONGfailed*/cmpr2,#(0x1//ldrsp,=0xd0036000/*endofsramdedicatedtou-boot*/ldrsp,=0xd0035400//BL1段的函数进行操作的堆栈位置,这里我修改了堆栈到了0xd0035400是由于图2中所示BL0代码进行了它自己代码堆栈的初始化,而RW/ZIregionHeap的最低部就位于0xd0035400,为了不修改BL0堆栈和BL0代码已经写好的一些函数功能(会在下面用到),我将堆栈修改到了0xd0035400subsp,sp,#12/*setstack*/movfp,#0bllowlevel_init/*gosetuppll,mux,memory*///这里会进行始终,内存,串口初始化之后运行到ldrsp,_TEXT_PHY_BASE/*setuptempstackpointer*///由于上面一步已经初始化了DRAM,所以在这里将以后的堆栈设置到了DRAM中的位置(以后BL2代码中函数都是基于此堆栈)subsp,sp,#12movfp,#0/*nopreviousframe,sofp=0*//*whenwealreadyruninram,wedon'tneedtorelocateU-Boot.*andactually,memorycontrollermustbeconfiguredbeforeU-Boot*isrunninginram.*/ldrr0,=0xff000fffbicr1,pc,r0/*r0ldrr0,=INF_REG_BASEldrr1,[r0,#INF_REG3_OFFSET]cmpr1,#BOOT_NAND/*0x0=bootdeviceisnand*/beqnand_bootcmpr1,#BOOT_ONENAND/*0x1=bootdeviceisonenand*/beqonenand_bootcmpr1,#BOOT_MMCSDbeqmmcsd_bootcmpr1,#BOOT_NORbeqnor_bootcmpr1,#BOOT_SEC_DEVbeqmmcsd_boot//代码判断要拷贝后,读取之前存入到用户使用寄存器中的值来判断此次启动从何种外部存储设备启动,这里为sd卡启动~~~~~省略若干代码~~~~~~~~mmcsd_boot:#ifDELETEldrsp,_TEXT_PHY_BASEsubsp,sp,#12movfp,#0#endifblmovi_bl2_copy//最后BL1代码来到此处从sd卡拷贝剩余的代码bafter_copy
为南充等地区用户提供了全套网页设计制作服务,及南充网站建设行业解决方案。主营业务为成都网站建设、成都做网站、南充网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
如何学习zynq以太网控制器及协议栈
第 9 章 ZedBoard 入门
前面大家已经对 ZYNQ 架构以及相应的开发工具有一定的认识,接下来我们将带领大家来一起 体验 ZYNQ,体验软硬件协同设计的魅力。由于时间的关系,下面的一些实验(本章及后续章节的实验) 可能有不完善的地方,欢迎读者向我们反馈。 9.1 跑马灯 本实验将指导大家使用 Vivado 集成设计环境创建本书的第一个 Zynq 设计。这里,我们使用跑马灯 这个入门实验来向大家介绍 Vivado IDE 的 IP Integrator 环境,并在 Zedboard 上实现这个简单的 Zynq 嵌 入式系统。之后,我们将会使用 SDK 创建一个简单的软件应用程序,并下载到 Zynq 的 ARM 处理器中, 对在 PL 端实现的硬件进行控制。本实验分为三个小节来向大家进行介绍: ? 第一节我们将使用 Vivado IDE 创建一个工程。 ? 在第一节的基础上,第二节我们将继续构建一个 Zynq 嵌入式处理系统,并将完成后的硬件导入 到 SDK 中进行软件设计。 ? 最后一节我们将使用 SDK 编写 ARM 测试应用程序, 并下载到 ZedBoard 上进行调试。 实验环境:Windows 7 x64 操作系统, Vivado2013.4,SDK 2013.4
9.1.1 Vivado 工程创建
1) 双击桌面 Vivado 快捷方式 ,或者浏览 Start All Programes Xilinx Design Tools Vivado
2013.4 Vivado 2013.4 来启动 Vivado. 2) 当 Vivado 启动后,可以看到图 9-1 的 Getting Started 页面。
图 9- 1 Vivado 开始界面
3) 选择 Create New Project 选项,图 9-2 所示的 New Project 向导将会打开,点击 Next。
图 9- 2 New Project 对话框 4) 在 Project Name 对话框中,输入 first_zynq_design 作为 Project name, 选择 C:/XUP/Zed 作为 Project location,确保 Create project subdirectory 被勾选上,如图 9-3,点击 Next。
图 9- 3 Project Name 对话框 5) 在 Project Type 对话框中,选择 RTL Project,确保 Do not specify sources at this time 选项没有 被勾选,如图 9-4,点击 Next。
图 9- 4 Project Type 对话框 6) 在 Add Source 对话框中, 选择 Verilog 作为目标语言,如果你对 VHDL 熟悉的话, 你也可以 选择 VHDL,如果这里你忘记了选择,在工程创建完成后,也可以在工程设置中选择你熟悉的 HDL 语言。如果你已经有了源文件,在这里就可以选择 Add file 或者 Add directory 进行添加, 由于我们没有任何的源文件, 所以这里我们直接点击 Next 即可,如图 9-5。
图 9- 5 添加源文件 7) 在 Add Existing IP 对话框中,点击 Next。 8) 在 Add Constraints 对话框中,点击 Next。 9) 在 Default Part 对话框中,在 Specify 框中选择 Boards 选项,在下面的 Board 列表中选择 ZedBoard Zynq Evaluation and Development Kit,点击 Next,如图 9-6。
图 9- 6 芯片选择 10) 在 New Project Summary 对话框中,点解 Finish 完成工程创建,至此,我们已经使用 Vivado 创建了一个 Zynq 设计的工程框架,图 9-7 为 Vivado 的工程界面,在第四章我们已经对该界面 进行过介绍,如果还不熟悉的读者再回到前面复习一下。下面我将使用 Flow Navigator 的 IP Integrator 功能完成第二节的嵌入式系统设计。
图 9- 7 Vivado 工程界面
9.1.2 在 Vivado 中创建 Zynq 嵌入式系统 这一节我们将创建一个简单的 Zynq 嵌入式系统,该系统使用 Zynq PL 部分实现一个通用 I/O 控制 器 (GPIO),控制器同 ZedBoard 上的 8 个 LED 相连接,并且通过 AXI 总线连接到 PS 端,这样我们就可 以通过将要在第三小节中实现的 ARM 应用程序来对 LED 进行控制。系统结构图如图 9-8 所示。
Xilinx Zynq Z-7020这款FPGA是完全使用C语言开发的吗
硬件的最底层都是机器码,汇编指令,但是开发者可以使用任何语言开发,最后都会被编译器转换成机器码。你这个硬件的一般都是用c开发的。
分享名称:zynqgo语言 zynq编程语言
文章位置:http://myzitong.com/article/ddeidid.html