st0_temp	 	.usect		".b20",1			;60
st1_temp	 	.usect		".b20",1			;61
context	 	.usect		".b20",7			;62-68
STACK	 	.usect   	".stack",40

ADCOUNT 	.usect   	".data0",1			;288         ;;;;; 
ADRESULT 	.usect   	".data0",1			;289         ;;;;;	

			.include 	"F2407REGS.H" 	;引用头部文件
			.def    	 _c_int0
;（1）建立中断向量表
			.sect		".vectors"			;定义主向量段
RSVECT		B   		_c_int0			;PM 0	复位向量  			1
INT1	  		B    	GISR1			;PM 2	中断优先级1			4
INT2	  		B    	PHANTOM		;PM 4	中断优先级2			5
INT3	  		B    	PHANTOM		;PM 6	中断优先级3			6
INT4	  		B    	PHANTOM		;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_INT9   	B     	PHANTOM		; PM 12  	User S/W int	-
SW_INT10  	B     	PHANTOM		; PM 14  	User S/W int	-
SW_INT11  	B     	PHANTOM		; PM 16  	User S/W int	-
SW_INT12  	B     	PHANTOM		; PM 18  	User S/W int	-
SW_INT13  	B     	PHANTOM		; PM 1A  	User S/W int	-
SW_INT14  	B     	PHANTOM		; PM 1C  	User S/W int	-
SW_INT15  	B     	PHANTOM		; PM 1E  	User S/W int	-
SW_INT16  	B     	PHANTOM		; PM 20  	User S/W int	-
TRAP	  	B     	PHANTOM		; PM 22  	Trap vector	-
NMI	  	    	B     	PHANTOM		; PM 24  	Non maskable Int3
EMU_TRAP 	B    	PHANTOM		; PM 26  	Emulator Trap	2
SW_INT20  	B    	PHANTOM		; PM 28  	User S/W int	-
SW_INT21  	B    	PHANTOM		; PM 2A  	User S/W int	-
SW_INT22  	B    	PHANTOM		; PM 2C  	User S/W int	-
SW_INT23  	B    	PHANTOM		; PM 2E  	User S/W int	-
SW_INT24  	B    	PHANTOM		; PM 30  	User S/W int	-
SW_INT25  	B    	PHANTOM		; PM 32  	User S/W int	-
SW_INT26  	B    	PHANTOM		; PM 34  	User S/W int	-
SW_INT27  	B    	PHANTOM		; PM 36  	User S/W int	-
SW_INT28  	B    	PHANTOM		; PM 38  	User S/W int	-
SW_INT29  	B    	PHANTOM		; PM 3A  	User S/W int	-
SW_INT30  	B    	PHANTOM		; PM 3C  	User S/W int	-
SW_INT31  	B   		PHANTOM		;PM 3E	用户定义软件中断		—
;中断子向量入口定义pvecs
			.sect		".PVECS"			;定义子向量段
PVECTORS	B		PHANTOM		;保留向量地址偏移量  0000h
			B		PHANTOM		;保留向量地址偏移量  0001h
  			B		PHANTOM		;保留向量地址偏移量  0002h
			B		PHANTOM		;保留向量地址偏移量  0003h
			B		ADCINT_ISR		;保留向量地址偏移量  0004h  ADC中断
			B		PHANTOM		;保留向量地址偏移量  0005h
			B		PHANTOM		;SCI_RX_ISR; 保留向量地址偏移量
			B		PHANTOM		;SCI_TX_ISR	; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-0a 
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量 
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量 
			B		PHANTOM		; 保留向量地址偏移量-10
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-15
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量 
			B		PHANTOM		; 保留向量地址偏移量-1a
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量 
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-20
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-25
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量 
			B		PHANTOM		; 保留向量地址偏移量-2a
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; pvector addr offset 0x02f - T3PINT 
			B		PHANTOM		; 保留向量地址偏移量-30
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-35
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-3a
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量
			B		PHANTOM		; 保留向量地址偏移量-3f
			B		PHANTOM		;CANMBX_ISR	; 保留向量地址偏移量
			B		PHANTOM		;保留向量地址偏移量  0041h	
;（2）主程序:
        		.text
_c_int0    
			SETC 	INTM
    			CLRC 	SXM
    			CLRC 	OVM
			CLRC 	CNF	
			LDP 	#0E0H
			SPLK	#81FEH,SCSR1		;CLKIN=6 M,CLKOUT=24 M 
			SPLK	#0E8h,WDCR		;关看门狗
			LDP		#0
			SPLK	#0001h,IMR		;允许INT1中断
			SPLK	#0FFFFh,IFR		;清所有中断标志
     		CALL	ADINIT         	;初始化ADC程序
			CLRC	INTM			;开总中断
     		CALL	AD             	;启动模数转换程序
WAIT: 		NOP  
     		B		WAIT
;（3）ADC初始化程序
ADINIT: 
      		LDP		#234      		;设置通用定时器4
      		SPLK	#0000H,T4CNT
      		SPLK	#170CH,T4CON 
      		SPLK	#075H,T4PR                  
      		SPLK	#0400H,GPTCONB
      		SPLK	#0FFFFH,EVBIFRB
      		SPLK	#0000H,EVBIMRB 	
      		LDP		#DP_PF2
      		SPLK	#0010H,ADCCTRL1 ;设置ADC控制寄存器
      		SPLK	#8404H,ADCCTRL2  	       
      		SPLK	#000FH,MAXCONV ;16 通道
      		SPLK	#3210H,CHSELSEQ1
      		SPLK	#7654H,CHSELSEQ2
      		SPLK	#0BA98H,CHSELSEQ3
      		SPLK	#0FEDCH,CHSELSEQ4
      		LDP		#DP_SARAM2   	;指向0A00h～0A80h
      		SPLK	#ADRESULT,ADCOUNT
	  		RET
;（4）启动模数转换程序
AD:
      		LDP		#234                   
      		LACL	T4CON
      		OR		#40H          	 ;启动定时器4
      		SACL	T4CON
     		RET
;（5）中断程序
GISR1:								;优先级INT1中断子程序入口
		;保护现场    
			LDP		#0				; 保存机器上下文
			SST		#0, st0_temp		; 使用自动寻址DP-0 
			SST		#1, st1_temp		; 保存状态寄存器到B2 DARAM.
			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					;跳到相应的中断服务子程序
ADCINT_ISR:
     		CLRC 	SXM
     		LDP		#DP_SARAM2
      		LAR		AR1,ADCOUNT
      		LAR		AR0,#15 
      		LAR		AR2,#RESULT0
      		MAR		*,AR2
ADC1:		LACC	*+,10,AR1
     		SACH	*
     		ADRK	#32
      		MAR		*,AR0
      		BANZ   ADC1,*-,AR2
      		LDP		#DP_PF2
      		LACL	ADCCTRL2                  
      		OR		#4000H         	;复位 SEQ1
      		AND		#0FFDFH        	;清 INT FLAG SEQ1
      		SACL	ADCCTRL2                  
      		LDP		#DP_SARAM2 
     		LACL	ADCOUNT
      		SUB		#ADRESULT+31
      		BCND	ADC2,GEQ
      		ADD		#ADRESULT+32 ;<32
      		SACL	ADCOUNT
      		B		GISR1_RET
ADC2:		SPLK	#ADRESULT,ADCOUNT 	;=32
      		LACL	T4CON
      		AND		#0FFBFH        	;停止定时器4,即停止AD转换
      		SACL	T4CON
      		B		GISR1_RET
GISR1_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

