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

📄 rotating_speaker.asm

📁 adsp21065例程代码 音频处理及其他 adsp2XXX源代码 在Vdsp++下应用
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	/* test current sine value to pan left or right, if + then pan left, if - then pan right */
    r4 = pass r4;     					
	IF LE JUMP (pc, pan_right_channel);

pan_left_channel:
	/* write tremolo result sample to left/right output channels */
	DM(Left_Channel_Out) = r5;
	r6 = 0x00000000;
	DM(Right_Channel_Out) = r6;
	JUMP (pc, tremolo_done);

pan_right_channel:
	/* write tremolo result sample to left/right output channels */
	r6 = 0x00000000;
	DM(Left_Channel_Out) = r6;
	DM(Right_Channel_Out) = r5;

tremolo_done:	
	rts;


/* ------------------------------------------------------------------------------------ */

mono_tremolo_effect:
	/* get generated sine value from wavetable generator, where r4 = sin(2*pi*fc*t)  */  
	r4 = dm(sine_value);
    r5 = r0 * r4 (SSFR);

	/* write tremolo result sample to left/right output channels */
   	dm(Left_Channel_Out)  = r5;       		/* left output sample */
   	dm(Right_Channel_Out) = r5;	     		/* right output sample */
	
	RTS;


/* ------------------------------------------------------------------------------------ */
/*                                                                                      */
/* 			           IRQ1 Pushbutton Interrupt Service Routine                        */
/*                                                                                      */
/* 		This routine allows the user to modify tremolo rate with 5 presets.  		    */
/*                                                                                      */
/*      Default before 1st IRQ push:                                                    */
/*      1st Pushbutton Press:                                                           */
/*      2nd Pushbutton Press:                                                           */
/*      3rd Pushbutton Press:                                                           */
/*      4th Pushbutton Press:                                                           */
/*      5th Pushbutton Press:                                                           */
/*      6th Pushbutton Press:	Reverts back to 1st Pushbutton Press                    */
/*                                                                                      */
/*      The pushbutton setting is shown by the active LED setting, all others are off	*/	
/* ------------------------------------------------------------------------------------ */
						  
change_speaker_rotate_rate:
    bit set mode1 SRRFH;				/* enable background register file */
	NOP; 								/* 1 CYCLE LATENCY FOR WRITING TO MODE1 REGISER!!   */

	r13 = 6;							/* number of presets */	
	r15 = DM(IRQ1_counter);				/* get preset count */
	r15 = r15 + 1;						/* increment preset */
	comp (r15, r13);
	if ge r15 = r15 - r15;				/* reset to zero */
	DM(IRQ1_counter) = r15;				/* save preset count */

	r10 = pass r15;						/* get preset mode */
	if eq jump rate_setting_2;			/* check for count == 0 */
	r10 = r10 - 1;
	if eq jump rate_setting_3; 			/* check for count == 1 */
	r10 = r10 - 1;
	if eq jump rate_setting_4;			/* check for count == 3 */
	r10 = r10 - 1;
	if eq jump rate_setting_5;			/* check for count == 4 */

rate_setting_1:							/* count therefore, is == 5 if you are here */			
	r14 = 12;		DM(modulation_rate) = r14;
	r14 = 1;		DM(sin_inc) = r14;
	r14 = -2;		DM(pitch_bend) = r14;
	bit set ustat1 0x3D;				/* turn on Flag5 LED */
	bit clr ustat1 0x02;
	dm(IOSTAT)=ustat1;		
    jump done;

rate_setting_2:		
	r14 = 6;		DM(modulation_rate) = r14;
	r14 = 1;		DM(sin_inc) = r14;
	r14 = -3;		DM(pitch_bend) = r14;
	bit set ustat1 0x3B;				/* turn on Flag6 LED */
	bit clr ustat1 0x04;
	dm(IOSTAT)=ustat1;
	jump done;

rate_setting_3:			
	r14 = 3;		DM(modulation_rate) = r14;
	r14 = 1;		DM(sin_inc) = r14;
	r14 = -5;		DM(pitch_bend) = r14;
	bit set ustat1 0x37;				/* turn on Flag7 LED */
	bit clr ustat1 0x08;
	dm(IOSTAT)=ustat1;
	jump done;

rate_setting_4:			
	r14 = 2;		DM(modulation_rate) = r14;
	r14 = 1;		DM(sin_inc) = r14;
	r14 = -5;		DM(pitch_bend) = r14;
	bit set ustat1 0x2F;				/* turn on Flag8 LED */
	bit clr ustat1 0x10;
	dm(IOSTAT)=ustat1;
	jump done;

rate_setting_5:			
	r14 = 1;		DM(modulation_rate) = r14;
	r14 = 1;		DM(sin_inc) = r14;
	r14 = -6;		DM(pitch_bend) = r14;
	bit set ustat1 0x1F;				/* turn on Flag9 LED */
	bit clr ustat1 0x20;
	dm(IOSTAT)=ustat1;

done:	
	rti(db);
	bit clr mode1 SRRFH;				/* switch back to primary register set */
	nop;
	
/* ------------------------------------------------------------------------------------ */
/*                                                                                      */
/*                        IRQ2 Pushbutton Interrupt Service Routine                     */
/*                                                                                      */
/*      This routine selects between mono or stereo tremolo, and the info is passed to 	*/
/*      the SPORT0 rx ISR.                                                              */
/*                                                                                      */
/*      The pushbutton setting is shown by the FLAG4 LED.                               */
/* ------------------------------------------------------------------------------------ */
						  
select_tremolo_effect:
    bit set mode1 SRRFH;				/* enable background register file */
	NOP; 								/* 1 CYCLE LATENCY FOR WRITING TO MODE1 REGISER!!   */

	r13 = 2;							/* number of presets */	
	r15 = DM(IRQ2_counter);				/* get preset count */
	r15 = r15 + 1;						/* increment preset */
	comp (r15, r13);
	if ge r15 = r15 - r15;				/* reset to zero */
	DM(IRQ2_counter) = r15;				/* save preset count */

	r10 = pass r15;						/* get preset mode */
	if eq jump select_stereo;			/* check for count == 0 */

select_mono:							/* count therefore, is == 1 if you are here */
	r14 = 0x00000000;	
	DM(Effect_Ctrl) = r14;			
	bit clr ustat1 0x01;				/* turn on Flag4 LED */
	dm(IOSTAT)=ustat1;
    jump exit;

select_stereo:
	r14 = 0x00000001;	
	DM(Effect_Ctrl) = r14;				
	bit set ustat1 0x01;				/* turn off Flag4 LED */
	dm(IOSTAT)=ustat1;		

exit:	
	rti(db);
	bit clr mode1 SRRFH;				/* switch back to primary register set */
	nop;

.endseg;









⌨️ 快捷键说明

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