<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種嵌入式系統實(shí)現的JTAG調試器

一種嵌入式系統實(shí)現的JTAG調試器

作者: 時(shí)間:2009-11-05 來(lái)源:網(wǎng)絡(luò ) 收藏

arm7TDMI寄存器和內存訪(fǎng)問(wèn)的

邊界掃描鏈分布在A(yíng)RM7TDMI的32位數據總線(xiàn)的周?chē)?arm7TDMI每次取指令或者進(jìn)行數據存儲時(shí)都要通過(guò)32位數據總線(xiàn)進(jìn)行。這樣, 通過(guò)邊界掃描鏈1, 就可以插入新指令或者新數據, 同時(shí)也可以捕獲出現在數據總線(xiàn)上的數據。通過(guò)這種方式, 可以檢查和修改arm7TDMI的通用寄存器和內存。

以讀取寄存器R0 的值為例, 介紹邊界掃描鏈1 的操作過(guò)程。

讀取寄存器R0的值可以用指令STR R0, [R0] ( 機器碼為0xE5800000) 來(lái)。該指令可將寄存器R0 的值存儲到內存單元R0中去。因為在A(yíng)RM7TDMI處于調試狀態(tài)時(shí), ARM7TDMI和外部是隔離開(kāi)的, 所以該指令實(shí)際上不能訪(fǎng)問(wèn)內存單元,也不會(huì )對內存單元產(chǎn)生任何影響。使用指令STR R0, [R0]可使得寄存器R0的值出現在數據總線(xiàn)上, 這樣就可以通過(guò)掃描鏈1將其捕獲,然后從TDO輸出。指令STR R0, [R0]的執行需要兩個(gè)指令執行周期。在第一個(gè)指令執行周期, 執行地址計算; 在第二個(gè)指令執行周期,將寄存器R0的值放到數據總線(xiàn)上去。對arm寄存器寫(xiě)操作及訪(fǎng)問(wèn)內存的方法與此類(lèi)似,都是通過(guò)掃描鏈1, 只是所使用的指令不同而已。

網(wǎng)絡(luò )編程

通過(guò)網(wǎng)絡(luò )編程, 可以對目標遠程調試。網(wǎng)絡(luò )通信通過(guò)μClinux下的socket編程實(shí)現,首先PC(調試主機)通過(guò)網(wǎng)絡(luò )向仿真器發(fā)送命令, 仿真器通過(guò)統一的程序接口分析調試命令, 并將調試命令轉換成標準所要求的時(shí)序,通過(guò)I/O口線(xiàn)發(fā)送到目標板; 然后目標板執行命令,并將命令執行后得到的調試信息返回給仿真器, 接著(zhù)仿真器將調試信息通過(guò)網(wǎng)絡(luò )發(fā)送給PC,這樣用戶(hù)在PC上便得到了調試信息。

測試及部分執行結果

本設計最終完成了一種在Linux終端下操作的。上電后便在μClinux 下自動(dòng)運行調試器客戶(hù)端程序, 同時(shí)在PC的Cygwin環(huán)境下運行JTAG調試器服務(wù)器端程序jtager , 建立網(wǎng)絡(luò )連接。然后在Cygwin下鍵入用戶(hù)調試命令, 執行下列操作: (1)寫(xiě)目標板上的CPU狀態(tài);(2)讀寫(xiě)編址在統一內存空間的外部設備寄存器; (3)讀寫(xiě)目標機上的RAM; (4)讀寫(xiě)目標機上的固態(tài)存儲設備, 如Flash;(5)對ICE- RT進(jìn)行調試。

設計實(shí)現的調試器的用戶(hù)命令較多, 下面僅列出兩條典型命令I(lǐng)DCODE 和REG 執行后的結果。

執行IDCODE命令后, 讀出了一個(gè)基于S3C4510B的目標開(kāi)發(fā)板內的CPUID號, 從而得到Device ID=0x1F0F0F0F.通過(guò)邏輯分析儀分析幾個(gè)JTAG接口信號的時(shí)序關(guān)系, 可以觀(guān)察到JTAG掃描連的訪(fǎng)問(wèn)過(guò)程以及該過(guò)程中各種狀態(tài)的轉移,結果與JTAG_調試原理吻合。

執行RE命令后, 得到了寄存器R0~R15及CPSR內容, 即讀出了目標開(kāi)發(fā)板處理器S3C4510B在當前處理器模式下的所有寄存器值, 而且還可以通過(guò)其他命令對其進(jìn)行修改。

此外, 通過(guò)掃描鏈2可以訪(fǎng)問(wèn)ICE- RT的17個(gè)寬度不同的內部調試寄存器, 通過(guò)這些寄存器使目標arm7TDMI分別進(jìn)入調試狀態(tài)的3種方式, 即控制DBGRQ信號、斷點(diǎn)和觀(guān)察點(diǎn), 實(shí)現在線(xiàn)調試功能。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>