📄 jtag_opt.s
字号:
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_1
MOV r6, r6, LSR #1 ; // Update the input bitMask
TOGGLE_TCK ; // SHIFT_DR
SET_TMS
ANDS r9, r0, r6
TDI ; // SHIFT_DR instruction_0
TOGGLE_TCK ; // EXIT1_DR
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
END_JTAG
; ================================================
; Function : JTAG_Read_Bkru
; ================================================
; input parameters
; r0 : address of the register to read
; ================================================
; output parameters
; r1 : address to store the result
; ================================================
; r4 : used by TDO, TDI, TCK, TMS
; r5 : used by TDO, TDI, TCK, TMS
; r6 : address bitmask
; r7 : output bitmask
; r8 : output value
; r9 : scratch register
; r10 : used to clear TDI
JTAG_Read_Bkru
INIT_JTAG
MOV r6, #1 ; init address bitMask
MOV r7, #1 ; 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, r0, r6
TDI ;
TOGGLE_TCK ; // SHIFT_DR addr_bkru_0
MOV r6, r6, LSL #1 ; // Update the address bitMask
ANDS r9, r0, r6
TDI ;
TOGGLE_TCK ; // SHIFT_DR addr_bkru_1
MOV r6, r6, LSL #1 ; // Update the address bitMask
ANDS r9, r0, r6
TDI ;
TOGGLE_TCK ; // SHIFT_DR addr_bkru_2
MOV r6, r6, LSL #1 ; // Update the address bitMask
ANDS r9, r0, r6
TDI ;
TOGGLE_TCK ; // SHIFT_DR addr_bkru_3
MOV r6, r6, LSL #1 ; // Update the address bitMask
ANDS r9, r0, r6
TDI ;
TOGGLE_TCK ; // SHIFT_DR addr_bkru_4
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0 -> Read Bkru
SET_TMS ; // TMS = 1
TOGGLE_TCK ; // EXIT1_DR
MOV r10, #1
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 1
TOGGLE_TCK ; // UPDATE_DR
MOV r0, r0
MOV r0, r0
TOGGLE_TCK ; // SELECT_DR_SCAN
CLR_TMS
TOGGLE_TCK ; // CAPTURE_DR
MOV r10, #0
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0
TOGGLE_TCK ; // SHIFT_DR
MOV r0, r0
MOV r0, r0
TOGGLE_TCK
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_0
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_1
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_2
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_3
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_4
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_5
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_6
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_7
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_8
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_9
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_10
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_11
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_12
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_13
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_14
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_15
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_16
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_17
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_18
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_19
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_20
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_21
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_22
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_23
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_24
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_25
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_26
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_27
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_28
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_29
MOV r7, r7, LSL #1 ; // Update the output bitMask
TOGGLE_TCK ; // SHIFT_DR
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_30
MOV r7, r7, LSL #1 ; // Update the output bitMask
SET_TMS ;// test
TOGGLE_TCK
TDO_VALUE
ORRNE r8, r8, r7 ; // SHIFT_DR bkru_data_31
; // EXIT1_DR
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_Write_Bkru
; ================================================
; input parameters
; r0 : address of the register
; r1 : data to write
; ================================================
; output parameters : none
; ================================================
; r4 : used by TDO, TDI, TCK, TMS
; r5 : used by TDO, TDI, TCK, TMS
; r6 : input bitmask
; r9 : scratch register
; r10 : used to clear and set TDI
JTAG_Write_Bkru
INIT_JTAG
MOV r6, #1 ; init address bitMask
MOV r10, #0
GOTO_C_DR
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 0
TOGGLE_TCK ; // SHIFT_DR
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_0
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_1
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_2
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_3
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_4
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_5
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_6
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_7
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_8
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_9
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_10
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_11
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_12
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_13
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_14
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_15
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_16
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_17
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_18
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_19
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_20
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_21
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_22
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_23
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_24
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_25
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_26
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_27
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_28
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_29
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_30
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r1, r6
TDI
TOGGLE_TCK ; // SHIFT_DR data_bkru_31
MOV r6, #1 ; // Reset the bitMask
ANDS r9, r0, r6
TDI
TOGGLE_TCK ; // SHIFT_DR bkru_addr_0
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r0, r6
TDI
TOGGLE_TCK ; // SHIFT_DR bkru_addr_1
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r0, r6
TDI
TOGGLE_TCK ; // SHIFT_DR bkru_addr_2
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r0, r6
TDI
TOGGLE_TCK ; // SHIFT_DR bkru_addr_3
MOV r6, r6, LSL #1 ; // Update the bitMask
ANDS r9, r0, r6
TDI
TOGGLE_TCK ; // SHIFT_DR bkru_addr_4
MOV r10, #1
ANDS r9, r10, #(1:SHL:0)
TDI ; // TDI = 1 -> Write
SET_TMS
TOGGLE_TCK ; // EXIT1_DR bkru_read_write
MOV r0, r0
MOV r0, r0
TOGGLE_TCK ; // UPDATE_DR
CLR_TMS
TOGGLE_TCK ; // RUN_TEST_IDLE
SET_TMS
TOGGLE_TCK ; // SELECT_DR_SCAN
END_JTAG
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -