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

📄 system_func.asm

📁 这是我在ADSP tiger sharc 201上面实现的OFDM(标准是wimax)同步算法哦!具有非常高的指令效率.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
// -------- CACHE 2 INVALIDATE ----------------------------------------------- ////	CCAIR2 = 0x00000000;;        J0 = 0;;          //modified by Frank	CCAIR2 = J0;;     //modified by Frank	CACMD2 = (CACMD_INV | CACMD_NOSTALL | (511 << CACMD_LEN_P));;.align_code 4;_check_invalidate_cache_2:	XR0 = CASTAT2;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_invalidate_cache_2 (NP);;	_check_invalidate_cache_2.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 4 INVALIDATE ----------------------------------------------- ////	CCAIR4 = 0x00000000;;        J0 = 0;;          //modified by Frank	CCAIR4 = J0;;     //modified by Frank	CACMD4 = (CACMD_INV | CACMD_NOSTALL | (511 << CACMD_LEN_P));;.align_code 4;_check_invalidate_cache_4:	XR0 = CASTAT4;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_invalidate_cache_4 (NP);;	_check_invalidate_cache_4.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 6 INVALIDATE ----------------------------------------------- ////	CCAIR6 = 0x00000000;;        J0 = 0;;          //modified by Frank	CCAIR6 = J0;;     //modified by Frank	CACMD6 = (CACMD_INV | CACMD_NOSTALL | (511 << CACMD_LEN_P));;.align_code 4;_check_invalidate_cache_6:	XR0 = CASTAT6;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_invalidate_cache_6 (NP);;	_check_invalidate_cache_6.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 8 INVALIDATE ----------------------------------------------- ////	CCAIR8 = 0x00000000;;        J0 = 0;;          //modified by Frank	CCAIR8 = J0;;     //modified by Frank	CACMD8 = (CACMD_INV | CACMD_NOSTALL | (511 << CACMD_LEN_P));;.align_code 4;_check_invalidate_cache_8:	XR0 = CASTAT8;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_invalidate_cache_8 (NP);;	_check_invalidate_cache_8.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 10 INVALIDATE ---------------------------------------------- ////	CCAIR10 = 0x00000000;;        J0 = 0;;          //modified by Frank	CCAIR10 = J0;;     //modified by Frank	CACMD10 = (CACMD_INV | CACMD_NOSTALL | (511 << CACMD_LEN_P));;.align_code 4;_check_invalidate_cache_10:	XR0 = CASTAT10;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_invalidate_cache_10 (NP);;	_check_invalidate_cache_10.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;.align_code 4;_invalidate_cache.end:// ~~~// ~~~ SET REFRESH// ~~~.align_code 4;_set_refresh:// -------- CACHE 0 REFRESH -------------------------------------------------- //	CACMD0 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_0:	XR0 = CASTAT0;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_0 (NP);;	_check_refresh_cache_0.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 2 REFRESH -------------------------------------------------- //	CACMD2 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_2:	XR0 = CASTAT2;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_2 (NP);;	_check_refresh_cache_2.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 4 REFRESH -------------------------------------------------- //	CACMD4 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_4:	XR0 = CASTAT4;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_4 (NP);;	_check_refresh_cache_4.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 6 REFRESH -------------------------------------------------- //	CACMD6 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_6:	XR0 = CASTAT6;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_6 (NP);;	_check_refresh_cache_6.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 8 REFRESH -------------------------------------------------- //	CACMD8 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_8:	XR0 = CASTAT8;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_8 (NP);;	_check_refresh_cache_8.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 10 REFRESH ------------------------------------------------- //	CACMD10 = (CACMD_REFRESH | REFRESH_RATE);;.align_code 4;_check_refresh_cache_10:	XR0 = CASTAT10;;	XBITEST R0 BY CASTAT_COM_ACTIVE_P;;	IF NXSEQ, JUMP _check_refresh_cache_10 (NP);;	_check_refresh_cache_10.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;.align_code 4;_set_refresh.end:// ~~~// ~~~ RE-ENABLE CACHE// ~~~.align_code 4;_cache_reenable:// -------- CACHE 0 RE-ENABLE ------------------------------------------------ //	CACMD0 = CACMD_EN;;.align_code 4;_check_reenable_cache_0:	XR0 = CASTAT0;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_0 (NP);;	_check_reenable_cache_0.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 2 RE-ENABLE ------------------------------------------------ //	CACMD2 = CACMD_EN;;.align_code 4;_check_reenable_cache_2:	XR0 = CASTAT2;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_2 (NP);;	_check_reenable_cache_2.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 4 RE-ENABLE ------------------------------------------------ //	CACMD4 = CACMD_EN;;.align_code 4;_check_reenable_cache_4:	XR0 = CASTAT4;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_4 (NP);;	_check_reenable_cache_4.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 6 RE-ENABLE ------------------------------------------------ //	CACMD6 = CACMD_EN;;.align_code 4;_check_reenable_cache_6:	XR0 = CASTAT6;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_6 (NP);;	_check_reenable_cache_6.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 8 RE-ENABLE ------------------------------------------------ //	CACMD8 = CACMD_EN;;.align_code 4;_check_reenable_cache_8:	XR0 = CASTAT8;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_8 (NP);;	_check_reenable_cache_8.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;// -------- CACHE 10 RE-ENABLE ----------------------------------------------- //	CACMD10 = CACMD_EN;;.align_code 4;_check_reenable_cache_10:	XR0 = CASTAT10;;	XBITEST R0 BY CASTAT_ENBL_P;;	IF XSEQ, JUMP _check_reenable_cache_10 (NP);;	_check_reenable_cache_10.end:		nop;;	nop;;	nop;;	nop;;	nop;;	nop;;.align_code 4;_cache_reenable.end://// -------- BTB ENABLE ------------------------------------------------------- //.align_code 4;_check_btb_enable:	XR0 = SQSTAT;;	XR0 = SQSTAT;;	XBITEST R0 BY SQSTAT_BTBEN_P;;	IF NXSEQ, JUMP _check_btb_enable.end (NP);;	nop;;	nop;;	nop;;	nop;;	nop;;	nop;;	BTBEN;;.align_code 4;_check_btb_enable.end:			 	// ~~~// ~~~ EPILOGUE RESTORES CJMP, "PRESERVED" REGISTERS, AND FRAME AND STACK POINTER// ~~~ 	CJMP = [J26 + 64];;	YR27:24 = q[K27 + 16];		XR27:24 = q[J27 + 24];;	YR31:28 = q[K27 + 12];		XR31:28 = q[J27 + 20];;	K19:16  = q[K27 + 8 ];		J19:16  = q[J27 + 16];;	K23:20  = q[K27 + 4 ];		J23:20  = q[J27 + 12];;	cjmp (ABS);	J27:24=q[J26+68];	K27:24=q[K26+68];	nop;;.align_code 4;_system_func.end:		// <<    END FUNCTION                                                       << //// <<                                                                       << //// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ///*  fft32.asm	July 2004 PM	This is assembly routine for the Complex radix-2 C-callable FFT on TigerSHARC 	family of DSPs only. It elaborates on complex only inputs. The real case has been excluded	I. Description of Calling.		1. Inputs:			j4 -> input (ping-pong buffer 1)			j5 -> ping-pong buffer 1      		j6 -> ping-pong buffer 2			j7 -> output						//j27+0x18 -> N = Number of points		2. C-Calling Example:			fft32(&(input), &(ping_pong_buffer1), &(ping_pong_buffer2), &(output), N);		3. Limitations:			a. All buffers must be aligned on memory boundary which is a multiple of 4.			b. N must be between 32 and MAX_FFT_SIZE.			c. If memory space savings are required and input does not have to be			   preserved, ping_pong_buffer1 can be the same buffer as input.			d. If memory space savings are required, output can be the same buffer			   as ping_pong_buffer2 if the number of FFT stages is even (i.e. 			   Log2(N) is even) or the same as ping_pong_buffer1 if the number of			   FFT stages is odd (i.e. Log2(N) is odd).		4. MAX_FFT_SIZE can be selected via #define. Larger values allow for more choices		   of N, but its twiddles will occupy more memory.    5. This C - callable function can process up to 64K blocks of data on TS201         (16K blocks on TS101) because C environment itself necessitates memory.         Therefore, if more input points are necessary, assembly language development         may become a must. On TS201, a block of memory is 128K words long, so         maximum N is 64K complex points. TS101 contains only 2 blocks of data memory         of 64K words and 4 buffers must be accommodated.         Therefore, maximum N is 16K complex words.		II. Description of the FFT algorithm.		1. The input data is treated as complex interleaved N-point.		2. Due to re-ordering, no stage can be done in-place.		3. The bit reversal and the first two stages are combined into		   a single loop. This loop takes data from input and stores it		   in the ping-pong buffer1.		4. Each subsequent stage ping-pongs the data between the two ping-pong		   buffers. The last stage uses FFT output buffer for its output.		5. Although the FFT is designed to be called with any point size		   N <= MAX_FFT_SIZE by subsampling the twiddle factors, for ADSP-TS20x		   processors, the best cycle optimization is achieved when MAX_FFT_SIZE=N.		   For ADSP-TS101 all choices of MAX_FFT_SIZE are equally optimal.	III.For all additional details regarding this algorithm and code, see EE-218	    application note, available from the ADI web site.		   *///************************************ Includes **********************************    

⌨️ 快捷键说明

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