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

📄 5-1.asm

📁 《DSP嵌入式系统开发典型案例》此书的源代码
💻 ASM
字号:
   		.mmregs
   		.def 		main
   		.def 		ad50_data 
spsa0  	.set  	38h   			; 缓冲串口0子地址地址寄存器
spcd0  	.set  	39h  			; 缓冲串口0子地址数据寄存器
dxr10  	.set  	23h   			; 缓冲串口0数据1发送寄存器
drr10  	.set  	21h  			; 缓冲串口0数据1接收寄存器

spcr10  	.set 		00h				; 设置缓冲串口0的所有寄存器的子地址
spcr20  	.set 		01h
rcr10   	.set 		02h
rcr20   	.set 		03h
xcr10   	.set 		04h
xcr20   	.set 		05h
srgr10  	.set 		06h
srgr20  	.set 		07h
mcr10  	.set 		08h
mcr20  	.set 		09h
rcera0  	.set 		0ah
rcerb0  	.set 		0bh
xcera0  	.set 		0ch
xcerb0  	.set 		0dh
pcr0    	.set 		0eh   
     	 
k_iptr  	.set 		000111000b<<07	; 设置中断向量表的地址,指向0x1C00
k_temp  	.set 		1111111b    
data_dp   .usect "filter_vars",0         
   
main:
   STM  		4000h,sp				; 设置堆栈指针
   LD   		#0h,dp				; 设置数据页指针

   LDM     	pmst,a				; 改变中断向量表首地址
   AND     	#k_temp,a
   OR      	#k_iptr,a
   STL     	a,ar6
   MVDM   	ar6,pmst
   NOP
   NOP
   NOP
   STM     	#0ffffh,tcr				; 关闭定时器
   STM     	#05h,prd				; 设置定时器周期寄存器
   STM     	#08e0h,tcr				; 设置定时器控制寄存器

   SSBX    	intm					; 关闭中断
   SSBX    	sxm
   ST      	#2491h,swwsr			; 设置外设等待时间寄存器
   NOP
   NOP
   NOP
   SSBX    	xf					; 设置XF引脚为高
   NOP							; 等待硬件完成高电平检测
   NOP
   NOP
   NOP
dss_init:							; 设置DSP的缓冲串口0的所有寄存器
   RSBX    cpl 
   NOP
   NOP
   STM     spcr10,spsa0
   NOP
   STM     06h,spcd0 
   NOP
   STM     spcr20,spsa0
   NOP
   STM     200h,spcd0 
   NOP
   STM     pcr0,spsa0
   NOP
   STM     0eh,spcd0 
   NOP
   STM     rcr10,spsa0
   NOP
   STM     40h,spcd0
   NOP
   STM     rcr20,spsa0
   NOP
   STM     4h,spcd0
   NOP
   STM     xcr10,spsa0
   NOP
   STM     40h,spcd0
   NOP
   STM     xcr20,spsa0
   NOP
   STM     4h,spcd0
   NOP
   
   LD      #64h,a
   RPT     #50
   NOP
   
   STM     spcr10,spsa0
   NOP
   STM     07h,spcd0
   NOP
   STM     spcr20,spsa0
   NOP
   STM     201h,spcd0				; 打开缓冲串口0
   NOP
   RPT     #50
   NOP

aic_init:							; 初始化AD50
   STM    	0h,imr				; 设置中断寄存器
   ORM    	10h,imr
   STM     	0ffffh,ifr				; 清上电复位可能影响的中断使能
   PORTW  	08h,02h
   NOP
   NOP
   NOP
   CALL    	wait					; 延时一段时间,等待AD初始化
waitr$14$:
   STM     	0h,spsa0
   NOP
   LDM     	spcd0,a
   NOP
   NOP
   NOP
   AND    	#2h,0,a,a			
   BC     	waitr$14$,aeq			; 判断是否可以写数据到AD50
   STM    	#101h,dxr10     		; 设置AD50的控制寄存器1
   CALL    	wait   
   STM     	0ffffh,ifr

waitr$17$:					
   STM   	0h,spsa0
   NOP
   LDM    	spcd0,a 
   NOP
   NOP
   NOP
   AND    	#2h,0,a,a
   BC     	waitr$17$,aeq			; 判断是否可以写数据到AD50
   STM    	#210h,dxr10			; 设置AD50的控制寄存器2
   CALL    	wait
   STM    	0ffffh,ifr

waitr$22$:					
   STM    	0h,spsa0
   NOP
   LDM    	spcd0,a 
   NOP
   NOP
   NOP
   AND   	#2h,0,a,a
   BC    	waitr$22$,aeq			; 判断是否可以写数据到AD50
   STM    	#430h,dxr10      		; 设置20kHz采样频率
   STM    	#440h,dxr10      		; 设置15kHz采样频率
   STM    	#400h,dxr10       		; 设置8kHz采样频率;设置AD50的控制寄存器4
   CALL    	wait
   STM     	0ffffh,ifr

waitr$24$:				
   STM    	0h,spsa0
   NOP
   LDM    	spcd0,a 
   NOP
   NOP
   NOP
   AND   	#2h,0,a,a
   BC     	waitr$24$,aeq   		; 判断是否可以写数据到AD50
   STM    	#301h,dxr10			; 设置AD50的控制寄存器3
   CALL    	wait 

   STM    	#1,ar0
   NOP
   STM  		0ffffh,ifr
   NOP
   RSBX    	xf
   NOP   
   NOP
   NOP
   LDM   	drr10,a				; 清空缓冲串口的数据接收寄存器
   NOP							; 避免读入可能复位影响的接收数据
   STM     	0h,imr
   ORM     	10h,imr				; 设置中断标志寄存器
   NOP
   NOP 
   RSBX   	intm					; 打开总中断
wait_data:                        		; 主程序,空操作,等待采样数据到来
   NOP
   NOP
   NOP
   NOP
   B     	wait_data
   NOP
   NOP
   NOP
   
wait:                       			; 延时子程序
   RPT    	#8048				; 可以通过重复指令来改变延时的时间
   NOP
   NOP
   NOP
   RET  							; 延时子程序返回
   NOP
   NOP
   NOP   
   
ad50_data:     						; AD50数据接收中断服务程序,读取AD的数据
   LDM   	drr10,a      			; 将缓冲串口要输入到数据寄存器的内容转送到累加器a中
   CALL  	signal_processing		; 调用信号处理子程序
   NOP
   NOP 
   NOP
   RETE							; 中断返回
   NOP
   NOP
   STL    	a,dxr10				; 数据从累加器a中输出到AD50
   NOP 
   NOP
   
signal_processing					; 语音信号处理子程序
   NOP							; 在此可以加入语音信号处理
   RET 							; 语音信号处理子程序返回

⌨️ 快捷键说明

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