DSP原理與系統設計
DSP原理與系統設計
《Blackfin系列DSP原理與系統設計(第2版)》2010年電子工業出版社出版的圖書,作者陳峰。
主要介紹了採用Blackfin系列DSP開發時所需掌握的知識與技巧,具體內容包括:Blackfin系列晶元的性能、內部結構、外設介面、硬體開發、指令集、開發環境、軟體編程與應用實例。
Blackfin系列DSP是ADI開發的高性能定點DSP產品,共分為五大系列數十種型號,分別面向不同種類的應用環境。Blackfin 系列DSP的片上系統集成了大部分常見的工業匯流排與外設介面。Blackfin系列DSP具有強大的處理能力,豐富的外設介面與極低的功耗,使其更易滿足各類不同需求。
第1章 數字信號處理和DSP 1
1.1 數字信號處理的發展 1
1.2 DSP在數字信號處理中的應用 2
1.3 DSP晶元的結構特點 3
1.4 Blackfin系列DSP 5
1.4.1 Blackfin系列DSP的結構特點 5
1.4.2 ADSP-BF51x系列晶元 7
1.4.3 ADSP-BF52x系列晶元 8
1.4.4 ADSP-BF53x系列晶元 9
1.4.5 ADSP-BF54x系列晶元 10
1.4.6 ADSP-BF561雙核晶元 12
第2章 Blackfin系列DSP的內部結構 13
2.1 內核結構 13
2.1.1 寄存器組 14
2.1.2 算術邏輯單元(ALU) 15
2.1.3 乘法累加器(MAC) 16
2.1.4 桶形移位器 18
2.2 存儲器 19
2.2.1 存儲器空間分配 19
2.2.2 內部存儲器的詳細介紹 21
2.3 系統概述 33
2.3.1 內部匯流排 33
2.3.2 內部時鐘 35
2.3.3 處理器核心概述 35
2.3.4 介面 36
2.3.5 系統匯流排概述 40
2.4 程序控制器 44
2.4.1 概述 44
2.4.2 相關的寄存器 44
2.4.3 指令流水線 46
2.4.4 程序流的控制 47
2.5 中斷 48
2.5.1 概述 48
2.5.2 系統中斷過程 49
2.5.3 SIC的寄存器 51
2.5.4 CEC的寄存器 54
2.5.5 中斷的全局禁止和使能 55
2.5.6 事件向量表 56
2.5.7 中斷服務 60
2.5.8 中斷的嵌套 61
2.5.9 異常處理 63
2.6 DMA 64
2.6.1 DMA控制器 65
2.6.2 DMA流程 66
2.6.3 DMA寄存器 69
2.6.4 二維DMA 71
2.6.5 DMA性能優化 72
2.6.6 DMA軟體管理 74
2.6.7 DMA異常中斷條件 74
第3章 Blackfin系列DSP外部設備 76
3.1 外部匯流排 76
3.1.1 匯流排概述 78
3.1.2 EBIU仲裁 78
3.1.3 出錯檢測 78
3.1.4 非同步存儲器介面 79
3.1.5 SDRAM控制器(SDC) 80
3.1.6 DDR SDRAM控制器 81
3.2 I/O介面 83
3.2.1 GPIO介面 83
3.2.2 鍵盤介面 86
3.3 Host DMA介面單元 89
3.3.1 Host DMA介面 89
3.3.2 HOSTDP的工作模式 89
3.3.3 HOSTDP的寄存器 92
3.4 增強型并行外設介面(EPPI) 95
3.4.1 EPPI的結構 95
3.4.2 ITU-656介紹 96
3.4.3 EPPI工作模式 98
3.4.4 EPPI的特性 102
3.4.5 EPPI寄存器 102
3.5 乙太網MAC(EMAC) 103
3.5.1 EMAC的介面 103
3.5.2 EMAC的配置 106
3.5.3 基本EMAC代碼示例 108
3.5.4 EMAC的工業特性 112
3.5.5 EMAC寄存器 112
3.6 存儲器介面 113
3.6.1 ATAPI 113
3.6.2 NAND Flash 119
3.6.3 SDH介面 121
3.7 定時器 124
3.7.1 概述 124
3.7.2 通用定時器 125
3.7.3 內核定時器 126
3.7.4 “看門狗”定時器 127
3.8 串列介面 127
3.8.1 SPI 127
3.8.2 SPORT介面 133
3.8.3 UART介面 138
3.8.4 TWI 140
3.8.5 USBD模塊 144
3.9 其他介面簡介 151
3.9.1 基於LockBox技術的安全防護 151
3.9.2 像素合成器(PIXC) 152
3.9.3 CAN模塊 153
第4章 Blackfin系列DSP硬體開發 156
4.1 引導(BOOT)程序 156
4.1.1 引導模式設定 156
4.1.2 引導過程 157
4.2 PLL與時鐘 157
4.2.1 時鐘系統概述 158
4.2.2 PLL與時鐘控制 158
4.2.3 PLL時鐘的倍頻因子和分頻比 159
4.2.4 PLL的MMR 161
4.3 動態電源管理 163
4.3.1 動態電源管理控制器(DPMC) 163
4.3.2 運行方式 163
4.3.3 運行方式的切換 165
4.3.4 外設的定時 167
4.3.5 動態電源電壓控制 167
4.4 處理器內核模式設定 169
4.4.1 概述 169
4.4.2 用戶模式 170
4.4.3 監控模式 171
4.4.4 模擬模式 172
4.4.5 空閑狀態 173
4.4.6 複位狀態 173
4.4.7 系統複位和上電設置 174
4.5 硬體設計 176
4.5.1 引腳處理 176
4.5.2 設計復用時鐘引腳 178
4.5.3 中斷配置和服務 179
4.5.4 信號量 179
4.5.5 PCI仲裁 180
4.5.6 USB設備連接 180
4.5.7 外部存儲器設計 181
4.5.8 高頻設計 184
第5章 Blackfin系列DSP指令集 186
5.1 數據定址方式 186
5.2 Blackfin系列DSP指令系統特點 187
5.2.1 Blackfin系列DSP內核結構與指令 187
5.2.2 Blackfin系列DSP指令說明 188
5.3 程序流程式控制制指令 192
5.3.1 跳轉指令/條件跳轉指令 192
5.3.2 調用和返回指令 193
5.3.3 循環指令 193
5.4 載入和存儲指令 194
5.4.1 載入指令 194
5.4.2 存儲指令 195
5.5 數據轉移指令 196
5.5.1 寄存器數據轉移指令 196
5.5.2 擴展半個字到一個字的數據轉移指令 197
5.6 棧控制指令 197
5.6.1 進棧指令 197
5.6.2 出棧指令 198
5.6.3 連接和撤銷連接指令 198
5.7 邏輯運算指令 199
5.7.1 與、或、非、異或 199
5.7.2 位方式異或指令 200
5.8 移位和循環指令 202
5.8.1 算術移位指令 202
5.8.2 邏輯移位指令 203
5.8.3 加后移位指令 204
5.8.4 移位后加指令 204
5.8.5 循環移位指令 205
5.9 算術運算指令 206
5.9.1 加、減、乘、除 206
5.9.2 最大值指令和最小值指令 210
5.9.3 絕對值指令和取補指令 210
5.9.4 舍入指令 211
5.9.5 飽和指令 211
5.9.6 符號位指令 211
5.10 位操作指令 212
5.10.1 位清除指令 212
5.10.2 位置位指令 212
5.10.3 位取反指令 212
5.10.4 位測試指令 213
5.10.5 位域存放指令 213
5.10.6 位域提取指令 214
5.10.7 位復用指令 216
5.10.8 ONES指令 216
5.11 CC位操作指令 217
5.11.1 比較數據寄存器、指針、累加器指令 217
5.11.2 取補CC位指令 217
5.11.3 傳輸CC位指令 218
5.12 外部事件操作指令 218
5.12.1 空閑指令 218
5.12.2 內核同步指令 218
5.12.3 強制模擬指令 219
5.12.4 中斷指令 219
5.12.5 空指令 220
5.13 Cache控制指令 220
5.13.1 數據Cache預取指令 220
5.13.2 數據Cache刷新指令 220
5.13.3 指令Cache無效指令 221
5.14 視頻像素操作指令 221
5.14.1 校正指令 221
5.14.2 雙16位操作 222
5.14.3 4個位元組數操作 223
5.15 向量操作指令 227
5.15.1 加、減、乘 227
5.15.2 向量最大值指令和向量最小值指令 230
5.15.3 向量移位指令 231
5.15.4 其他指令 232
5.16 并行指令 236
第6章 VisualDSP++ 240
6.1 VisualDSP++ 總體介紹 240
6.1.1 VisualDSP++簡單介紹 240
6.1.2 開發環境 243
6.2 JTAG模擬器 258
6.2.1 JTAG連接 258
6.2.2 ICE配置與測試 258
6.3 C/C++編譯器 259
6.3.1 數據類型 259
6.3.2 運行時環境與運行時庫 260
6.3.3 從命令行運行編譯器 260
6.3.4 在VisualDSP++中配置編譯器 262
6.3.5 優化控制 262
6.4 彙編器 264
6.4.1 彙編器命令 264
6.4.2 彙編程序結構和語法 265
6.4.3 預處理器 267
6.5 鏈接器 267
6.5.1 鏈接過程概述 267
6.5.2 鏈接文件 268
6.5.3 鏈接器參數選擇 269
6.5.4 專家鏈接器(EL) 271
6.6 載入器 276
6.6.1 從命令行運行載入器 276
6.6.2 在VisualDSP++中配置載入器 279
6.7 操作系統內核(VDK) 280
6.7.1 內核的作用 280
6.7.2 調度 280
6.8 VDK的組成 281
6.8.1 線程 281
6.8.2 調度程序 282
6.8.3 中斷服務程序 284
第7章 軟體編程 286
7.1 彙編編譯器 286
7.1.1 彙編概要 286
7.1.2 支持C語言結構的彙編器 286
7.1.3 彙編語法 287
7.2 C/C++編譯器 295
7.2.1 C/C++編譯器簡介 295
7.2.2 數據類型存儲長度 295
7.2.3 C/C++編譯語言擴展 296
7.3 預處理指令 301
7.3.1 引用頭文件 301
7.3.2 宏的編寫 302
7.3.3 條件彙編和編譯 302
7.4 C代碼優化 307
7.4.1 循環優化 307
7.4.2 內聯函數優化 310
7.4.3 使用彙編語言優化 312
7.5 C與彙編混合編程 313
7.5.1 C/C++和彙編介面命名規則 313
7.5.2 C運行時環境下寄存器的使用 314
7.5.3 參數傳遞和局部堆棧存儲分配——LINK和UNLINK指令 314
7.5.4 在C/C++程序中調用彙編子程序 315
7.5.5 在彙編程序中調用C/C++函數 316
7.6 VisualDSP++ 5.0 C/C++運行時庫函數介紹 317
7.7 VisualDSP++ 5.0 DSP庫函數介紹 319
7.8 VisualDSP++5.0設備驅動庫函數簡單介紹 321
第8章 應用實例 323
8.1 應用系統設計舉例 323
8.1.1 單片DSP系統 323
8.1.2 多片DSP系統 325
8.2 MPEG-4編碼系統 326
8.2.1 MPEG-4視頻壓縮方法簡介 326
8.2.2 DCT和IDCT 327
8.2.3 量化 327
8.2.4 運動估計 327
8.2.5 熵編碼 328
8.3 代碼示例 328
8.3.1 PADDING演演算法代碼的編寫和優化 328
8.3.2 DCT演演算法代碼的編寫和優化 334
8.3.3 運動矢量預測 335
8.3.4 SAD最小搜索 341
8.4 基於Blackfin ADSP-BF561晶元的CCD攝像頭圖像處理 342
8.4.1 系統簡介 342
8.4.2 系統功能與指標 342
8.4.3 系統概述 343
8.4.4 系統硬體設計 344
8.4.5 系統軟體設計 344
8.5 基於Blackfin ADSP-BF561晶元的智能視頻監控系統 347
8.5.1 系統簡介 347
8.5.2 系統功能與指標 348
8.5.3 系統概述 348
8.5.4 系統硬體設計 349
8.5.5 系統軟體設計 350
……