⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtag_opt.s

📁 使用JTAG口对AT91R40008芯片进行FLASH编程的程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	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 + -