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

📄 boot_flashs.s

📁 Sunplus 8202S source code.
💻 S
字号:
#include "regdef.h"
#include "regmapa.h"
#include "config.h"
#include "user_init.h"

#ifdef SPHE1000
#define STATUS_ENDIAN_LITTLE    (0<<25)
#define STATUS_SETUP            STATUS_COP0|STATUS_ENDIAN_LITTLE|STATUS_BEV
#endif //#ifdef SPHE1000

.text
		.global init_gp_sp
		.extern	s_gp
		.extern	_gp

		.global	_cpu_set_intr_mask
		.global	_cpu_get_intr_mask
		.global	_cpu_intr_config
		.global	_cpu_intr_enable
		.global	_cpu_intr_disable
		.global	_cpu_invalidate_dcache

		.global	_cpu_get_status
		.global	_cpu_get_cause
		.global	_cpu_get_epc
		.global	_cpu_get_badva

.text
		.ent	init_gp_sp

init_gp_sp:

#ifdef SPHE1000
                // ENABLE COP0/3
                mfc0    t1, C0_STATUS
                li      t0, STATUS_SETUP
				//or      t1, t0
                mtc0    t0, C0_STATUS
                nop
                nop
                nop
#endif //#ifdef SPHE1000


		// setup register-file pointer
		li		s6, RGST_OFFSET

		la		sp, _stkptr         		    // set up stack pointer

		//lw		gp, s_gp						// set up GP
		la		gp, _gp						// set up GP

		j		boot_flash_main

		.end	init_gp_sp          


/*
** FUNCTION
** UINT32	cpu_set_intr_mask(UINT32 mask[7:0]);
**
** DESCRIPTION
** set r3k CP0 interrupt mask, 1 to enable.
*/
		.ent	_cpu_set_intr_mask
_cpu_set_intr_mask:
                mfc0    t0, C0_STATUS		/* get STATUS[31:0] in t0	*/
		andi	a0, 0x00ff		/* clip a0 (new mask)		*/
		sll	a0, 8			/* {IM[7:0], 8'b0}		*/
		andi	t1, t0, 0xff00		/* get current IM in t1		*/
		xor	t0, t1			/* toggle mask bits for t0	*/
		or	t0, a0			/* insert new intr_mask to t0	*/
                mtc0    t0, C0_STATUS		/* write to STATUS		*/
		srl	v0, t1, 8		/* return last IM		*/
		jr	ra
		.end	_cpu_set_intr_mask

/*
** FUNCION
** UINT32	cpu_get_intr_mask(void);
**
** DESCRIPTION
** get r3k CP0 interrupt mask, 1:enabled, 0:disabled
*/
		.ent	_cpu_get_intr_mask
_cpu_get_intr_mask:
		mfc0	v0, C0_STATUS
		srl	v0, 8
		andi	v0, 0x00ff
		jr	ra
		.end	_cpu_get_intr_mask


/*
** FUNCION
** void		cpu_intr_disable(void);
**
** DESCRIPTION
** disable R3000 interrupt (globally)
*/
		.ent	_cpu_intr_config
_cpu_intr_config:
		beqz	a0, _cpu_intr_disable
		/* fall thru if 1 */
/*
** FUNCION
** int		cpu_intr_enable(void);
**
** DESCRIPTIN
** enable R3000 interrupt (globally) 
*/
_cpu_intr_enable:
		mfc0	v0, C0_STATUS
		ori	a0, v0, STATUS_IEc		/* enable STATUS_IEc	*/
_cpu_intr_status_set:
		mtc0	a0, C0_STATUS
		andi	v0, 1				/* get last status	*/
		jr	ra


/*
** FUNCION
** int		cpu_intr_disable(void);
**
** DESCRIPTION
** disable R3000 interrupt (globally)
*/
_cpu_intr_disable:
		mfc0	v0, C0_STATUS
		li	a0, ~STATUS_IEc
		and	a0, v0
		b	_cpu_intr_status_set
		.end	_cpu_intr_config


/*
** FUNCTION
** void		cpu_invalidate_dcache
**
** DESCRIPTION
** invalidate data cache
*/
		.global	_cpu_invalidate_dcache
		.ent	_cpu_invalidate_dcache
_cpu_invalidate_dcache:
		//
		// invalidate/reset cache
		//
		.set	noreorder
		mtc0	zero, C0_CCTL		//
		li	v0, CCTL_DIvl		// 0 to 1 transition
		mtc0	v0, C0_CCTL		//
		mtc0	zero, C0_CCTL		//
		.set	reorder
		nop
		nop
		nop
		nop
		jr 	ra
		.end	_cpu_invalidate_dcache


/*
** cpu_get_status
*/
_cpu_get_status:
		mfc0	v0, C0_STATUS
		jr	ra

/*
** cpu_get_cause
*/
_cpu_get_cause:
		mfc0	v0, C0_CAUSE
		jr	ra

/*
** cpu_get_epc
*/
_cpu_get_epc:
		mfc0	v0, C0_EPC
		jr	ra

/*
** cpu_get_badva
*/
_cpu_get_badva:
		mfc0	v0, C0_BADVA
		jr	ra

⌨️ 快捷键说明

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