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

📄 adc.asm

📁 《DSP原理及应用》配套源代码
💻 ASM
字号:
;A/D转换程序
STACK	 .usect  "STACK",100h
AK_RCR11  .set 0000000001000000b	; 每帧一个字,字长为16 bit
AK_RCR21  .set 0000000001000000b 	; 单相帧
AK_XCR11  .set 0000000001000000b 
AK_XCR21  .set 0000000001000000b 
AK_SRGR11 .set 0000000000010011b  	;帧的宽度=CLKG, 
;CLKG=CPU CLK/(1+CLKGDV)=CPU CLK/20
AK_SRGR21 .set 0011000000111111b 		
;GLKSM=1,采样率发生器时钟来源于CPU时钟。
;FSGM=1,发送帧同步信号FSX由采样率发生器FSG驱动。
;帧周期=(FPER+1)×CLKG=64 CLKG。
AK_PCR1   .set 0000101000000000b 	
;FSXM=1,FSRM=0,FSR引脚为输入,由FSX引脚提供输入。
;CLKRP=0,在CLKR的下降沿采样接收数据。
SPSA1	.set 48h  		;串口1子地址寄存器
McBSP1	.set 49h  		;串口1子数据寄存器
DRR11   .set 41h  		;数据接收寄存器1
DRR21   .set 40h 		;数据接收寄存器2
	.mmregs
	.def  _c_int00
	.text
		
_c_int00
		b start
		nop
		nop
NMI	rete
		nop
		nop
		nop
SINT17	.space 4*16
SINT18	.space 4*16
SINT19	.space 4*16
SINT20	.space 4*16
SINT21	.space 4*16
SINT22	.space 4*16
SINT23	.space 4*16
SINT24	.space 4*16
SINT25	.space 4*16
SINT26	.space 4*16
SINT27	.space 4*16
SINT28	.space 4*16
SINT29	.space 4*16
SINT30	.space 4*16
INT0	rsbx 	intm
		rete
		nop
		nop
INT1	rsbx 	intm
		rete
		nop
		nop
INT2	rsbx 	intm
		rete
		nop
		nop
TINT:	rete
		nop
		nop
		nop
RINT0:	rete
		nop
		nop
		nop
XINT0:	rete
		nop
		nop
		nop 
SINT6	.space 4*16
SINT7	.space 4*16
INT3:	rete
		nop
		nop
		nop  
HPINT:	rete
		nop
		nop
		nop  
RINT1:	BD		RECIV
		nop
		nop
		nop
XINT1:	rete
		nop
		nop
		nop
;*************************
start:	LD 		#0,DP
		STM		#STACK+100h,SP
		STM 	#7FFFh,SWWSR
		STM 	#1020h,PMST
		SSBX 	INTM
		SSBX 	CMPT				;CMPT=1,ARP可以改变 
		CALL	ADCBSP
		STM		#0400H,IMR			;使能串口1接收中断 
		RSBX	INTM
		STM		#3000H,AR0			;起始地址
		STM		#256,AR1			;数据存储器单元个数
WAIT:	B 		WAIT  
;以下为串口1的初始化程序
ADCBSP:	STM	 	#00h,SPSA1			; 00h串口控制寄存器1子地址		
		STM 	#0000h,McBSP1 		; RRST=0 
		STM	 	#01h,SPSA1          	; 01h串口控制寄存器2子地址
		STM 	#0000h,McBSP1        ; XRST=GRST=0,将整个串口复位
		STM		#06h,SPSA1	    		; 06h采样率发生器寄存器1子地址	
		STM		#AK_SRGR11,McBSP1
		STM		#07h ,SPSA1	      	; 07h采样率发生器寄存器2子地址
		STM		#AK_SRGR21,McBSP1
		STM	 	#02h ,SPSA1		 	; 02h接收控制寄存器1子地址
		STM 	#AK_RCR11,McBSP1
		STM 	#03h ,SPSA1		 ; 03h接收控制寄存器2子地址
		STM 	#AK_RCR21,McBSP1 	  
		STM 	#04h ,SPSA1		 	; 04h发送控制寄存器1子地址
		STM 	#AK_XCR11,McBSP1
		STM 	#05h ,SPSA1		 	; 05h发送控制寄存器2子地址
		STM 	#AK_XCR21,McBSP1
		STM	 	#0Eh ,SPSA1		 	; 0Eh引脚控制寄存器子地址
		STM 	#AK_PCR1,McBSP1
		NOP					 		; 等待两个CPU时钟
		NOP
		STM 	#01h ,SPSA1		 	; 01h串口控制寄存器2子地址
		STM 	#0000001001000000b,McBSP1  ; GRST=1,使采样率发生器工作
		RPT   	#20
		NOP						                
		RSBX  	XF                   	; 选通ADC	
		STM 	#01h ,SPSA1		  		; 01h串口控制寄存器2子地址	
		STM 	#0000001001000001b,McBSP1; XRST=1,发送部分退出复位状态
		STM 	#00h ,SPSA1					; 00h串口控制寄存器1子地址
		STM 	#0000000000000001b,McBSP1  ; RRST=1,接收部分退出复位状态
		STM 	#01h ,SPSA1					; 01h串口控制寄存器2子地址
		STM 	#0000001011000001b,McBSP1   ; FRST=1,产生帧同步脉冲信号
		NOP
		NOP
		RET
RECIV:  STM		#3FFFH,IFR				; 串口1的接收中断服务程序
		LDM		DRR11,A
		LD		#0,ARP 
		STL		A,*AR0+
		LD		#1,ARP
		BANZ	LOOP1,*AR1-
		STM		#3000H,AR0				; 重复采样,设初值
		STM		#256,AR1
LOOP1:  RETE
		.end

⌨️ 快捷键说明

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