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

📄 cap.asm

📁 DSP的捕捉单元的应用,对外部引脚数据进行捕捉,
💻 ASM
字号:
st0_temp	.usect		".b20",1			;
st1_temp	.usect		".b20",1			;
context	 	.usect		".b20",7			;62-68 

CAP4TEMP	.usect	 ".data0",1		;CAP4 临时寄存器
			.include  	"F2407REGS.H" ;引用头部文件
			.def      _c_int0
;(1)建立中断向量表
			.sect	".vectors"		;定义主向量段
RSVECT		B    _c_int0		;PM 0	复位向量  	     1
INT1	  		B    PHANTOM	;PM 2	中断优先级 1		4
INT2	  		B    PHANTOM	;PM 4	中断优先级2		5
INT3	  		B    PHANTOM	;PM 6	中断优先级 3		6
INT4	  		B    GISR4		;PM 8	中断优先级4		7
INT5	  		B    PHANTOM	;PM A	中断优先级 5		8
INT6	  		B    PHANTOM	;PM C	中断优先级 6		9
RESERVED  	B    PHANTOM	;PM E	(保留位)	          10
SW_INT8   	B    PHANTOM	;PM 10  用户定义软件中断   	-
  				
SW_INT31  	B    PHANTOM	;PM 3E  用户定义软件中断   	-
;中断子向量入口定义pvecs
			.sect	".pvecs"		;定义子向量段
PVECTORS	B	PHANTOM	;保留向量地址偏移量-00H 
			B	PHANTOM	;保留向量地址偏移量-01H
  				
			B	PHANTOM	;保留向量地址偏移量-35H
			B	CAP4_ISR		;保留向量地址偏移量-36H   CAP4中断
			B	PHANTOM	;保留向量地址偏移量-37H
  				
			B	PHANTOM	;保留向量地址偏移量-41H	
;(2)主程序
.text
_c_int0 
	LDP		#5
	SPLK	#00H,CAP4TEMP
	CALL	SYSINIT
	CALL	CAP_INIT		;调CAP4初始化程序
LOOP
	NOP
	B		LOOP
;(3)系统初始化程序
SYSINIT:
		SETC 	INTM
		CLRC 	SXM
       	CLRC 	OVM
		CLRC 	CNF			;B0区被配置为数据空间
        LDP 		#0E0H		;指向7000h-7080h区
       	SPLK 	#81FEH,SCSR1   ;时钟4倍频,CLKIN=6M,CLKOUT=24M
        SPLK		#0E8H,WDCR	;不使能WDT
	    LDP		#0
		SPLK		#0008H,IMR	;使能中断第4级INT4
		SPLK		#0FFFFH,IFR	;清全部中断标志
		RET
;(4)捕获单元初始化程序
CAP_INIT:
	LDP		#DP_PF2		;指向7090H-7100H
	LACL	MCRC
	OR		#0380H  		;IOPE7, IOPF0, IOPF1 被配置为特殊功
	SACL	MCRC		;能方式:CAP[4-6]
	SETC 	INTM
	LDP		#DP_EVB
	SPLK 	#049H,GPTCONB;TCOMPOE=1,T4PIN=10,T3PIN=01 
	SPLK	#0,T3CNT
	SPLK   	#01742H,T3CON ;TMODE=10 连续向上计数模式,TPS=111 预分频为128
								;TENABLE=1 定时器计数使能, TCLKS=00 内部时钟
							;TCLD=00, TECMPR=1 定时器3比较使能, SELT3PR=0
	SPLK 	#0FFFFH,T3PR	;定时器周期比较寄存器设为最大
	SPLK 	#00H,EVBIMRA
	SPLK 	#00H,EVBIMRB
	SPLK 	#22C0H,CAPCONB;CAP4 捕获允许,捕获上升沿
	SPLK 	#01H,EVBIMRC;CAP4 中断使能
	SPLK 	#0FFFFh,EVBIFRA ;清 EVB 全部中断标志
	SPLK 	#0FFFFh,EVBIFRB
	SPLK 	#0FFFFh,EVBIFRC
	CLRC 	INTM 		;开总中断
	RET		
;(5)中断程序程序
GISR4:						;优先级INT4中断人口
		;保护现场
		LDP     #0              ;保存机器上下文
		SST		#0,st0_temp	    ;使用自动寻址,DP-0 
		SST		#1,st1_temp	    ;保存状态寄存器到B2 DARAM.
		LDP		#0			  
        SACL	context			;保存ACC的低16位
		SACH	context+1		;保存ACC的高16位
		SAR		AR1,context+2
		SAR		AR2,context+3
		SAR		AR3,context+4
		SAR		AR4,context+5		
		SAR		AR5,context+6
		LDP		#0E0H
		LACC	PIVR,1		;读取外设中断向量寄存器(PIVR),并左移一位
		ADD		#PVECTORS	;加上外设中断人口地址
		BACC				;跳到相应的中断服务子程序
CAP4_ISR:					;捕获单元4中断程序入口
	LDP 		#DP_EVB
	LACL	CAP4FIFO
	LDP		#5
	SACL	CAP4TEMP	;读出捕获的值
	LDP		#DP_EVB
	SPLK		#0,T3CNT	;清 T3 计数值,使其重新计数
GISR2_RET:					;中断返回
		;恢复现场
		LDP		#DP_EVA
		SPLK	#0FFFFH,EVAIFRA
		LDP		#0
		LAR		AR5,context+6	
		LAR		AR4,context+5	
		LAR		AR3,context+4		
		LAR		AR2,context+3		
		LAR		AR1,context+2
		LACC	context+1,16
		ADDS	context
		LST		#1, st1_temp
		LST		#0, st0_temp
		CLRC	INTM		;开总中断,因为一进中断就自动关闭总中断
		RET
;(6)假中断程序
PHANTOM 	
		KICK_DOG			;复位看门狗
		RET
		END

⌨️ 快捷键说明

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