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

📄 3-1.asm

📁 买板子时赠的光盘
💻 ASM
字号:
				.mmregs
				.def	jump
				.def	start

k_sample_num      .set 256          			;设置保存采样数据的点数
out_data           .usect      "out_vars", k_sample_num    
       	                          				;数据输出位置,大小为k_sample_num
       	                          				;用来保存一批数据来查看采样是否正确
       	                          				;也可以供需要分批处理数据的程序调用程序中
       	                          				;可以用ar0~ar7来指定数据的首地址
in_data	     .usect   	 	"in_vars",1
d_cr0_send    	.usect      	"cr_send",1
d_cr1_send    	.usect      	"cr_send",1
       	       	       	       	   				;定义2个状态字
       	       	       	       	   				;此状态字就是需要开始写入TLV1571的初始值
d_temp        .usect      	"temp",1   			;存放临时数据
k_cr0_send    	.set 			0080h        	;初始化两个状态字的值
k_cr1_send     .set 			0100h        
     											;重新映射中断向量的变量     
k_iptr         .set     000111000b<<07  		;point 1C00H 新的向量区
       	       	       	       	  				;iptr是DSP内部PMST寄存器的高9bit
       	       	       	       	  				;用来指定中断向量表的位置,复位时全为1
       	       	       	       	  				;为了调试此程序,iptr将重新映射到地址1D00处
k_temp        .set     1111111b      
       	       	       	       	  				;定义一个常数,用于以后与pmst的与操作
       	       	       	       	  				;保持pmst的低6bit不变
d_pmst        .usect   "pmst",1 
	         .sect	   "prog"
start:     
          	ldm   	pmst,a             			;取出PMST的值,放入累加器a
       	       	       	       	    			;改变pmst的高9bit,再放入pmst
          	and   	#k_temp,a
          	or    	#k_iptr,a
          	stl   	a,ar2
          	mvdm  	ar2,pmst           

      		stm     	#0001h,imr	   			;开中断0
	  		nop
	  		nop
	  		stm     #0002h,ifr       			;通过写IFR,取消所有已经挂起的中断
	  		nop
	  		rsbx	  	intm		       		;状态寄存器ST0的INTM位,允许中断
	  		nop        
      		stm   	#d_temp,ar2                
      		stm   	#d_cr0_send,ar1
	  		st    	#k_cr0_send,*ar1+
      		st    	#k_cr1_send,*ar1
      		stm   	#d_cr0_send,ar1 	        
      		ld    	#k_sample_num,a    			;k_sample_num用来计数 
      		stm   	#out_data,ar5
       		portr 	01h,*ar2           			;读其他端口,使ADC的CS为高
	   		nop
       		nop
       		nop
       		portw 	*ar1+,02h          			;填AD转换器的寄存器cr1
       		rpt  		#8
       		nop
       		portw 	*ar1,02h           			;填AD转换器的寄存器cr1
       		portr 	01h, *ar2           		;读其他端口,使ADC的CS为高
       		rpt   	#10
       		nop
       		nop                  				;此时,写好状态字,AD开始采样                 
                                   				;等待中断, 使用累加器a做计数器
       											;当写完k_sample_num个数据后                 
wait:	  		nop                  			;重置累加器a,并使ar5指向out_data的开始地址 
	  		nop
	   		bc   	wait,aneq               
       		nop
       		stm  	#out_data,ar5
       		ld   		#k_sample_num,a
       		b     	wait
        		nop
       											;中断服务程序,用以读转换信号,放入out_data区
jump:     	sub 		#1h,a        			;计数
          	rsbx    	xf           			;发出读信号,AD收到后开始下一次采样
          	rpt 		#5
          	nop                   				;等待几个周期,便于示波器查看波形
          	portr   	00h,*ar5         
                                				;读AD转换数据,写在RAM的out_data数据段 
         		rpt 		#5
          	nop
          	ssbx    	xf            			;使读信号无效
          	nop	
          	portr   	01h,*ar2       			;读其他端口,使ADC的CS为高 
          	nop
          	nop                        
          	portw   	*ar5+,03h      			;从DA输出
          	rete                     			;中断返回
 			.end               

⌨️ 快捷键说明

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