第一篇 Zynq开发基础 3
第1章 Zynq初体验 3
1.1 PL部分设计实现 3
1.1.1 创建工程 4
1.1.2 设计输入 6
1.1.3 设计综合 10
1.1.4 设计实现 12
1.1.5 下载执行 12
1.2 PS部分设计实现 13
1.2.1 建立Zynq硬件系统 13
1.2.2 在PS中设计Hello World程序 16
1.2.3 下载执行程序 18
第2章 Zynq集成开发环境 20
2.1 Zynq硬件平台 20
2.1.1 Zynq XC7Z020芯片硬件资源 20
2.1.2 ZedBoard硬件资源 21
2.2 Zynq软件平台 23
2.2.1 嵌入式硬件开发工具XPS 23
2.2.2 嵌入式软件开发工具SDK 27
第3章 Zynq启动流程及镜像制作 32
3.1 BootROM 32
3.2 Zynq器件的启动配置 37
3.3 使用BootGen 41
3.3.1 BootGen介绍 41
3.3.2 BIF文件语法 41
3.3.3 BootGen实例 43
第二篇 Zynq底层硬件设计 49
第4章 GPIO原理及设计实现 49
4.1 GPIO原理 49
4.2 Zynq XC7Z020 GPIO寄存器 50
4.2.1 DATA_RO寄存器 51
4.2.2 DATA寄存器 52
4.2.3 MASK_DATA_LSW/MSW寄存器 52
4.2.4 DIRM寄存器 53
4.2.5 OEN寄存器 54
4.2.6 GPIO slcr寄存器 55
4.3 GPIO设计实现 57
4.3.1 汇编语言实现 58
4.3.2 C语言实现 61
第5章 中断原理及实现 64
5.1 中断原理 64
5.1.1 中断类型 65
5.1.2 中断向量表 65
5.1.3 中断处理过程 66
5.2 Zynq中断体系结构 67
5.2.1 私有中断 68
5.2.2 软件中断 69
5.2.3 共享外设中断 69
5.2.4 中断寄存器 71
5.3 中断程序设计实现 71
5.3.1 中断向量表和解析程序 72
5.3.2 中断源配置 74
5.3.3 ICD寄存器初始化 78
5.3.4 ICC寄存器组初始化 82
5.3.5 ICD寄存器组配置 83
5.3.6 ARM程序状态寄存器(CPSR)配置 84
5.3.7 中断服务程序设计 85
5.4 设计验证 86
第6章 定时器原理及实现 88
6.1 Zynq定时器概述 88
6.2 私有定时器 88
6.2.1 私有定时器寄存器 89
6.2.2 私有定时器设计实现 91
6.3 私有看门狗定时器 93
6.3.1 私有看门狗定时器寄存器 93
6.3.2 私有看门狗定时器设计实现 95
6.4 全局定时器 97
6.4.1 全局定时器寄存器 97
6.4.2 全局定时器设计实现 98
第7章 通用异步收发器原理及实现 102
7.1 UART概述 102
7.2 UART寄存器 105
7.3 UART设计实现 111
7.3.1 UART引脚设置 111
7.3.2 UART初始化 114
7.3.3 UART字符接收和发送函数实现 115
7.3.4 UART主函数实现 116
7.3.5 UART具体实现步骤 117
第8章 OLED原理及实现 119
8.1 OLED概述 119
8.2 建立OLED硬件系统 120
8.3 生成自定义OLED IP模板 122
8.4 修改MY_OLED IP设计模板 124
8.5 OLED驱动程序设计实现 130
8.5.1 OLED初始化 132
8.5.2 写数据相关函数 133
8.5.3 写显存相关函数实现 136
8.6 设计验证 136
第9章 Zynq双核运行原理及实现 138
9.1 双核运行原理 138
9.2 硬件系统设计 140
9.3 软件设计 141
9.3.1 FSBL 141
9.3.2 CPUO应用程序设计 145
9.3.3 CPU1应用程序设计 148
9.4 设计验证 152
第三篇 嵌入式Linux设计 155
第10章 嵌入式Linux系统构建 155
10.1 Ubuntu 13.1 0设置 155
10.1.1 root登录 155
10.1.2 安装FTP服务器和SSH服务器 156
10.2 PuTTY和FileZilla工具使用 158
10.2.1 PuTTY工具使用 158
10.2.2 FileZilla工具使用 161
10.3 交叉编译器安装 162
10.3.1 Xilinx ARM交叉编译器下载 162
10.3.2 Xilinx ARM交叉编译器安装 162
10.4 嵌入式Qt环境构建 165
10.4.1 主机环境Qt构建 165
10.4.2 目标机Qt环境构建 169
第11章 嵌入式Linux系统实现 178
11 1 硬件平台构建 178
11.1.1 自定义GPIO IP核设计 180
11.1.2 添加my_led IP核端口 182
11.2 my_led IP核逻辑设计 186
11.2.1 设置引脚方向信息 187
11.2.2 my_led IP核端口和连接设计 188
11.2.3 my_led IP核用户逻辑设计 190
11.2.4 my_led IP核引脚约束设计 191
11.2.5 my_led IP核硬件比特流生成 195
11 3 启动文件BOOT.BIN设计 196
11.3.1 第一阶段启动代码设计 196
11.3.2 u-boot编译 201
11.3.3 生成BOOT.BIN文件 202
11.4 L-inux内核编译 204
11.4.1 内核简介 204
11.4.2 Xilinx Linux内核的获取 205
11.4.3 Xinx Linux内核编译 205
11.5 系统测试 211
11.6 添加my_led设备 212
11.6.1 my_led驱动程序设计 212
11.6.2 应用程序调用驱动程序测试 219
第12章 u-boot原理及移植 219
12.1 u-boot版本及源码结构 221
12.1.1 u-boot版本 221
12.1.2 u-boot源码结构 221
12.2 u-boot配置和编译分析 222
12.2.1 u-boot配置分析 223
12.2.2 顶层Makefile分析 227
12.3 u-boot运行过程分析 237
12.3.1 start.S文件分析 239
12.3.2 lowlevel_init.S分析 248
12.3.3 board_init_f分析 252
12.3.4 boardn_init_r分析 257
12.3.5 main_loop分析 259
12.4 u-boot移植 260
12.4.1 删除无关文件 260
12.4.2 修改因删除无关源码造成的错误 261
12.4.3 添加修改ZedBoard移植代码 262
12.4.4 u-boot测试 265
第13章 Linux内核原理及移植 267
13.1 Linux内核版本及源码结构 267
13.1.1 Linux内核版本 267
13.1.2 Linux内核源码结构 268
13.2 Linux内核系统配置 269
13.2.1 Makefile分析 269
13.2.2 Makefile中的变量 270
13.2.3 子目录Makefile 271
13.2.4 内核配置文件 272
13.3 Linux内核启动分析 274
13.3.1 内核启动入口 275
13.3.2 zlmage自解压 278
13.3.3 第一阶段启动代码分析 285
13.3.4 第二阶段启动代码分析 289
13.4 Linux内核移植 295
13.4.1 添加配置文件 295
13.4.2 添加和修改ZedBoard相关文件 296
13.4.3 添加驱动文件和头文件 297
13.4.4 Linux内核测试 297
第14章 网络视频设计及实现 299
14.1 总体设计 299
14.2 V4L2关键技术 300
14.2.1 V4L2基本原理 300
14.2.2 相关数据结构和函数 301
14.2.3 V4L2T作流程 308
14.3 TCP及Qt下的网络编程 309
14.3.1 服务器端程序设计 310
14.3.2 客户端程序设计 321
14.4 设计验证 325
14.4.1 主机设计验证 325
14.4.2 目标机设计验证 326