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

📄 init.s.bak

📁 一款交换机BSP开发代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		;MOVE.L	D0,A1
		
		MOVE.L	#___RTEXT_START,A2
_Copy_Main_Code:
        MOVE.L  (A1)+, D0
        MOVE.L  D0, (A2)+
        MOVE.L  (A1)+, D0
        MOVE.L  D0, (A2)+
        MOVE.L  (A1)+, D0
        MOVE.L  D0, (A2)+
        MOVE.L  (A1)+, D0
        MOVE.L  D0, (A2)+
		CMP.L	#___RTEXT_END,A2
        BLT     _Copy_Main_Code

_Jmp_To_Main:
		MOVE.W  #$2000,SR
		MOVE.L  #___RTEXT_START, A0
		JMP		(A0)
		
;	// Send DRAM Error message
_DRAM_Error:
		MOVE.L	#_Test_Dram_Failed_Msg,A0
		JSR		_BOOT_Send_Msg
		JMP		_WAIT_INPUT

;	// Send ISRAM Error message
_ISRAM_Error:
		MOVE.L	#_Test_Isram_Failed_Msg,A0
		JSR		_BOOT_Send_Msg
		JMP		_WAIT_INPUT

_LOAD_CTRL_Error:
		MOVE.L	#_Load_Ctrl_Failed_Msg,A0
		JSR		_BOOT_Send_Msg

;	// HOW TO DEAL WITH WATCHDOG
_WAIT_INPUT:
		HALT
		JMP		_WAIT_INPUT
; end
; Version Message
	ALIGN	4
	XDEF	_BOOT_Version_Msg
_BOOT_Version_Msg:
;		ASCII	"\r\n\r\nSTAR NETWORKS TECHNOLOGY CO.,LTD."
		ASCII	"\r\n\r\n"
;		ASCII	"Boot Version 01-03-03.\r\n"
		ASCII	"Boot Running... \r\n\0"
		DC.L	0
;	XDEF	_MAC_Address_Msg
;_MAC_Address_Msg:
;		ASCII	"Base ethernet MAC Address: \0"
	XDEF	_Test_Dram_Passed_Msg
_Test_Dram_Passed_Msg:
		ASCII	"\r\nDRAM   Test: Passed\r\n\0"
	XDEF	_Test_Dram_Failed_Msg
_Test_Dram_Failed_Msg:
		ASCII	"\r\nDRAM   Test: Failed\r\n\0"
	XDEF	_Test_Isram_Passed_Msg
_Test_Isram_Passed_Msg:
		ASCII	"ISRAM  Test: Passed\r\n\0"
	XDEF	_Test_Isram_Failed_Msg
_Test_Isram_Failed_Msg:
		ASCII	"ISRAM  Test: Failed\r\n\0"
	XDEF	_Check_Ctrl_Passed_Msg
_Check_Ctrl_Passed_Msg:
		ASCII	"CTRL   Test: Passed\r\n\0"
	XDEF	_Check_Ctrl_Failed_Msg
_Check_Ctrl_Failed_Msg:
		ASCII	"\r\nCTRL   Test: Failed\r\n\0"
	XDEF	_Load_Ctrl_Msg
_Load_Ctrl_Msg:
		ASCII	"\r\nLoading Ctrl software...\r\n\0"
	XDEF	_Load_Ctrl_Passed_Msg
_Load_Ctrl_Passed_Msg:
		ASCII	"Load Ctrl software: Passed\r\n\0"
		
	XDEF	_Load_Ctrl_Failed_Msg:
_Load_Ctrl_Failed_Msg:
		ASCII	"Load Ctrl software: Failed\r\n\0"
	XDEF	_BOOT_Passed_Msg
_BOOT_Passed_Msg:
		ASCII	"\r\nBOOT Passed!\r\n"
		ASCII	"\r\nCTRL Running...\r\n\0"

	XDEF	_Enter_Msg
_Enter_Msg:
		ASCII	"\r\n\0"

; ctoa function
; d1 used
	ALIGN	4
;	XDEF	_BOOT_ctoa
;_BOOT_ctoa:
;		CMP.L	#9,D1
;		BLE		_BOOT_ctoa_0_9
;_BOOT_ctoa_a_f:
;		SUB.L	#10,D1
;		ADD.L	#'a',D1
;		RTS
;_BOOT_ctoa_0_9:
;		ADD.L	#'0',D1
;		RTS

;Send_Msg function
;A0 - Msg 
	ALIGN	4
	XDEF	_BOOT_Send_Msg
_BOOT_Send_Msg:
		MOVE.L	#0,D1
_BOOT_Send_Msg_Loop:
		MOVE.B	(A0)+,D1
		CMP.L	#0,D1
		BEQ		_BOOT_Send_Msg_End
		JSR		_UART_Put_Char2
		JMP		_BOOT_Send_Msg_Loop
_BOOT_Send_Msg_End:
		RTS
;----------------------------------------------------------------
; UART_Get_Char()接收数据
; D0 :0成功 1失败
; D1 :接收数据
	ALIGN	4
	XDEF	_UART_Get_Char2
_UART_Get_Char2:
; {
;		wait for 1s
		MOVE.L	#6000000,D2
; 
;     /* Process every character in the receive FIFO */
;     while ((READ_USR() & USR_RXRDY)==0);
;	need clocks = 3+1+1+1+1 = 7 clocks = 7*25ns = 175ns
_UART_Get_Char_Loop:
		MOVE.B	(MBAR_ADDR+$184),D0		;3 clocks
		BTST	#0,D0
		JNE		_UART_Get_Char_1
		SUBQ.L	#1,D2
		BNE		_UART_Get_Char_Loop
		MOVE.L	#1,D0
		JMP		UART_RETURN
_UART_Get_Char_1:		
;         /* Put char into buffer */
;         receive = READ_URB();
;		  return 0;
		MOVE.B	(MBAR_ADDR+$18C),D1
		MOVEQ.L	#0,D0
UART_RETURN:
		RTS
;-------------------------------------------------------------------		
		

;函数test_dram()用来检测DRAM地址空间数据的正确性。
;Note : 改以line为单位检测,防止由于数据线上的数据维持影响检测的正确性。
;		同时可以检测RAM的burst性能。
	ALIGN	4
	XDEF	_test_dram
_test_dram:

		MOVE.L	#$0, A0						; start_addr
		MOVE.L	#$400000, D5				; length

TEST_DRAM_LOOP:

; Save A0
		MOVE.L	A0,A1

; Burst read a line 
		MOVEM.L	(A0),A2-A5

; Test RAM read/write
		MOVE.L	#$55555555,D0
		MOVE.L	#$AAAAAAAA,D1
		MOVE.L	#$33333333,D2
		MOVE.L	#$CCCCCCCC,D3

; Burst write a line
		MOVEM.L	D0-D3,(A0)

; Single read lwords ,check Burst write
		MOVE.L	(A1)+,D4
		CMP.L	D4,D0
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D1
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D2
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D3
		BNE		TEST_DRAM_ERR

		MOVE.L	A0,A1

; Burst read a line
		MOVEM.L	(A0),D0-D3

; Not all bits
		NOT.L	D0
		NOT.L	D1
		NOT.L	D2
		NOT.L	D3

; Write again
		MOVEM.L	D0-D3,(A0)

; Check again
		MOVE.L	(A1)+,D4
		CMP.L	D4,D0
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D1
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D2
		BNE		TEST_DRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D3
		BNE		TEST_DRAM_ERR

; Restore D0-D3
		MOVEM.L	A2-A5,(A0)

; Pointer to next line
		MOVE.L	A1,A0
		SUB.L	#16,D5
        BNE		TEST_DRAM_LOOP

;TEST_DRAM_OK:
        move.l  #0, D0						;return 0
        RTS
TEST_DRAM_ERR:
        move.l  #-1, D0						;return -1
        RTS

;函数test_isram()用来检测ISRAM地址空间数据的正确性。
	ALIGN	4
	XDEF	_test_isram
_test_isram:

		MOVE.L	#ISRAM_ADDR, A0			; start_addr
		MOVE.L	#ISRAM_LEN, D5				; length


TEST_ISRAM_LOOP:

; Save A0
		MOVE.L	A0,A1

; Burst read a line 
		MOVEM.L	(A0),A2-A5

; Test RAM read/write
		MOVE.L	#$55555555,D0
		MOVE.L	#$AAAAAAAA,D1
		MOVE.L	#$33333333,D2
		MOVE.L	#$CCCCCCCC,D3

; Burst write a line
		MOVEM.L	D0-D3,(A0)

; Single read lwords ,check Burst write
		MOVE.L	(A1)+,D4
		CMP.L	D4,D0
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D1
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D2
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D3
		BNE		TEST_ISRAM_ERR

		MOVE.L	A0,A1

; Burst read a line
		MOVEM.L	(A0),D0-D3

; Not all bits
		NOT.L	D0
		NOT.L	D1
		NOT.L	D2
		NOT.L	D3

; Write again
		MOVEM.L	D0-D3,(A0)

; Check again
		MOVE.L	(A1)+,D4
		CMP.L	D4,D0
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D1
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D2
		BNE		TEST_ISRAM_ERR
		MOVE.L	(A1)+,D4
		CMP.L	D4,D3
		BNE		TEST_ISRAM_ERR

; Restore D0-D3
		MOVEM.L	A2-A5,(A0)

; Pointer to next line
		MOVE.L	A1,A0
		SUB.L	#16,D5
        BNE		TEST_ISRAM_LOOP

;TEST_ISRAM_OK:
        move.l  #0, D0						;return 0
        RTS
TEST_ISRAM_ERR:
        move.l  #-1, D0						;return -1
        RTS

;Init_Uart()初始化UART2

	ALIGN	4
	XDEF	_Init_UART
_Init_UART:
		MOVE.L	#$20,D0
		MOVE.b	D0,(MBAR_ADDR+$188)			;Reset the receiver
		MOVE.L	#$30,D0
		MOVE.b	D0,(MBAR_ADDR+$188)			;Reset the transmitter
		MOVE.L	#$10,D0
		MOVE.b	D0,(MBAR_ADDR+$188)			;Point to UMR1 register
		MOVE.L	#$13,D0
		MOVE.b	D0,(MBAR_ADDR+$180)			;No parity,  8 bits/char
		MOVE.L	#$7,D0
		MOVE.b	D0,(MBAR_ADDR+$180)			;1 stop bit
		MOVE.L	#$DD,D0
		MOVE.b	D0,(MBAR_ADDR+$184)			;Setup system clock as time source
		MOVE.L	#$0,D0
		MOVE.b	D0,(MBAR_ADDR+$198)
		;MOVE.L	#$1B,D0						; 0X15 - 40M  ,0X1B - 50M
		MOVE.L	#$15,D0
		MOVE.b	D0,(MBAR_ADDR+$19C)			;set baud-rate --> 57600(40M)
		MOVE.L	#$0,D0
		MOVE.b	D0,(MBAR_ADDR+$194)			;Disable all interrupts.
		MOVE.L	#$04,D0
		MOVE.b	D0,(MBAR_ADDR+$188)			;Enable Tx
;------------------------------------------------------------
		MOVE.L	#$01,D0
		MOVE.b	D0,(MBAR_ADDR+$188)			;Enable Rx
;------------------------------------------------------------
		RTS


; VOID  UART_Put_Char(UNSIGNED_CHAR ch)发送数据
; D1: Send Data
	ALIGN	4
	XDEF	_UART_Put_Char2
_UART_Put_Char2:
; {
; 
;     /* Wait until the transmitter buffer is empty */
;     while (!(READ_USR() & USR_TXRDY));
		MOVE.B	(MBAR_ADDR+$184),D0
		AND.L	#4,D0
		TST.L	D0
		JEQ		_UART_Put_Char2
; 
;     /* Transmit the character */
;     SET_UTB(ch);
		MOVE.B	D1,(MBAR_ADDR+$18C)
; 
; }
		RTS


; }

_DELAY:
	SUBQ.L	#1,D0
    BNE		_DELAY
	rts

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -