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

📄 macro915.h.bak

📁 pwm 的代码 主要是用于基于FPGA的控制
💻 BAK
字号:
;----------------------------------------------------------
STOP		.MACRO					;停机模块
		;LDP 		???		;7080H-70FFH
		;LACL		???
		;AND		???
				;1111111110111111B
		;SACL		???		;???=/DISDRIVE(DP=0E1H)
		
		LDP		#0E8H
		LACL		COMCONA
		AND		#1111110111111111B
		SACL		COMCONA			;禁止PWM输出,COMCONA.9=0,PWM输出引脚处于高阻态,即禁止
		
		LDP     	#0E8H
        SPLK		#0,CMPR1		;设置PWM占空比	
		SPLK		#0,CMPR2		;设置PWM占空比	

        LDP			#4				;200H-027FH
		SPLK		#0,RunFlag		;运行标志置0,停机
		.ENDM
;--------------------------------------------------------------------
RUN:		.MACRO				;运行宏

                LDP	#4			;200H-027FH
		SPLK	#1,RunFlag

		LDP 	#0E1H			;7080H-70FFH
		LACL	???		;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)
		OR	???
		SACL	???		;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)

		LDP 	#0E1H			;7080H-70FFH
		LACC	#1111111111111011B			
		AND	PADATDIR
		SACL	PADATDIR		;PADATDIR.2(IOPA2)=UNCLOCK	
		LACC	#100B		
		OR	PADATDIR
		SACL	PADATDIR		;将UNLOCK置低再置高???

		LDP	#0E8H
		LACL	COMCONA
		OR	#1000000000B
		SACL	COMCONA			;允许PWM输出,COMCONA.9=1
		.ENDM
;----------------------------------------------------------------------------------
ALARM		.MACRO					;ALARM模块
		
		LDP 		#0E1H			;7080H-70FFH
		LACL		PFDATDIR		;PFDATDIR.0(IOPF0)=ALARM
		OR		#00000001B
		SACL		PFDATDIR		;PFDATDIR.0(IOPF0)=ALARM,IOPF0输出为高电平代表发出警告
		
		.ENDM
;-----------------------------------------------------------------------
DISALARM:	.MACRO				;DISALARM模块		
		LDP 	#0E1H			;7080H-70FFH
		LACL	PFDATDIR		;PFDATDIR.0(IOPF0)=ALARM
		AND	#1111111111111110B
		SACL	PFDATDIR		;PFDATDIR.0(IOPF0)=ALARM		
		.ENDM
;------------------------------------------------------------------------
SHORT:		.MACRO
		LDP	#0E1H
		LACC	PFDATDIR
		OR	#00000100B			;PFDATDIR.2(IOPF2)=SHORT输出高电平表示接入母线充电电容
		SACL	PFDATDIR		
		.ENDM
;-----------------------------------------------------------------------
DISSHORT:	.MACRO
		LDP	#0E1H
		LACC	PFDATDIR
		AND	#1111111111111011B		;PFDATDIR.2(IOPF2),输出低电平表示母线充电电容不接入
		SACL	PFDATDIR
		.ENDM
;========================================================================
BREAK:		.MACRO
		LDP	#0E1H
		LACC	PFDATDIR
		OR	#00001000B			;PFDATDIR.3(IOPF3)=BREAK输出高电平表示接入制动电阻
		SACL	PFDATDIR		
		.ENDM
;========================================================================
DISBREAK:	.MACRO
		LDP	#0E1H
		LACC	PFDATDIR
		AND	#1111111111110111B		;PFDATDIR.3(IOPF3),输出低电平表示断开制动电阻
		SACL	PFDATDIR
		.ENDM
;========================================================================
FAN:		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		OR	#10000000B			;PCDATDIR.7(IOPC7)=FAN,输出高电平表示采用冷却风扇运行
		SACL	PCDATDIR		
		.ENDM
;========================================================================
DISFAN:		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		AND	#1111111101111111B			;PCDATDIR.7(IOPC7),输出低电平表示采用风扇运行
		SACL	PCDATDIR
		.ENDM
;========================================================================
Y1ON		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		OR	#01000000B			;PCDATDIR.6(IOPC6)=RUN(Y1),输出高电平变频器运行
		SACL	PCDATDIR
		.ENDM
;========================================================================		
Y1OFF		.MACRO
		LDP	#0E1H
		LACC	PCDATDIR
		AND	#1111111110111111B		;PCDATDIR.6(IOPC6)=RUN(Y1),输出低电平变频器停止
		SACL	PCDATDIR
		.ENDM
;--------------------------------------------------------------------
Store1		.macro					;保护现场模块1
		MAR     	*,AR1
        MAR			*+
        SST    		#1,*+
        SST     	#0,*+
        SACH    	*+
        SACL    	*+
        PAC
        MPYK    	#1
        SPL     	*+
        SACH    	*+
        SACL    	*+
        SAR			AR4,*+			;for scope
        SAR			AR2,*			;for scope
		.endm
;--------------------------------------------------------------------
Restore1	.macro					;恢复现场模块1
		MAR     	*,AR1
        lar			AR2,*-			;for scope
        lar			AR4,*-			;for scope
        LT      	*-
        MPYK    	#1
        LPH     	*-
        LT      	*-
        LACl    	*-
        ADD     	*-,16
        LST     	#0,*-
        LST     	#1,*-               
		.endm
		
;===========================================================
Store3		.macro
		MAR			*,AR1
		MAR			*+
		SST			#1,*+
		SST			#0, *+
		SACH		*+
		SACL		*+
		SAR			AR2,*+			;for scope
		SAR			AR4,*			;for scope
		.endm
;===========================================================
Restore3	.macro
		MAR			*,AR1
		lar			AR4,*-			;for scope
		lar			AR2,*-			;for scope
		LACL		*-
		ADDH		*-
		LST			#0, *-
		LST			#1, *-
		.endm
		
;--------------------------------------------------------------------
/*KICK_DOG    .macro
      LDP   #0E0H
      SPLK  #05555H,WDKEY
      SPLK  #0AAAAH,WDKEY
      LDP   #0
      .ENDM   */
;=====================================================================
; /*---系统初始化程序*/
;=====================================================================                                                  		
CPUINI         .MACRO                                                       		
    	LDP			#0
		SETC 		INTM
		CLRC 		SXM 			;Clear Sign Extension Mode
		CLRC 		OVM 			;Reset Overflow Mode
		CLRC 		CNF 			;Config Block B0 to Data mem.
		 							;Disable interrupts during initialization.
		LDP		#0E0H                                      		
      		SPLK		#02FDH,SCSR1		;CLKIN=15M,CLKOUT=30M
		;SPLK 	#0000001011111101b,SCSR1 	;2fd Enable clock to ADC,SCI,EVA module
			;||||||||||||||||
			;fedcba9876543210
			;bit f:	  0	Reserved
			;bit e:	  0	CLKOUT 引脚输出 CPU Clock
			;bit d-c: 00	cpu 功耗模式选择
			;bit b-9: 001 	锁相环时钟选择倍频15MHz*2=30MHz
			;bit 8:	  0	Reserved
			;bit 7:	  1	ADC clock enabled
			;bit 6:	  1	SCI clock enabled
			;bit 5:	  1	SPI clock enabled
			;bit 4:	  1	CAN clock enabled
			;bit 3:	  1	EVB clock enabled
			;bit 2:	  1	EVA clock enabled
			;bit 1:	  0	Reserved
			;bit 0:	  1	无效地址检测
			
		;LACC		SCSR2
		;OR	#00101010B
		;AND	#00101110B
		;	;||||||||
		;	;00543210	
		;	;bit 7:	  0	Reserved
		;	;bit 6:	  0	输入限定器锁存时间至少5个时钟周期长
		;	;bit 5:	  1	Enable WD
		;	;bit 4:	  0	XMIF外部存储器正常工作模式
		;	;bit 3:	  1	禁止引导rom
		;	;bit 2:	  1/0	程序地址映射到片外
		;	;bit 1-0: 10	SARAM 被映射到片内程序和数据空间
		;SACL	SCSR2
		;SPLK	#08001H,XINT1CR
		;SPLK	#08001H,XINT1CR
		
        	SPLK		#06FH,WDCR	;禁止WDT	
		
		LDP		#0H                                    
		SPLK		#0013H,IMR	;使能INT1,INT2,INT5                                    
               ;SPLK		#0FFFFH,IFR	;清所有中断标志
        	CLRC		INTM		;开总中断
        	.ENDM      	
;--------------------------------------------------------------------       	
;=====================================================================
; EVA模块的初始化程序
;=====================================================================
EVAINI		.MACRO
                ;IO初始化
		LDP			#0E1H
		LACL		MCRA
		OR		#0FFFH
		SACL		MCRA				;TIME1比较输出,pwm口使能
		;SPLK	#0000111111111111b,MCRA			;TIME1比较输出,pwm口使能
			;||||||||||||||||
			;fedcba9876543210
			;bit f-c: 0	IOPB7-IOPB4
			;bit b-6: 1     PWM6-PWM1
			;bit 5: 1     CAP3(PGA)
			;bit 4: 1     CAP2/QEP2(PGB)
			;bit 3: 1     CAP1/QEP1(PGC)
			;bit 2-0: 1	XINT1,SCIRXD,SCITXD
		;不用设置PADATDIR,因为A端口均为基本功能,不是一般IO口
		LACL		PBDATDIR
		AND		#3FFFH
		SACL		PBDATDIR	
		;SPLK	#0011111111111111,PBDATDIR
			;||||||||||||||||
			;fedcba9876543210
			;bit f:	0	IOPB7 input,read high(Two_P) 
			;bit e: 0	IOPB6 input,read high(JOG)
			;bit d: 1	IOPB5 output,high(FPM)
			;bit c: 1	IOPB4 output,high(FAM)
			;others: 1	
		SPLK	#0FF03H,MCRB
		;SPLK	#1111111100000011B,MCRB
			;||||||||||||||||
			;fedcba9876543210
			;bit f-9: 1	保留位
			;bit 8:	  1	XINT2/ADCSOC
			;bit 7-2: 0	IOPC7-IOPC2为一般I/O口
			;bit 1-0: 11	BIO,W/R  这两位设成11是因为硬件上这两个管脚接了线,默认为BIO,W/R功能
		SPLK	#0F8F8H,PCDATDIR
		;SPLK	#1111100011111000B,PCDATDIR
			;||||||||||||||||
			;fedcba9876543210
			;bit f: 1	IOPC7 output(FAN)
			;bit e: 1	IOPC6 output(RUN)
			;bit d:	1	IOPC5 output(EEPROMCS)
			;bit c: 1	IOPC4 output(EEPROMCLK)
			;bit b: 1	IOPC3 output(EEPROMDI)
			;bit a: 0	IOPC2 input (EEPROMDO)
			;bit 9-8: 0	
			;bit 7-2: 1	HIGH
			;others:  0	LOW
		SPLK  	#8000H,MCRC
		;SPLK	#1000000000000000,MCRC
			;||||||||||||||||
			;fedcba9876543210
			;bit f: 1  	remain
		        ;bit e-0: 0	IOPE0-IOPE7,IOPF0-IOPF6
		SPLK	#00FFH,PEDATDIR
		;SPLK	#0000000011111111B,PEDATDIR
			;||||||||||||||||
			;fedcba9876543210
			;bit f: 0	IOPE7,input(REV)
			;bit e: 0	IOPE6,input(FWR)
			;bit d: 0 	IOPE5,input(HLD)
			;bit c: 0	IOPE4,input(ACC2)
			;bit b: 0	IOPE3,input(ACC1)
			;bit a: 0	IOPE2,input(SP3)
			;bit 9: 0	IOPE1,input(SP2)
			;bit 8: 0     	IOPE0,input(SP1)
			;bit 7-0: 1     read high
		SPLK	#0FFFFH,PFDATDIR
		;SPLK	#1111111111111111B,PFDATDIR
			;||||||||||||||||
			;fedcba9876543210
			;bit f: 1	remain
			;bit e: 1	IOPF6,output(C/1)
			;bit d: 1 	IOPF5,output(B/1)
			;bit c: 1	IOPF4,output(A/1)
			;bit b: 1	IOPF3,output(BREAK)
			;bit a: 1	IOPF2,output(SHORT)
			;bit 9: 1	IOPF1,output(SPEED)
			;bit 8: 1     	IOPF0,output(TA,TB,TC)
			;bit 7-0: 1     high
			
		;IO初始化完毕
		
		LDP	#0E8H
		SPLK		#8842H,T1CON		;单个通用定时器控制寄存器
		;SPLK 	#1000100001000010b,T1CON 		;SET TIMER1
			;||||||||||||||||
			;fedcba9876543210	
			;bit f-e:  10	操作不受仿真器挂起影响
			;bit d:    0	reserved
			;bit c-b:  01	连续增/减计数模式
			;bit a-8:  000	输入时钟预分频1
			;bit 7:    0	定时器2、4使用自身周期寄存器
			;bit 6:	   1	使能定时器操作
			;bit 5-4:  00	使用内部cpu时钟	
			;bit 3-2:  00	定时器比较寄存器重载条件为当计数值为0时
			;bit 1:	   1	使能定时器比较操作
			;bit 0:	   0	使用自身的周期寄存器
		
		SPLK		#0CAH,GPTCONA		;全局通用定时器控制寄存器
		;SPLK	#0000000011001010b,GPTCONA;	
			;||||||||||||||||
			;fedcba9876543210
			;bit f:    0	reserved
			;bit e:	   0	T2 减计数
			;bit d:    0	T1 减计数
			;bit c-b:  00	reserved
			;bit a-9:  00	T2无事件启动ADC
			;bit 8-7:  01	T1下溢事件启动ADC
			;bit 6:    1	使能所有通用寄存器比较输出
			;bit 5-4:  00	reserved
			;bit 3-2:  10	T2 比较输出高有效
			;bit 1-0:  10	T1 比较输出高有效
		
		SPLK		#8200H,COMCONA			;比较控制寄存器
		;SPLK	#1000001000000000b,COMCONA		;设置比较模式
			;||||||||||||||||
			;fedcba9876543210
			;bit f:    1	使能比较操作
			;bit e-d:  00	T1CNT=0(下溢)重载CMPRx(比较寄存器)
			;bit c:    0	禁止空间矢量模式
			;bit b-a:  00	ACTRLD1/ACTRLD0.方式控制寄存器重载条件为下溢
			;bit 9:	   0	PWM输出禁止
			;bit 8:    0	PDPINTA状态位
                        ;bit 7-0:  000000000  reserved
			
		SPLK		#0666H,ACTRA		;比较方式控制寄存器
		;SPLK	#00000100110011001b,ACTRA		;Set PWM output mode
			;||||||||||||||||
			;fedcba9876543210
			;bit f:    0	SVPWM旋转方向(正向CCW)
			;bit e-c:  000	基本矢量位
			;bit b-a:  10	Set PWM6 to active high
			;bit 9-8:  01	Set PWM5 to active low
			;bit 7-6:  10	Set PWM4 to active high
			;bit 5-4:  01	Set PWM3 to active low
			;bit 3-2:  10	Set PWM2 to active high
			;bit 1-0:  01	Set PWM1 to active low
		
		SPLK		#0CECH,DBTCONA 		;死区控制寄存器,死区时间为3.2uS
		;SPLK	#0000110011101100b,DBTCONA		;死区时间3.2uS
			;||||||||||||||||
			;fedcba9876543210     0CECH
			;bit f-c:  0000  reserved
			;bit b-8:  1100  死区时间周期为12(死区定时器1,2,3的周期为12)
			;bit 7:    1	死区定时器3使能
			;bit 6:    1	死区定时器2使能
			;bit 5:    1	死区定时器1使能
			;bit 4-2:  011	死区定时器预分频为8
			;bit 1-0:  00	Reserved	
		
		SPLK		#0FFFFH,EVAIFRA			;清除中断标志
		SPLK		#0201H,EVAIMRA		
		;SPLK	#0000001000000001b,EVAIMRA		;T1中断下溢使能,功率驱动

⌨️ 快捷键说明

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