📄 jtag_opt.s
字号:
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_8
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_7
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_6
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_5
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_4
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_3
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_2
MOV r6, r6, LSR #1 ; // Update the bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_1
MOV r6, r6, LSR #1 ; // Update the bitMask
SET_TMS
TOGGLE_TCK ; // EXIT1_DR
TDO_VALUE
ORRNE r8, r8, r6 ; // SHIFT_DR id_code_0
TOGGLE_TCK ; // UPDATE_DR
CLR_TMS
TOGGLE_TCK ; // RUN_TEST_IDLE
SET_TMS
TOGGLE_TCK ; // SELECT_DR_SCAN
STR r8, [r0] ; save to output data
END_JTAG
; ==============================================
; Function : JTAG_Step (debug speed)
; ==============================================
; input parameters
; r0 : instruction or data to execute
; ==============================================
; output parameters
; r1 : address to store the result
; ==============================================
; r4 : used by TDO, TDI, TCK, TMS
; r5 : used by TDO, TDI, TCK, TMS
; r7 : output bitmask
; r8 : output value
; r9 : scratch register
; r10 : used to clear TDI
JTAG_Step
INIT_JTAG
MOV r7, #1
MOV r7, r7, LSL #31 ; init output bitMask
MOV r8, #0
MOV r10, #0
GOTO_C_DR
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0
TOGGLE_TCK ; // SHIFT_DR and signal BRKPT = LOW
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_31
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_31
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_30
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_30
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_29
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_29
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_28
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_28
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_27
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_27
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_26
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_26
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_25
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_25
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_24
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_24
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_23
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_23
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_22
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_22
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_21
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_21
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_20
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_20
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_19
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_19
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_18
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_18
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_17
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_17
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_16
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_16
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_15
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_15
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_14
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_14
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_13
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_13
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_12
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_12
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_11
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_11
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_10
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_10
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_9
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_9
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_8
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_8
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_7
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_7
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_6
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_6
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_5
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_5
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_4
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_4
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_3
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_3
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_2
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_2
MOV r7, r7, LSR #1 ; // Update the output bitMask
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_1
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR data_1
MOV r7, r7, LSR #1 ; // Update the output bitMask
SET_TMS
ANDS r9, r0, r7
TDI ; // SHIFT_DR instruction_0
TOGGLE_TCK ; // EXIT1_DR
TDO_VALUE ;
ORRNE r8, r8, r7 ; // SHIFT_DR data_0
MOV r10, #1
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 1
TOGGLE_TCK ; // UPDATE_DR
CLR_TMS
TOGGLE_TCK ; // RUN_TEST_IDLE
SET_TMS
TOGGLE_TCK ; // SELECT_DR_SCAN
STR r8, [r1] ; save to output data
END_JTAG
; ================================================
; Function : JTAG_Step_System_Speed (system speed)
; ================================================
; input parameters
; r0 : instruction or data to execute
; ================================================
; output parameters
; r1 : address to store the result
; ================================================
; r4 : used by TDO, TDI, TCK, TMS
; r5 : used by TDO, TDI, TCK, TMS
; r6 : input bitmask
; r8 : output value
; r9 : scratch register
; r10 : used to clear TDI
JTAG_Step_System_Speed
INIT_JTAG
MOV r6, #1
MOV r6, r6, LSL #31 ; init input bitMask
MOV r10, #0
GOTO_C_DR
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0
TOGGLE_TCK ; // SHIFT_DR
MOV r10, #1
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 1
TOGGLE_TCK ; // SHIFT_DR and signal BRKPT = HIGH
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_31
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_30
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_29
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_28
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_27
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_26
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_25
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_24
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_23
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_22
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_21
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_20
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_19
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_18
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_17
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_16
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_15
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_14
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_13
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_12
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_11
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_10
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_9
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_8
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_7
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_6
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_5
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_4
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_3
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -