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

📄 spkintr1.s

📁 The combined demo is dedicated for S1C33L05, so DMT33L05 should be used to load and run the demo. F
💻 S
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////
//////// SpkIntr1.s (input unsigned 16-bit, output unsigned 15bit)
////////
////////	1998 Oct. 29	H.Matsuoka	Ver.0.1
////////	1999 Mar.  9	H.Matsuoka	Ver.0.2
////////	1999 Aug. 24	H.Matsuoka	Ver.0.3  PCM15
////////	1999 Nov. 16	H.Matsuoka	Data unsigned 16bit
////////	2003 Dec. 03	CH.Yoon 	Ver.0.4    port to GNU33
////////	2004 Mar. 10	David.ji	Ver.0.5	   port to L05DMT(SEE)
////////

#include  "slcomm.def"
#include  "slintr.def"

#define TIMER16_ODD_UNDERFLOW	0x40
#define	COMPARE_A16_0			0x00048180
#define COMPARE_A16_1			0x00048188
#define COMPARE_A16_2			0x00048190
#define COMPARE_A16_3			0x00048198
#define COMPARE_A16_4			0x000481a0

#define TIMER16_5_IFLAG 		0x00040284	// 16bit Timer 5 trigar

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// Global Symbols
//////
		.global SpkIntr1

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// SpkIntr 
//////
SpkIntr1:
		pushn	%r3

		xld.w	%r0,SPK_DATA_0		// SPK_DATA_#

		ld.w	%r2,[%r0]			// Read HEAD
		xld.w	%r3,TIMER16_ODD_UNDERFLOW
		xld.w	%r1,TIMER16_5_IFLAG // Int factor flag reg
		ld.b	[%r1],%r3			// clear Int factor flag

		// *** input data : unsigned 16-bit  stereo ***
		// *** output data : unsigned 15-bit  stereo ***

		ld.uh	%r3,[%r2]			
		add 	%r3,0x1 			// Change 16bit to 15bit
		srl 	%r3,7				// Data >>=1 and Data>>=6
		xld.w	%r1,COMPARE_A16_1	// PWM data write reg
		ld.h	[%r1],%r3			// upper 9-bit, Write output data 

		ld.uh	%r3,[%r2]+			
		add 	%r3,0x1 			// Change 16bit to 15bit
		srl 	%r3,0x1 			// Data >>= 1
		xand	%r3,0x3f
		xld.w	%r1,COMPARE_A16_0	// PWM data write reg
		ld.h	[%r1],%r3			// lower 6-bit, Write output data 



		ext 	OFFSET_TAIL 		// read TAIL
		ld.w	%r3,[%r0]
		cmp 	%r2,%r3 			// if (HEAD >= TAIL) Next
		jruge	PacketEnd
		ld.w	[%r0],%r2			// update HEAD
		popn	%r3
		reti

PacketEnd:								  // Next
		popn	%r3
		pushn	%r15
		ld.w	%r0,%ahr
		ld.w	%r1,%alr
		pushn	%r1
		xld.w	%r6,SPK_PARAMS_0		   // SpkParams
		xld.w	%r7,TIMER16_5_IFLAG 	   // IFlagReg
		xld.w	%r8,TIMER16_ODD_UNDERFLOW  // IFlag MaskData
		ld.w	%r9,[%sp+0x12]			   // OldPSR
		xcall	QueueNext
		popn	%r1
		ld.w	%alr,%r1
		ld.w	%ahr,%r0
		popn	%r15
		reti


⌨️ 快捷键说明

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