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

📄 reset.s

📁 uCOS-II ports on Tensilica HiFi330 core.
💻 S
字号:
/* reset.S -- Reset Vector * * This code is taken from example code in the Xtensa Microprocessor * Programmer's Guide. * * WARNING:  It is highly unlikely that this code works as is on your *	particular Xtensa processor configuration.  It is hardcoded *	for the specific processor configuration used for the *	examples in the Xtensa Microprocessor Programmer's Guide. *	(The example code did not use the Xtensa HAL to address this *	portability issue, for clarity's sake.)  Getting it to work *	on another processor configuration requires some modifications. *//* * Copyright (c) 2003-2005 by Tensilica Inc.  ALL RIGHTS RESERVED. * These coded instructions, statements, and computer programs are the * copyrighted works and confidential proprietary information of Tensilica Inc. * They may not be modified, copied, reproduced, distributed, or disclosed to * third parties in any manner, medium, or form, in whole or in part, without * the prior written consent of Tensilica Inc. */#include <xtensa/coreasm.h>#include <xtensa/simcall.h>	.global _ResetVector	.section        .ResetVector.text, "ax"	.align  4_ResetVector:	j       Reset           // jump around literal pool	.literal_position  // tells assembler place literals here	.align  4Reset:	movi    a0, 0	wsr     a0, INTENABLE    wsr     a0, IBREAKA_0    wsr     a0, IBREAKA_1    wsr     a0, DBREAKA_0    wsr     a0, DBREAKA_1    	wsr     a0, DBREAKC_0	wsr     a0, DBREAKC_1    wsr     a0, IBREAKENABLE        wsr     a0, ICOUNT	wsr     a0, ICOUNTLEVEL	isync	rsil    a1, XCHAL_DEBUGLEVEL - 1	wsr     a0, CCOUNT	wsr     a0, WINDOWBASE	rsync	movi    a1, 1	wsr     a1, WINDOWSTART	ssai    0   //Level-1 interrupt	wsr     a0, EXCSAVE_1	wsr     a0, EPC_1	wsr     a0, EXCCAUSE    //Medium priority interrupts	wsr     a0, EPC_2	wsr     a0, EPS_2	wsr     a0, EXCSAVE_2	wsr     a0, EPC_3	wsr     a0, EPS_3	wsr     a0, EXCSAVE_3    //High priority interrupts	wsr     a0, EPC_4	wsr     a0, EPS_4	wsr     a0, EXCSAVE_4	wsr     a0, EPC_5       	wsr     a0, EPS_5	wsr     a0, EXCSAVE_5		//Debug EPC, EPS and EXCSAVE    wsr     a0, EPC_6       	wsr     a0, EPS_6	wsr     a0, EXCSAVE_6		//NMI EPC, EPS and EXCSAVE	wsr     a0, EPC_7       	wsr     a0, EPS_7	wsr     a0, EXCSAVE_7		//3 timers	wsr     a0, CCOMPARE_0	wsr     a0, CCOMPARE_1	wsr     a0, CCOMPARE_2	movi    a2, XCHAL_INTTYPE_MASK_EXTERN_EDGE | XCHAL_INTTYPE_MASK_SOFTWARE	wsr     a2, INTCLEAR#if XCHAL_HAVE_CP	wsr     a0, BR	wsr     a0, CPENABLE#endif	movi    a2, XCHAL_DEBUGLEVEL - 1	wsr     a2, PS	rsync	movi    a5, 0xE0000000	movi    a4, 2	movi    a3, 0	j       3f2:  sub     a3, a3, a53:  wdtlb   a4, a3	witlb   a4, a3	bne     a3, a5, 2b	isync#if (XCHAL_ICACHE_SIZE != 0)#if (XCHAL_ICACHE_SIZE == 8192)   //212GP and 330HiFi	movi    a2, 64#elif (XCHAL_ICACHE_SIZE == 16384)  //232L and 570T		movi    a2, 128#endif	movi    a3, 0	loop    a2, .L0	iiu     a3, 0	iiu     a3, 32	iiu     a3, 64	iiu     a3, 96	addi    a3, a3, 128.L0:#ifdef PROC_PCC_570T	movi    a2, 64#else	  	movi    a2, 32#endif	movi    a3, 0		loop    a2, .L1	iii     a3, 0     	iii     a3, 32 	iii     a3, 64  	iii     a3, 96 	addi    a3, a3, 128.L1:	isync#endif#if (XCHAL_DCACHE_SIZE != 0)#if (XCHAL_DCACHE_SIZE == 8192)   //212GP and 330HiFi	movi    a2, 64#elif (XCHAL_DCACHE_SIZE == 16384)  //232L and 570T		movi    a2, 128#endif	movi    a3, 0	loop    a2, .L2	diu     a3, 0	diu     a3, 32	diu     a3, 64	diu     a3, 96	addi    a3, a3, 128.L2:#ifdef PROC_PCC_570T	movi    a2, 64#else	  	movi    a2, 32#endif	movi    a3, 0	loop    a2, .L3	dii     a3, 0	dii     a3, 32	dii     a3, 64	dii     a3, 96	addi    a3, a3, 128.L3:	dsync#endif	.macro  set_access_mode am	movi    a4, \am	wdtlb   a4, a3	witlb   a4, a3	.endm	// Turn caches on for regions 0x40000000 and 0x60000000      	  // Disable all accesses for 0, 0x00000000, and 0xE0000000	// Leave all other regions unchanged (i.e bypassed for devices)	movi    a3, 0          	set_access_mode 15		movi    a3, 0x40000000  // ROM	set_access_mode 1		movi    a3, 0x60000000  // RAM	set_access_mode 1	movi    a3, 0xE0000000	set_access_mode 15	movi    a2, _rom_store_table	beqz    a2, unpackdoneunpack:	l32i    a3, a2, 0       // start vaddr	l32i    a4, a2, 4       // end vaddr	l32i    a5, a2, 8       // store vaddr	bltu    a3, a4, unpack1	bnez    a3, unpacknext	bnez    a5, unpacknext	j       unpackdoneunpack1:	l32i    a6, a5, 0	addi    a5, a5, 4	s32i    a6, a3, 0	addi    a3, a3, 4	bltu    a3, a4, unpack1unpacknext:	addi    a2, a2, 12	j       unpackunpackdone:	movi    sp, __stack	movi    a2, PS_WOE_MASK | PS_PROGSTACK_MASK	wsr     a2, PS	rsync#ifdef BSS_SLOW	movi    a8, _bss_start	movi    a10, _bss_end	sub     a11, a10, a8	srli    a11, a11, 2	movi    a9, 0#if XCHAL_HAVE_LOOPS	    loopnez a11, zerodone#else	beqz a11, zerodonebranch_zero:#endif		s32i    a9, a8, 0	addi    a8, a8, 4#if !XCHAL_HAVE_LOOPS    addi    a11, a11, -1    bnez    a11, branch_zero#endif		zerodone:#else	movi    a8, _bss_start	movi    a10, _bss_end	sub     a11, a10, a8	slli    a12, a11, 28	srli    a12, a12, 30	movi    a9, 0#if XCHAL_HAVE_LOOPS		loopnez a12, zerodone_fourbyte#else    beqz    a12, zerodone_fourbytebranch_4byte:    #endif	s32i    a9, a8, 0	addi    a8, a8, 4#if !XCHAL_HAVE_LOOPS    addi    a12, a12, -1    bnez    a12, branch_4byte#endif	zerodone_fourbyte:	srli    a11, a11, 4	#if XCHAL_HAVE_LOOPS			loopnez a11, zerodone_16byte#else    beqz    a11, zerodone_16bytebranch_16byte:	#endif		s32i    a9, a8, 0	s32i    a9, a8, 4	s32i    a9, a8, 8	s32i    a9, a8, 12	addi    a8, a8, 16#if !XCHAL_HAVE_LOOPS    addi    a11, a11, -1    bnez    a11, branch_16byte#endif		zerodone_16byte:#endifcallmain:	movi    a0, 0	movi    a6, 0   // clear argc	movi    a7, 0   // clear argv	movi    a8, 0   // clear envp	movi    a4, main	callx4  a4reset_exit:	movi    a2, SYS_exit	simcall

⌨️ 快捷键说明

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