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

📄 10-2.asm

📁 《DSP嵌入式系统开发典型案例》此书的源代码
💻 ASM
字号:
            	.def start
            	.def ad
            	.def ad_start
            	.def rpt,timer1
           	.ref ftranform
            	.ref sinx
              
tim1_ctl    	.equ  0x01980000				; 定义定时器控制寄存器地址
tim1_prd    	.equ  0x01980004				; 定义定时器周期寄存器地址
tim1_cnt    	.equ  0x01980008				; 定义定时器重载寄存器地址
ce3ctl      	.equ  0x01800014				; 定义定时ce3空间控制寄存器地址
ce1ctl      	.equ  0x01800004				; 定义定时ce1空间控制寄存器地址
pcr         	.equ  0x018c0024 				; 定义缓冲串口的pcr寄存器地址
pcr1        	.equ  0x01900024 				; 定义缓冲串口的pcr1寄存器地址
            
            	.bss 	 reg,128,0,0				; 在内存中为reg变量申请128个字节
            	.global reg    					; 定义reg变量

            	.sect 	 ".boot"					; 定义名字为boot的用户段
start:
            MVK	 	 ce1ctl,b0				; 设置ce1空间寄存器
            MVKH 	 ce1ctl,b0
            MVKL 	 0ffffff0fh,a0
            MVKH  	 0ffffff0fh,a0
            STW  	 	 a0,*b0
            NOP  	 	 4
            
            MVKL 	 90000400h,b0			; 直接使用ce1空间的地址
            MVKH 	 90000400h,b0			; 将ce1空间地址送到b0和b1
            MVKL 	 400h,b1
            MVKH 	 400h,b1
            MVKL 	 9c00h,b2
            MVKH 	 9c00h,b2
pg:            
            LDB  		*b0++,a0				; 设置ce1空间寄存器
            NOP  		4
            STB  		a0,*b1++
            NOP  		3
            SUB  		b2,4,b2
            NOP  		5
            B     		ad_start				; 跳转到ad_start开始设置ad
            NOP   	5
            
            .text
ad_start::     MVC 		csr,b0				; 设置全局控制寄存器
            AND 		-2,b0,b0
            MVC 		b0,csr     			; 屏蔽所有的可屏蔽中断
            
            MVKL 	0fff0h,b0
            MVKH 	0fff0h,b0
            MVC 	 	b0,icr
            NOP            				; 清除所有的中断标志,避免上电时可能挂起的中断
            
            MVKL 	pcr,a10
            MVKH		pcr,a10				; 设置clkr0引脚为高电平
            MVKL 	3a2ah,b10   			; 使用clkr0引脚复位cpldl
            STW  		b10,*a10
            NOP  		8
            NOP  		4
            
            MVKL  	ce3ctl,a0				; 设置ce3空间控制寄存器
            MVKH  	ce3ctl,a0
            MVKL  	10510222h,a1
            MVKH  	10510222h,a1
            STW   	a1,*a0
            NOP   	4            
            
            MVKL 	8020h,b1				; 设置中断使能寄存器
            MVKH 	8020h,b1            
            MVC 		ier,b0
            OR  		b1,b0,b0
            MVC 		b0,ier    				; 使能中断INT5和INT15
            
            MVC 		ier,b0					; 设置ier寄存器
            MVK 		02h,b1
            OR  		b1,b0,b0
            MVC 		b0,ier     			; 使能所有的可屏蔽中断
           
timer1_init:   MVKL  	tim1_prd, b4			; 设置定时器1的周期寄存器
            MVKH  	tim1_prd, b4
            MVKL   	02F40h, a0
            MVKL   	0F40h, a0
            STW     	a0, *b4
            NOP     	4            			; 定时器1设置成8000*4*clkout时钟周期
            
            MVKL   	00000FF7Eh,a2			; 设置定时器的控制寄存器
            MVKH 	00000FF7Eh,a2
            MVKL 	tim1_ctl, b4
            MVKH 	tim1_ctl, b4
            STW  		a2, *b4
            NOP  		4             		; 关闭定时器1
            
cpld:            							; 开始控制cpld的时钟脉冲
            MVKL 	sinx,b1				; 变量sinx的首地址送到b1寄存器
            MVKH 	sinx,b1
            MVKL 	0b0000004h,a1			; 将外设CPLD的地址存放到a1寄存器
            MVKH 	0b0000004h,a1
            
            MVKL		0ffh,a6
            MVKH 	0ffh,a6
            MVKL 	0Fh,b0
            MVKH		0Fh,b0
ad_init:									; 初始化ad
      [!b0]  B    		ad_end
            NOP  		5
 
            MVKL 	04010000h,a3
            MVKH		 04010000h,a3
            STW  		a3,*a1				; 向a1端口写数据
            NOP  		3
           
            MVKL 	04000000h,a3
            MVKH 	04000000h,a3
            STW  		a3,*a1				; 向a1端口写数据
            NOP  		3               		; 软件复位ad
            
            MVKL		00200000h,a3
            MVKH 	00200000h,a3     		; 正常运行,设置CR0引脚
            STW  		a3,*a1				; 向a1端口写数据
            NOP  		3
            
            MVKL 	06300000h,a3
            MVKH 	06300000h,a3
            STW  		a3,*a1				; 向a1端口写数据
            NOP  		3
            
            SUB  		b0,1,b0
            
            LDW  		*a1,a11				; 从a1端口读数据
            NOP  		3
            MVKL 	0230h,a12
            MVKH 	0230h,a12        		; 读CR1引脚的状态
            
            LDW  		*a1,b11				; 从a1端口读数据
            NOP  		3
            MVKL 	0020h,b12
            MVKH 	0020h,b12       		; 读CR0引脚的状态
            
            SHL  		a11,4,a11
            SHRU 		a11,20,a11
            CMPEQ  	a11,a12,a2				; 判断ad初始化是否成功
     [!a2]   B    		ad_init				; ad初始化未成功,重新初始化
            NOP  		5
            
            SHL  		b11,4,b11
            SHRU 		b11,20,b11
            CMPEQ  	b11,b12,b2
     [!b2]   B    		ad_init
            NOP  		5
            
            MVKL 	04300000h,a3
            MVKH 	04300000h,a3
            STW  		a3,*a1				; 从a1端口读数据
            NOP  		3     				; 正常运行,设置CR0引脚
ad_end:     NOP  		4   
rpt:         XOR 		b0,b0,b0
            MVC 		csr,b0
            OR  		1,b0,b0
            MVC 		b0,csr     			; 使能可屏蔽中断
            
            NOP  		8
            NOP  		8
            
            ZERO 		a5
            ZERO 		a2
            
            MVKL 	pcr,a10
            MVKH 	pcr,a10				; 设置clkr0引脚为低
            MVKL 	3a28h,b10   			; 使用clkr0引脚放弃对cpld的控制
            STW  		b10,*a10
            NOP  		4            
start_time1:   MVKL 	00000FFFEh,a10			; 开始启动定时器1
            MVKH	 	00000FFFEh,a10			; 计算原始数据的采样时间
            MVKL		tim1_ctl, b10
            MVKH 	tim1_ctl, b10
            STW  		a10, *b10
            NOP  		4
 loop:       NOP
            ZERO		b0
      [a2]  ADD 		a5,1,a5
      [a2]  MVKL 		reg,a4
      [a2]  MVKH 		reg,a4
      [a2]  STW  		a5,*a4
      [a2]  B 	 		ftranform       		; 跳转到非均匀数据的傅立叶变换程序
      	  NOP 		5
            NOP
            B    		loop
            NOP  		5 
ad:          LDW  	*a1,a4
            NOP  		4
            SHL  		a4,4,a4
            SHRU 		a4,4,a4				; 数据格式为二进展原码
            SHR  		a4,4,a4   				; 数据格式为二进展补码
            STW  		a4,*b1++				;  b1为变量sinx
            NOP  		4
            
            SUB  		a6,1,a6  
            CMPEQ 	a6,0,a2
               
            B    		irp
            NOP  		5
timer1:	   MVKL 	pcr1,a10
            MVKH 	pcr1,a10				; 设置dx1引脚为低电平
            MVKL 	3a0ah,b10   			; 输出非均匀时间
            STW  		b10,*a10
            NOP  		8
            NOP  		4
            
            MVKL 	3a2ah,b10				; 设置dx1引脚为高电平
            STW  		b10,*a10
            NOP  		8
            NOP  		4
            
            MVKL 	3a0ah,b10				; 设置dx1引脚为低电平
            STW  		b10,*a10
            NOP  		4
            
		   MVKL 	ad_start,b0
		   MVKH 	ad_start,b0
            MVC  		b0,irp
            B    		irp
            NOP  		5
            .end

⌨️ 快捷键说明

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