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

📄 jtag_opt.s

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