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

📄 cpt_generator.s

📁 zigbee 飞思卡尔 音频传输 基于ucos的所有源码
💻 S
字号:
	.global _CPT_Generator
	.extern _TONES_TAB
//	.extern TONES_TAB
	.extern _offset_dial
	.extern _offset_ringback
	.extern _offset_busy_reorder
	.text
	
_CPT_Generator:
	lea -48(a7), a7
	movem.l d1-d6/a0-a5, (a7)
	
	move.l 52(a7), d1      //index

cmp_0:
	cmpi.l #0, d1			//judge if it is dial tone
	bne cmp_1
	lea _offset_dial, a0
	bra tone_judge
cmp_1:
	cmpi.l #1, d1			//judge if it is ringback tone
	bne cmp_2
	lea _offset_ringback, a0
	bra tone_judge
cmp_2:						//it is busy tone or reorder tone
	lea _offset_busy_reorder, a0

tone_judge:
	move.l #0xA0, macsr
	move.l #0, acc
	move.l 56(a7), a4     
	move.l (a4), d1            //burst_duration
	cmpi.l #0, d1
	beq silence_judge
	subi.l #1,d1
	move.l d1, (a4)
	
	bra tone_generation
silence_judge:
	move.l 60(a7), a4
	move.l (a4), d1           //silent_duration
	subi.l #1,d1
	move.l d1, (a4)
	bra silence_generation


tone_generation:
	lea _TONES_TAB, a1
	
low_tone:	
	move.w 10(a0), d1		//d1 contains the offset of 
							//low frequency in _TONES_TAB
	ext.l d1
	move.l a1, a2
	add.l d1, a2
	move.l (a2)+, d2                //d2 contains coswt
	move.l (a2), d3                 //d3 contains y[n-1]
	move.l 4(a2), d4                //d4 contains y[n-2]
	mac.l d3, d2, acc              //calculate coswt*y[n-1]
	move.l acc, d5
	move.l #0, acc
	move.l (a2)+, (a2)              //store y[n-1] in y[n-2]
	asr.l #1, d4					//d4=1/2y[n-2]
	sub.l d4, d5					//d5=coswt*y[n-1]-1/2y[n-2]
	asl.l #1, d5					//d5=2coswt*y[n-1]-y[n-2]
	move.l d5, -(a2) 
	
high_tone:
	move.w 12(a0), d1		//d1 contains the offset of 
							//high frequency in _TONES_TAB
	ext.l d1
	move.l a1, a2
	add.l d1, a2
	move.l (a2)+, d2                //d2 contains coswt
	move.l (a2), d3                 //d3 contains y[n-1]
	move.l 4(a2), d4                //d4 contains y[n-2]
	mac.l d3, d2, acc              //calculate coswt*y[n-1]
	move.l acc, d6
	move.l #0, acc
	move.l (a2)+, (a2)              //store y[n-1] in y[n-2]
	asr.l #1, d4					//d4=1/2y[n-2]
	sub.l d4, d6					//d6=coswt*y[n-1]-1/2y[n-2]
	asl.l #1, d6					//d6=2coswt*y[n-1]-y[n-2]
	move.l d6, -(a2) 

add_twotones:
	add.l d5, d6
	swap.w d6
	ext.l d6
	move.l d6, d0
	bra restore

silence_generation:
	nop
	nop
	nop								//add 3 nop instruction
	move.l #0, d0				//to possess cpu clock

restore:
	movem.l (a7), d1-d6/a0-a5
	lea 48(a7), a7


	rts

⌨️ 快捷键说明

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