《DSP開發寶典》是2012年3月電子工業出版社出版的圖書,作者是鄭阿奇。
基本介紹
- 書名:DSP開發寶典
- 作者:鄭阿奇
- ISBN:9787121150685
- 頁數:832頁
- 定價:119元
- 出版社:電子工業出版社
- 出版時間:2012年3月
- 開本:16開
內容簡介,圖書目錄,
內容簡介
本書以美國TI公司TMS320C6000系列DSP為平台,介紹CPU硬體結構、指令系統(包括偽指令)、C/C++程式開發基礎、C/C++程式開發、線性彙編代碼最佳化、彙編語言工循達具、軟體集成開發、程式調試與實例分析、外部存儲器接口、中斷系統、直接存儲器訪問(DMA)、增強型直接存儲器訪問(EDMA)、多通道緩衝串口(McBSP)、主機並行接口(HPI)、擴展匯流排、外圍設備互聯(PCI)連線埠、定時器、通用輸入/輸出(I/O)等,是目前國內比較系統地介紹TMS320C6000系列DSP的學習、開發套用指南。
圖書目錄
目 錄
第1章 TMS320C6000系列DSP概述 1
1.1 DSP產生、特點及其套用 1
1.1.1 DSP的產生 1
1.1.2 DSP的特點 2
1.1.3 DSP的套用 3
1.2 TMS320C6000系列DSP主要特點及其套用 4
第2章 TMS320C6000系列CPU、指令系統、偽指令 6
2.1 TMS320C6000系列CPU的結構 6
2.2 TMS320C6000系列CPU的數據通路和控制 8
2.2.1 通用暫存器組 10
2.2.2 數據通路的功能單元 12
2.2.3 暫存器組交叉通路 13
2.2.4 存儲器存取通路 14
2.2.5 數據地址通路 14
2.2.6 TMS320C6000控制暫存器組 14
2.2.7 TMS320C67x控制暫存器擴展 18
2.2.8 TMS320C64x控制暫存器擴展 22
2.3 TMS320C6000系列DSP的存儲器 24
2.3.1 程式存儲器店灶訂墓 24
2.3.2 內部數據存儲器 30
2.3.3 二級內部存儲器 33
2.4 TMS320C6000系列DSP指令系統 38
2.4.1 TMS320C6000系列DSP指令集 39
2.4.2 流水線 51
2.4.3 彙編偽指令 64
第3章 程式開發基礎 81
3.1 軟體開發工具概述 81
3.2 C/C++編譯器概述 83
3.2.1 ISO標準 83
3.2.2 輸出檔案 83
3.2.3 編譯器接口 84
3.2.4 編譯器操作 84
3.2.5 編譯器工具 84
3.3 使用C/C++編譯器 85
3.3.1 編譯器 85
3.3.2 調用C/C++編譯器 85
3.3.3 設定選捉催乘項改變編膠酷踏她譯器的行為 87
3.3.4 常用選項 91
3.3.5 指定乃斷估檔案名稱 93
3.3.6 設定目錄 93
3.3.7 設定默認的編譯選項 94
3.4 最佳化代碼 95
3.4.1 執行最佳化 95
3.4.2 最佳化軟體流水 97
3.4.3 冗餘循環講永辣 100
3.4.4 調試和剖析最佳化代碼 101
3.4.5 基於價值的暫存器分配 101
3.4.6 別名消除 102
3.4.7 最佳化跳轉和簡化控制流 102
3.4.8 數據流最佳化 102
3.4.9 簡化表達式 102
3.4.10 內聯函式擴展 103
3.4.11 暫存器跟蹤與分配 104
3.5 使用彙編最佳化器 105
3.5.1 增強性能的代碼開發流程 105
3.5.2 線性彙編知識 106
第4章 C/C++程式開發 112
4.1 TMS320C6000系列C/C++語言實現 112
4.1.1 TMS320C6000系列C語言特點 112
4.1.2 TMS320C6000系列C++語言特點 114
4.1.3 TMS320C6000系列C/C++語言關鍵字 114
4.1.4 pragma偽指令 119
4.1.5 初始化靜態變數和全局變數 125
4.2 運行時環境 126
4.2.1 存儲淚漿堡器模型 126
4.2.2 對象的表示 129
4.2.3 中斷處理 134
4.2.4 系統初始化 135
4.3 運行時支持函式 139
4.3.1 編譯器包括的庫 139
4.3.2 C語言的I/O函式 140
4.3.3 運行時支持庫函式和宏的描述 148
4.4 TMS320C6000系列C/C++代碼最佳化 151
4.4.1 C/C++語言代碼的編寫 151
4.4.2 編譯C/C++代碼 152
4.4.3 最佳化C代碼 153
4.5 C/C++語言和彙編的混合編程 157
4.5.1 在C/C++代碼中調用彙編語言模組 157
4.5.2 用內嵌函式訪問彙編語言 158
4.5.3 在C/C++語言中嵌入彙編語言 159
4.5.4 在C/C++語言中訪問彙編語言變數 159
第5章 線性彙編最佳化代碼 165
5.1 彙編最佳化器選項與偽指令 165
5.2 編寫並行代碼 169
5.2.1 點積的C代碼 169
5.2.2 C代碼轉換為線性彙編 170
5.2.3 畫相關性圖 171
5.2.4 非並行彙編代碼與並行彙編代碼 172
5.2.5 使用字訪問短型數據與使用雙字訪問 176
5.3 軟體流水 183
5.3.1 模疊代間隔編排表 185
5.3.2 使用彙編最佳化器產生最佳化循環 189
5.3.3 最終彙編 190
5.4 多周期循環的模疊代 204
5.4.1 轉換C代碼為線性彙編 204
5.4.2 確定最小疊代間隔 204
5.4.3 畫相關性圖 206
5.4.4 線性彙編資源分配 207
5.4.5 模疊代間隔編排 207
5.4.6 使用彙編最佳化器產生加權矢量和 214
5.4.7 最終彙編 215
5.5 循環傳遞路徑 216
5.5.1 將C代碼的核心循環轉換為線性彙編 217
5.5.2 畫相關性圖 217
5.5.3 確定最小疊代間隔 218
5.5.4 線性彙編資源分配 220
5.5.5 模疊代間隔安排 220
5.5.6 使用彙編最佳化器處理IIR濾波器 221
5.5.7 最終彙編 222
5.6 循環中的if-then-else語句 222
5.6.1 if-then-else的C代碼 223
5.6.2 轉換C代碼為線性彙編 223
5.6.3 畫相關性圖 224
5.6.4 確定最小疊代間隔 224
5.6.5 線性彙編資源分配 225
5.6.6 最終彙編 226
5.6.7 性能比較 226
5.7 循環展開 227
5.7.1 展開if-then-else的C代碼 228
5.7.2 C代碼轉換為線性彙編 228
5.7.3 畫相關性圖 229
5.7.4 確定最小疊代間隔 230
5.7.5 線性彙編資源安排 230
5.7.6 最終彙編 231
5.8 生命太長問題 232
5.8.1 具有生命太長問題的C代碼 232
5.8.2 C代碼轉換為線性彙編 233
5.8.3 畫相關性圖 234
5.8.4 確定最小疊代間隔 234
5.8.5 線性彙編資源安排 235
5.8.6 帶MV指令的最後彙編 236
5.9 消除冗餘取數 238
5.9.1 轉換C代碼為線性彙編 239
5.9.2 畫相關性圖 240
5.9.3 確定最小疊代間隔 241
5.9.4 線性彙編資源分配 241
5.9.5 最終彙編 242
5.10 存儲體 244
5.10.1 FIR濾波器的核心循環 245
5.10.2 展開的FIR濾波器的C代碼 246
5.10.3 將C代碼轉換為線性彙編 247
5.10.4 畫相關性圖 248
5.10.5 含有.mptr命令的展開後FIR線性彙編 249
5.10.6 線性彙編資源分配 250
5.10.7 確定最小疊代間隔 250
5.10.8 最終彙編 251
5.11 軟體流水外循環 253
5.11.1 展開FIR濾波器的C代碼 253
5.11.2 最終彙編 254
5.12 同內循環一起條件地執行外循環 257
5.12.1 展開FIR濾波器的C代碼 257
5.12.2 將核心循環的C代碼轉換為線性彙編 258
5.12.3 將外環的C代碼轉換為線性彙編 258
5.12.4 展開FIR濾波器的C代碼 259
5.12.5 C代碼轉換為線性彙編(核心循環) 260
5.12.6 確定最小疊代間隔 262
5.12.7 最終彙編 262
5.12.8 性能比較 265
5.13 通用目標檔案格式 265
5.13.1 段 265
5.13.2 彙編器對段的處理 266
5.13.3 連線器對段的處理 271
第6章 彙編語言工具 273
6.1 宏語言 273
6.2 連線器描述 274
6.3 MEMORY偽指令 277
6.4 SECTIONS偽指令 279
6.4.1 SECTIONS偽指令格式 279
6.4.2 綁定 282
6.4.3 指定存儲器 283
6.4.4 指定輸入段 284
6.4.5 使用多個存儲器區域定位 286
6.4.6 在非連續的存儲器區域自動分裂輸出段 286
6.4.7 把文檔庫一個成員分配到輸出段 288
6.5 指定段的運行地址 289
6.5.1 指定載入地址和運行地址 289
6.5.2 未初始化段 290
6.5.3 使用.label偽指令引用載入地址 290
第7章 軟體集成開發 296
7.1 套用軟體開發流程及工具 296
7.2 集成開發環境(CCS) 298
7.2.1 CCS概述 298
7.2.2 CCS開發環境的安裝和配置 299
7.2.3 文本編輯器 313
7.2.4 調試工具 317
7.2.5 自動化(項目管理) 320
7.2.6 DSP/BIOS外掛程式 321
7.3 開發應用程式 324
7.3.1 創建工程檔案 324
7.3.2 向工程添加檔案 325
7.3.3 查看原始碼 325
7.3.4 編譯和運行程式 327
7.3.5 修改程式選項和糾正語法錯誤 328
7.3.6 使用斷點和觀察視窗 329
7.3.7 測算原始碼執行時間 330
7.4 開發DSP/BIOS程式 331
7.4.1 創建配置檔案 331
7.4.2 創建用戶模板 332
7.4.3 為模組設定全局屬性 333
7.4.4 通過配置工具創建對象 333
7.4.5 層次樹視窗 334
7.4.6 顯式DSP/BIOS外掛程式 339
7.4.7 核心/對象視窗調試 341
7.4.8 執行緒調度 345
7.4.9 利用執行圖查看程式的執行 346
第8章 程式調試與實例分析 348
8.1 程式調試 348
8.1.1 建立調試環境 348
8.1.2 記憶體映射 353
8.1.3 仿真(Simulation) 355
8.1.4 基礎調試 357
8.1.5 高級調試特徵 367
8.1.6 實時調試 371
8.1.7 復位晶片 375
8.2 實時分析 376
8.2.1 數據可視化 376
8.2.2 DSP/BIOS 實時分析(RTA)工具 377
8.2.3 代碼覆蓋範圍和多事件剖析工具 379
8.3 程式調試與分析實例 379
8.3.1 打開和查看工程 380
8.3.2 查看源程式 380
8.3.3 為I/O檔案增加探針斷點 382
8.3.4 顯示圖形 383
8.3.5 執行程式和繪製圖形 384
8.3.6 調節增益 385
8.3.7 觀察範圍外變數 386
8.3.8 使用GEL檔案 388
8.3.9 調節和測試processing函式 388
8.3.10 打開和查看工程 389
8.3.11 查看源程式 390
8.3.12 修改配置檔案 392
8.3.13 用Execution Graph查看任務執行情況 394
8.3.14 修改和查看load值 395
8.3.15 分析任務的統計數據 397
8.3.16 增加STS顯式測試 398
8.3.17 觀察顯式測試統計數據 399
8.4 應用程式代碼調整(ACT) 400
8.4.1 調整面板 401
8.4.2 高速快取調整工具(Cache Tune) 403
第9章 外部存儲器接口 404
9.1 概述 404
9.1.1 SDRAM接口 405
9.1.2 SBSRAM接口 411
9.1.3 異步接口 413
9.1.4 復位EMIF 419
9.1.5 HOLD接口 420
9.1.6 訪問EMIF暫存器時的邊界條件 421
9.1.7 時鐘輸出使能 421
9.2 TMS320C620x/C670x DSP的EMIF 422
9.2.1 概述 423
9.2.2 EMIF接口信號 423
9.2.3 SDRAM接口 426
9.2.4 SBSRAM接口 432
9.2.5 ROM訪問模式 434
9.2.6 存儲器請求優先權 434
9.3 TMS320C621x/C671x DSP的EMIF 435
9.3.1 概述 435
9.3.2 EMIF接口信號 435
9.3.3 SDRAM接口 438
9.3.4 SBSRAM接口 445
9.3.5 存儲器請求優先權 446
9.4 TMS320C64x DSP的EMIF 447
9.4.1 概述 447
9.4.2 EMIF接口信號 448
9.4.3 SDRAM接口 449
9.4.4 可程式同步接口 456
9.4.5 外部設備傳輸(PDT) 460
9.5 TMS320C6000 DSP的EMIF暫存器 466
9.6 時鐘輸出使能 472
第10章 中斷系統 474
10.1 TMS320C6000的中斷概述 474
10.1.1 中斷類型和中斷信號 474
10.1.2 中斷服務表(IST) 476
10.1.3 中斷控制暫存器 479
10.2 中斷控制 481
10.2.1 中斷使能暫存器(IER) 481
10.2.2 設定和清除中斷的狀態(IFR﹑ISR和ICR) 482
10.2.3 中斷返回服務 485
10.3 編程注意事項 486
10.3.1 單任務編程 486
10.3.2 嵌套中斷 486
10.3.3 手動中斷處理 487
10.3.4 陷阱 487
10.4 中斷選擇器與外部中斷 488
10.4.1 可用中斷源 488
10.4.2 中斷選擇暫存器 489
10.4.3 外部中斷信號時序 492
10.5 中斷套用實例 492
第11章 直接存儲器訪問(DMA) 512
11.1 概述 512
11.2 DMA控制暫存器 514
11.2.1 DMA主控制暫存器(PRICTL) 515
11.2.2 DMA從控制暫存器(SECCTL) 517
11.3 DMA的初始化和啟動 519
11.3.1 初始化一個DMA塊傳輸 519
11.3.2 DMA自動初始化 519
11.3.3 DMA信道重載暫存器 520
11.4 傳輸計數 521
11.5 同步傳輸 521
11.5.1 DMA通道事件的鎖定和清除 522
11.5.2 同步控制 523
11.6 地址的產生 524
11.7 通道的分裂操作 525
11.7.1 DMA分裂操作 525
11.7.2 DMA分裂地址產生 526
11.8 DMA控制器 526
11.8.1 TMS320C6201/C6701/C6202器件的DMA結構 526
11.8.2 TMS320C6202B/C6203B/C6204/C6205器件的DMA結構 527
11.8.3 DMA操作 528
11.8.4 DMA性能 528
11.8.5 DMA的外引腳 528
11.9 DMA套用實例 528
第12章 增強型直接存儲器訪問(EDMA) 547
12.1 EDMA概述 547
12.2 EDMA的控制暫存器 549
12.2.1 事件暫存器(ER,ERL,ERH) 550
12.2.2 事件使能暫存器(EER,EERL,EERH) 550
12.2.3 事件清除暫存器(ECR,ECRL,ECRH) 551
12.2.4 事件設定暫存器(ESR,ESRL,ESRH) 552
12.2.5 事件編碼器 553
12.3 參數RAM 553
12.4 EDMA傳輸參數 555
12.5 EDMA傳輸 556
12.6 EDMA傳輸的分類 558
12.6.1 一維傳輸 558
12.6.2 二維傳輸 560
12.7 單元大小與對齊 562
12.8 傳輸計數與地址更新 563
12.9 EDMA傳輸參數的連結 564
12.10 終止EDMA傳輸 565
12.11 EDMA中斷 566
12.12 事件連結EDMA通道 567
12.12.1 TMS320C621x/C671x EDMA傳輸鏈 568
12.12.2 TMS320C64x EDMA傳輸鏈 569
12.13 EDMA性能 569
12.14 快速DMA(QDMA) 569
12.14.1 QDMA的控制 569
12.14.2 QDMA的性能 571
12.14.3 QDMA的優先權 571
12.15 傳輸請求遞交 571
12.15.1 請求鏈 571
12.15.2 傳輸交叉開關 572
12.15.3 地址產生/傳輸邏輯 573
12.16 傳輸實例 574
12.16.1 塊搬移實例 574
12.16.2 子幀提取實例 575
12.16.3 數據分類的實例 577
12.16.4 非猝發外設 578
12.17 EDMA套用實例 585
12.17.1 套用實例分析 585
12.17.2 完整的程式代碼 589
第13章 多通道緩衝串口(McBSP) 616
13.1 概述 616
13.2 McBSP接口信號和控制暫存器 617
13.3 數據傳送和接收 619
13.3.1 串口的復位 620
13.3.2 確定就緒狀態 621
13.3.3 CPU中斷 621
13.3.4 時鐘和幀的配置 622
13.4 McBSP的標準操作 627
13.4.1 數據接收 627
13.4.2 數據傳送 628
13.4.3 最高幀頻率 628
13.5 忽略幀同步的傳輸 629
13.5.1 幀同步忽略與非預期的幀同步脈衝 629
13.5.2 利用幀同步忽略位的數據打包 630
13.6 串列異常的情況 631
13.6.1 接收滿:RFULL 631
13.6.2 非預期的接收幀同步:RSYNCERR 632
13.6.3 數據覆蓋時的傳送 633
13.6.4 傳送空數據 634
13.6.5 非預期的傳送幀同步 635
13.7 -律/A-律壓擴硬體操作 636
13.8 可程式時鐘與幀同步 637
13.8.1 採樣率發生器 638
13.8.2 McBSP初始化過程 640
13.9 多通道選擇操作 641
13.9.1 多通道控制暫存器(MCR) 641
13.9.2 多通道選擇的使能與禁止 644
13.9.3 增強型多通道選擇模式(C64×) 647
13.9.4 DX使能器 650
13.10 SPI協定:CLKSTP 651
13.10.1 McBSP作為SPI主設備 652
13.10.2 McBSP作為SPI從設備 653
13.10.3 SPI初始化 653
13.11 McBSP引腳作為通用I/O 654
13.12 McBSP套用實例 654
第14章 主機並行接口(HPI) 672
14.1 概述 672
14.2 HPI外部接口 674
14.2.1 TMS320C620x/C670x DSP的HPI 674
14.2.2 TMS320C621x/C671x DSP的HPI 675
14.2.3 TMS320C64x DSP的HPI16或HPI32 676
14.3 HPI接口信號 677
14.3.1 數據匯流排 678
14.3.2 訪問控制選擇信號 678
14.3.3 半字識別選擇信號 678
14.3.4 地址選通輸入信號 679
14.3.5 位元組使能信號 679
14.3.6 讀/寫選擇信號 680
14.3.7 選通信號 680
14.3.8 就緒信號 681
14.3.9 對主機的中斷 681
14.4 HPI匯流排訪問 681
14.4.1 TMS320C620x/C670x HPI匯流排訪問 681
14.4.2 TMS320C621x/C671x HPI匯流排訪問 684
14.4.3 TMS320C64x HPI匯流排訪問 686
14.5 主機訪問順序 687
14.5.1 HPIC與HPIA的初始化 688
14.5.2 固定地址模式下的HPID暫存器讀訪問 689
14.5.3 地址自增模式的HPID讀訪問 690
14.5.4 固定地址模式的HPID暫存器寫訪問 692
14.5.5 地址自增模式的HPID寫訪問 694
14.5.6 半字周期(僅適用於TMS320C620x/C670x) 696
14.5.7 HPI傳輸優先權佇列——TMS320C621x/C671x/C64x 697
14.5.8 復位時通過HPI的存儲器訪問 697
14.6 HPI暫存器 697
14.6.1 HPI數據暫存器 697
14.6.2 HPI地址暫存器 698
14.6.3 HPI控制(HPIC)暫存器 698
14.6.4 HPI傳輸請求控制(TRCTL)暫存器——僅C64xDSP 701
14.7 主機並行接口(HPI)套用實例 702
第15章 擴展匯流排 722
15.1 概述 722
15.2 擴展匯流排信號 723
15.3 擴展匯流排I/O連線埠 724
15.3.1 異步模式 726
15.3.2 同步FIFO模式 727
15.4 擴展匯流排主接口操作 729
15.4.1 同步主機連線埠模式 730
15.4.2 異步主機連線埠模式 735
15.5 擴展匯流排仲裁 737
15.5.1 內部匯流排仲裁器使能 737
15.5.2 內部匯流排仲裁器禁止 738
15.5.3 擴展匯流排請求器優先權 738
15.6 通過擴展匯流排進行引導 739
15.7 擴展匯流排的暫存器 739
15.7.1 擴展匯流排全局控制(XBGC)暫存器 740
15.7.2 擴展匯流排XCE空間控制暫存器 741
15.7.3 擴展匯流排主機接口控制(XBHC)暫存器 742
15.7.4 擴展匯流排內部主設備地址(XBIMA)暫存器 743
15.7.5 擴展匯流排外部地址(XBEA)暫存器 743
15.7.6 擴展匯流排數據(XBD)暫存器 744
15.7.7 擴展匯流排內部從設備(XBISA)暫存器 744
第16章 外圍設備互聯連線埠(PCI) 746
16.1 外圍設備互聯連線埠(PCI)概述 746
16.2 PCI連線埠結構 749
16.3 TMS320C6000 PCI存儲器映射 751
16.4 PCI存儲器服務的特殊考慮 752
16.4.1 可預取的讀操作 752
16.4.2 PCI與程式存儲器之間的數據傳輸(僅TMS320C62x DSP) 753
16.5 從設備傳輸 753
16.5.1 DSP從設備寫 753
16.5.2 DSP從設備讀 754
16.6 主設備傳輸 754
16.6.1 DSP主設備寫 755
16.6.2 DSP主設備讀 755
16.7 復位 756
16.8 中斷與狀態報告 757
16.9 PCI連線埠的啟動配置 757
16.10 EEPROM接口 758
16.10.1 由EEPROM實現PCI自動初始化 759
16.10.2 EEPROM記憶體映射 759
16.10.3 EEPROM校驗和 760
16.10.4 DSP EEPROM接口 760
16.11 錯誤處理 761
16.11.1 PCI奇偶錯誤處理 761
16.11.2 PCI系統錯誤處理 762
16.11.3 PCI主設備終止協定 762
16.11.4 PCI目標設備終止協定 762
16.12 電源管理(僅適用於TMS320C62x) 762
16.12.1 PCI電源管理 762
16.12.2 PCI電源管理策略 764
16.12.3 DSP復位 765
16.13 PCI暫存器 765
16.13.1 PCI配置暫存器 766
16.13.2 I/O暫存器 769
16.13.3 記憶體映射暫存器 771
16.14 PCI套用實例 780
第17章 定時器 795
17.1 概述 795
17.2 定時器的暫存器 795
17.3 定時器的啟動和停止 799
17.4 定時器計數 799
17.5 定時器脈衝的產生 799
17.6 控制暫存器中的邊界情況 800
17.7 定時器引腳配置為通用I/O連線埠 801
第18章 通用輸入/輸出(I/O) 802
18.1 概述 802
18.2 通用輸入/輸出(I/O)連線埠的功能 803
18.3 中斷與事件產生 803
18.3.1 直通模式 804
18.3.2 邏輯模式 805
18.3.3 GPINT與GP0和/或GPINT0的復用 805
18.4 中斷與事件 806
18.5 通用輸入/輸出(I/O)連線埠暫存器 806
3.3.6 設定目錄 93
3.3.7 設定默認的編譯選項 94
3.4 最佳化代碼 95
3.4.1 執行最佳化 95
3.4.2 最佳化軟體流水 97
3.4.3 冗餘循環 100
3.4.4 調試和剖析最佳化代碼 101
3.4.5 基於價值的暫存器分配 101
3.4.6 別名消除 102
3.4.7 最佳化跳轉和簡化控制流 102
3.4.8 數據流最佳化 102
3.4.9 簡化表達式 102
3.4.10 內聯函式擴展 103
3.4.11 暫存器跟蹤與分配 104
3.5 使用彙編最佳化器 105
3.5.1 增強性能的代碼開發流程 105
3.5.2 線性彙編知識 106
第4章 C/C++程式開發 112
4.1 TMS320C6000系列C/C++語言實現 112
4.1.1 TMS320C6000系列C語言特點 112
4.1.2 TMS320C6000系列C++語言特點 114
4.1.3 TMS320C6000系列C/C++語言關鍵字 114
4.1.4 pragma偽指令 119
4.1.5 初始化靜態變數和全局變數 125
4.2 運行時環境 126
4.2.1 存儲器模型 126
4.2.2 對象的表示 129
4.2.3 中斷處理 134
4.2.4 系統初始化 135
4.3 運行時支持函式 139
4.3.1 編譯器包括的庫 139
4.3.2 C語言的I/O函式 140
4.3.3 運行時支持庫函式和宏的描述 148
4.4 TMS320C6000系列C/C++代碼最佳化 151
4.4.1 C/C++語言代碼的編寫 151
4.4.2 編譯C/C++代碼 152
4.4.3 最佳化C代碼 153
4.5 C/C++語言和彙編的混合編程 157
4.5.1 在C/C++代碼中調用彙編語言模組 157
4.5.2 用內嵌函式訪問彙編語言 158
4.5.3 在C/C++語言中嵌入彙編語言 159
4.5.4 在C/C++語言中訪問彙編語言變數 159
第5章 線性彙編最佳化代碼 165
5.1 彙編最佳化器選項與偽指令 165
5.2 編寫並行代碼 169
5.2.1 點積的C代碼 169
5.2.2 C代碼轉換為線性彙編 170
5.2.3 畫相關性圖 171
5.2.4 非並行彙編代碼與並行彙編代碼 172
5.2.5 使用字訪問短型數據與使用雙字訪問 176
5.3 軟體流水 183
5.3.1 模疊代間隔編排表 185
5.3.2 使用彙編最佳化器產生最佳化循環 189
5.3.3 最終彙編 190
5.4 多周期循環的模疊代 204
5.4.1 轉換C代碼為線性彙編 204
5.4.2 確定最小疊代間隔 204
5.4.3 畫相關性圖 206
5.4.4 線性彙編資源分配 207
5.4.5 模疊代間隔編排 207
5.4.6 使用彙編最佳化器產生加權矢量和 214
5.4.7 最終彙編 215
5.5 循環傳遞路徑 216
5.5.1 將C代碼的核心循環轉換為線性彙編 217
5.5.2 畫相關性圖 217
5.5.3 確定最小疊代間隔 218
5.5.4 線性彙編資源分配 220
5.5.5 模疊代間隔安排 220
5.5.6 使用彙編最佳化器處理IIR濾波器 221
5.5.7 最終彙編 222
5.6 循環中的if-then-else語句 222
5.6.1 if-then-else的C代碼 223
5.6.2 轉換C代碼為線性彙編 223
5.6.3 畫相關性圖 224
5.6.4 確定最小疊代間隔 224
5.6.5 線性彙編資源分配 225
5.6.6 最終彙編 226
5.6.7 性能比較 226
5.7 循環展開 227
5.7.1 展開if-then-else的C代碼 228
5.7.2 C代碼轉換為線性彙編 228
5.7.3 畫相關性圖 229
5.7.4 確定最小疊代間隔 230
5.7.5 線性彙編資源安排 230
5.7.6 最終彙編 231
5.8 生命太長問題 232
5.8.1 具有生命太長問題的C代碼 232
5.8.2 C代碼轉換為線性彙編 233
5.8.3 畫相關性圖 234
5.8.4 確定最小疊代間隔 234
5.8.5 線性彙編資源安排 235
5.8.6 帶MV指令的最後彙編 236
5.9 消除冗餘取數 238
5.9.1 轉換C代碼為線性彙編 239
5.9.2 畫相關性圖 240
5.9.3 確定最小疊代間隔 241
5.9.4 線性彙編資源分配 241
5.9.5 最終彙編 242
5.10 存儲體 244
5.10.1 FIR濾波器的核心循環 245
5.10.2 展開的FIR濾波器的C代碼 246
5.10.3 將C代碼轉換為線性彙編 247
5.10.4 畫相關性圖 248
5.10.5 含有.mptr命令的展開後FIR線性彙編 249
5.10.6 線性彙編資源分配 250
5.10.7 確定最小疊代間隔 250
5.10.8 最終彙編 251
5.11 軟體流水外循環 253
5.11.1 展開FIR濾波器的C代碼 253
5.11.2 最終彙編 254
5.12 同內循環一起條件地執行外循環 257
5.12.1 展開FIR濾波器的C代碼 257
5.12.2 將核心循環的C代碼轉換為線性彙編 258
5.12.3 將外環的C代碼轉換為線性彙編 258
5.12.4 展開FIR濾波器的C代碼 259
5.12.5 C代碼轉換為線性彙編(核心循環) 260
5.12.6 確定最小疊代間隔 262
5.12.7 最終彙編 262
5.12.8 性能比較 265
5.13 通用目標檔案格式 265
5.13.1 段 265
5.13.2 彙編器對段的處理 266
5.13.3 連線器對段的處理 271
第6章 彙編語言工具 273
6.1 宏語言 273
6.2 連線器描述 274
6.3 MEMORY偽指令 277
6.4 SECTIONS偽指令 279
6.4.1 SECTIONS偽指令格式 279
6.4.2 綁定 282
6.4.3 指定存儲器 283
6.4.4 指定輸入段 284
6.4.5 使用多個存儲器區域定位 286
6.4.6 在非連續的存儲器區域自動分裂輸出段 286
6.4.7 把文檔庫一個成員分配到輸出段 288
6.5 指定段的運行地址 289
6.5.1 指定載入地址和運行地址 289
6.5.2 未初始化段 290
6.5.3 使用.label偽指令引用載入地址 290
第7章 軟體集成開發 296
7.1 套用軟體開發流程及工具 296
7.2 集成開發環境(CCS) 298
7.2.1 CCS概述 298
7.2.2 CCS開發環境的安裝和配置 299
7.2.3 文本編輯器 313
7.2.4 調試工具 317
7.2.5 自動化(項目管理) 320
7.2.6 DSP/BIOS外掛程式 321
7.3 開發應用程式 324
7.3.1 創建工程檔案 324
7.3.2 向工程添加檔案 325
7.3.3 查看原始碼 325
7.3.4 編譯和運行程式 327
7.3.5 修改程式選項和糾正語法錯誤 328
7.3.6 使用斷點和觀察視窗 329
7.3.7 測算原始碼執行時間 330
7.4 開發DSP/BIOS程式 331
7.4.1 創建配置檔案 331
7.4.2 創建用戶模板 332
7.4.3 為模組設定全局屬性 333
7.4.4 通過配置工具創建對象 333
7.4.5 層次樹視窗 334
7.4.6 顯式DSP/BIOS外掛程式 339
7.4.7 核心/對象視窗調試 341
7.4.8 執行緒調度 345
7.4.9 利用執行圖查看程式的執行 346
第8章 程式調試與實例分析 348
8.1 程式調試 348
8.1.1 建立調試環境 348
8.1.2 記憶體映射 353
8.1.3 仿真(Simulation) 355
8.1.4 基礎調試 357
8.1.5 高級調試特徵 367
8.1.6 實時調試 371
8.1.7 復位晶片 375
8.2 實時分析 376
8.2.1 數據可視化 376
8.2.2 DSP/BIOS 實時分析(RTA)工具 377
8.2.3 代碼覆蓋範圍和多事件剖析工具 379
8.3 程式調試與分析實例 379
8.3.1 打開和查看工程 380
8.3.2 查看源程式 380
8.3.3 為I/O檔案增加探針斷點 382
8.3.4 顯示圖形 383
8.3.5 執行程式和繪製圖形 384
8.3.6 調節增益 385
8.3.7 觀察範圍外變數 386
8.3.8 使用GEL檔案 388
8.3.9 調節和測試processing函式 388
8.3.10 打開和查看工程 389
8.3.11 查看源程式 390
8.3.12 修改配置檔案 392
8.3.13 用Execution Graph查看任務執行情況 394
8.3.14 修改和查看load值 395
8.3.15 分析任務的統計數據 397
8.3.16 增加STS顯式測試 398
8.3.17 觀察顯式測試統計數據 399
8.4 應用程式代碼調整(ACT) 400
8.4.1 調整面板 401
8.4.2 高速快取調整工具(Cache Tune) 403
第9章 外部存儲器接口 404
9.1 概述 404
9.1.1 SDRAM接口 405
9.1.2 SBSRAM接口 411
9.1.3 異步接口 413
9.1.4 復位EMIF 419
9.1.5 HOLD接口 420
9.1.6 訪問EMIF暫存器時的邊界條件 421
9.1.7 時鐘輸出使能 421
9.2 TMS320C620x/C670x DSP的EMIF 422
9.2.1 概述 423
9.2.2 EMIF接口信號 423
9.2.3 SDRAM接口 426
9.2.4 SBSRAM接口 432
9.2.5 ROM訪問模式 434
9.2.6 存儲器請求優先權 434
9.3 TMS320C621x/C671x DSP的EMIF 435
9.3.1 概述 435
9.3.2 EMIF接口信號 435
9.3.3 SDRAM接口 438
9.3.4 SBSRAM接口 445
9.3.5 存儲器請求優先權 446
9.4 TMS320C64x DSP的EMIF 447
9.4.1 概述 447
9.4.2 EMIF接口信號 448
9.4.3 SDRAM接口 449
9.4.4 可程式同步接口 456
9.4.5 外部設備傳輸(PDT) 460
9.5 TMS320C6000 DSP的EMIF暫存器 466
9.6 時鐘輸出使能 472
第10章 中斷系統 474
10.1 TMS320C6000的中斷概述 474
10.1.1 中斷類型和中斷信號 474
10.1.2 中斷服務表(IST) 476
10.1.3 中斷控制暫存器 479
10.2 中斷控制 481
10.2.1 中斷使能暫存器(IER) 481
10.2.2 設定和清除中斷的狀態(IFR﹑ISR和ICR) 482
10.2.3 中斷返回服務 485
10.3 編程注意事項 486
10.3.1 單任務編程 486
10.3.2 嵌套中斷 486
10.3.3 手動中斷處理 487
10.3.4 陷阱 487
10.4 中斷選擇器與外部中斷 488
10.4.1 可用中斷源 488
10.4.2 中斷選擇暫存器 489
10.4.3 外部中斷信號時序 492
10.5 中斷套用實例 492
第11章 直接存儲器訪問(DMA) 512
11.1 概述 512
11.2 DMA控制暫存器 514
11.2.1 DMA主控制暫存器(PRICTL) 515
11.2.2 DMA從控制暫存器(SECCTL) 517
11.3 DMA的初始化和啟動 519
11.3.1 初始化一個DMA塊傳輸 519
11.3.2 DMA自動初始化 519
11.3.3 DMA信道重載暫存器 520
11.4 傳輸計數 521
11.5 同步傳輸 521
11.5.1 DMA通道事件的鎖定和清除 522
11.5.2 同步控制 523
11.6 地址的產生 524
11.7 通道的分裂操作 525
11.7.1 DMA分裂操作 525
11.7.2 DMA分裂地址產生 526
11.8 DMA控制器 526
11.8.1 TMS320C6201/C6701/C6202器件的DMA結構 526
11.8.2 TMS320C6202B/C6203B/C6204/C6205器件的DMA結構 527
11.8.3 DMA操作 528
11.8.4 DMA性能 528
11.8.5 DMA的外引腳 528
11.9 DMA套用實例 528
第12章 增強型直接存儲器訪問(EDMA) 547
12.1 EDMA概述 547
12.2 EDMA的控制暫存器 549
12.2.1 事件暫存器(ER,ERL,ERH) 550
12.2.2 事件使能暫存器(EER,EERL,EERH) 550
12.2.3 事件清除暫存器(ECR,ECRL,ECRH) 551
12.2.4 事件設定暫存器(ESR,ESRL,ESRH) 552
12.2.5 事件編碼器 553
12.3 參數RAM 553
12.4 EDMA傳輸參數 555
12.5 EDMA傳輸 556
12.6 EDMA傳輸的分類 558
12.6.1 一維傳輸 558
12.6.2 二維傳輸 560
12.7 單元大小與對齊 562
12.8 傳輸計數與地址更新 563
12.9 EDMA傳輸參數的連結 564
12.10 終止EDMA傳輸 565
12.11 EDMA中斷 566
12.12 事件連結EDMA通道 567
12.12.1 TMS320C621x/C671x EDMA傳輸鏈 568
12.12.2 TMS320C64x EDMA傳輸鏈 569
12.13 EDMA性能 569
12.14 快速DMA(QDMA) 569
12.14.1 QDMA的控制 569
12.14.2 QDMA的性能 571
12.14.3 QDMA的優先權 571
12.15 傳輸請求遞交 571
12.15.1 請求鏈 571
12.15.2 傳輸交叉開關 572
12.15.3 地址產生/傳輸邏輯 573
12.16 傳輸實例 574
12.16.1 塊搬移實例 574
12.16.2 子幀提取實例 575
12.16.3 數據分類的實例 577
12.16.4 非猝發外設 578
12.17 EDMA套用實例 585
12.17.1 套用實例分析 585
12.17.2 完整的程式代碼 589
第13章 多通道緩衝串口(McBSP) 616
13.1 概述 616
13.2 McBSP接口信號和控制暫存器 617
13.3 數據傳送和接收 619
13.3.1 串口的復位 620
13.3.2 確定就緒狀態 621
13.3.3 CPU中斷 621
13.3.4 時鐘和幀的配置 622
13.4 McBSP的標準操作 627
13.4.1 數據接收 627
13.4.2 數據傳送 628
13.4.3 最高幀頻率 628
13.5 忽略幀同步的傳輸 629
13.5.1 幀同步忽略與非預期的幀同步脈衝 629
13.5.2 利用幀同步忽略位的數據打包 630
13.6 串列異常的情況 631
13.6.1 接收滿:RFULL 631
13.6.2 非預期的接收幀同步:RSYNCERR 632
13.6.3 數據覆蓋時的傳送 633
13.6.4 傳送空數據 634
13.6.5 非預期的傳送幀同步 635
13.7 -律/A-律壓擴硬體操作 636
13.8 可程式時鐘與幀同步 637
13.8.1 採樣率發生器 638
13.8.2 McBSP初始化過程 640
13.9 多通道選擇操作 641
13.9.1 多通道控制暫存器(MCR) 641
13.9.2 多通道選擇的使能與禁止 644
13.9.3 增強型多通道選擇模式(C64×) 647
13.9.4 DX使能器 650
13.10 SPI協定:CLKSTP 651
13.10.1 McBSP作為SPI主設備 652
13.10.2 McBSP作為SPI從設備 653
13.10.3 SPI初始化 653
13.11 McBSP引腳作為通用I/O 654
13.12 McBSP套用實例 654
第14章 主機並行接口(HPI) 672
14.1 概述 672
14.2 HPI外部接口 674
14.2.1 TMS320C620x/C670x DSP的HPI 674
14.2.2 TMS320C621x/C671x DSP的HPI 675
14.2.3 TMS320C64x DSP的HPI16或HPI32 676
14.3 HPI接口信號 677
14.3.1 數據匯流排 678
14.3.2 訪問控制選擇信號 678
14.3.3 半字識別選擇信號 678
14.3.4 地址選通輸入信號 679
14.3.5 位元組使能信號 679
14.3.6 讀/寫選擇信號 680
14.3.7 選通信號 680
14.3.8 就緒信號 681
14.3.9 對主機的中斷 681
14.4 HPI匯流排訪問 681
14.4.1 TMS320C620x/C670x HPI匯流排訪問 681
14.4.2 TMS320C621x/C671x HPI匯流排訪問 684
14.4.3 TMS320C64x HPI匯流排訪問 686
14.5 主機訪問順序 687
14.5.1 HPIC與HPIA的初始化 688
14.5.2 固定地址模式下的HPID暫存器讀訪問 689
14.5.3 地址自增模式的HPID讀訪問 690
14.5.4 固定地址模式的HPID暫存器寫訪問 692
14.5.5 地址自增模式的HPID寫訪問 694
14.5.6 半字周期(僅適用於TMS320C620x/C670x) 696
14.5.7 HPI傳輸優先權佇列——TMS320C621x/C671x/C64x 697
14.5.8 復位時通過HPI的存儲器訪問 697
14.6 HPI暫存器 697
14.6.1 HPI數據暫存器 697
14.6.2 HPI地址暫存器 698
14.6.3 HPI控制(HPIC)暫存器 698
14.6.4 HPI傳輸請求控制(TRCTL)暫存器——僅C64xDSP 701
14.7 主機並行接口(HPI)套用實例 702
第15章 擴展匯流排 722
15.1 概述 722
15.2 擴展匯流排信號 723
15.3 擴展匯流排I/O連線埠 724
15.3.1 異步模式 726
15.3.2 同步FIFO模式 727
15.4 擴展匯流排主接口操作 729
15.4.1 同步主機連線埠模式 730
15.4.2 異步主機連線埠模式 735
15.5 擴展匯流排仲裁 737
15.5.1 內部匯流排仲裁器使能 737
15.5.2 內部匯流排仲裁器禁止 738
15.5.3 擴展匯流排請求器優先權 738
15.6 通過擴展匯流排進行引導 739
15.7 擴展匯流排的暫存器 739
15.7.1 擴展匯流排全局控制(XBGC)暫存器 740
15.7.2 擴展匯流排XCE空間控制暫存器 741
15.7.3 擴展匯流排主機接口控制(XBHC)暫存器 742
15.7.4 擴展匯流排內部主設備地址(XBIMA)暫存器 743
15.7.5 擴展匯流排外部地址(XBEA)暫存器 743
15.7.6 擴展匯流排數據(XBD)暫存器 744
15.7.7 擴展匯流排內部從設備(XBISA)暫存器 744
第16章 外圍設備互聯連線埠(PCI) 746
16.1 外圍設備互聯連線埠(PCI)概述 746
16.2 PCI連線埠結構 749
16.3 TMS320C6000 PCI存儲器映射 751
16.4 PCI存儲器服務的特殊考慮 752
16.4.1 可預取的讀操作 752
16.4.2 PCI與程式存儲器之間的數據傳輸(僅TMS320C62x DSP) 753
16.5 從設備傳輸 753
16.5.1 DSP從設備寫 753
16.5.2 DSP從設備讀 754
16.6 主設備傳輸 754
16.6.1 DSP主設備寫 755
16.6.2 DSP主設備讀 755
16.7 復位 756
16.8 中斷與狀態報告 757
16.9 PCI連線埠的啟動配置 757
16.10 EEPROM接口 758
16.10.1 由EEPROM實現PCI自動初始化 759
16.10.2 EEPROM記憶體映射 759
16.10.3 EEPROM校驗和 760
16.10.4 DSP EEPROM接口 760
16.11 錯誤處理 761
16.11.1 PCI奇偶錯誤處理 761
16.11.2 PCI系統錯誤處理 762
16.11.3 PCI主設備終止協定 762
16.11.4 PCI目標設備終止協定 762
16.12 電源管理(僅適用於TMS320C62x) 762
16.12.1 PCI電源管理 762
16.12.2 PCI電源管理策略 764
16.12.3 DSP復位 765
16.13 PCI暫存器 765
16.13.1 PCI配置暫存器 766
16.13.2 I/O暫存器 769
16.13.3 記憶體映射暫存器 771
16.14 PCI套用實例 780
第17章 定時器 795
17.1 概述 795
17.2 定時器的暫存器 795
17.3 定時器的啟動和停止 799
17.4 定時器計數 799
17.5 定時器脈衝的產生 799
17.6 控制暫存器中的邊界情況 800
17.7 定時器引腳配置為通用I/O連線埠 801
第18章 通用輸入/輸出(I/O) 802
18.1 概述 802
18.2 通用輸入/輸出(I/O)連線埠的功能 803
18.3 中斷與事件產生 803
18.3.1 直通模式 804
18.3.2 邏輯模式 805
18.3.3 GPINT與GP0和/或GPINT0的復用 805
18.4 中斷與事件 806
18.5 通用輸入/輸出(I/O)連線埠暫存器 806