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

📄 timer.asm

📁 DSP tms320f2812 的电机控制原程序,pwminverter,大家可以作参考
💻 ASM
📖 第 1 页 / 共 5 页
字号:
ADCCHSELSEQ4   .set 0x007106     ;ADC channel select sequencing control register 4
ADCASEQSR      .set 0x007107     ;ADC Auto_sequence status register
ADCRESULT0     .set 0x007108     ;ADC conversion result buffer register 0
ADCRESULT1     .set 0x007109     ;ADC conversion result buffer register 1
ADCRESULT2     .set 0x00710A     ;ADC conversion result buffer register 2
ADCRESULT3     .set 0x00710B     ;ADC conversion result buffer register 3
ADCRESULT4     .set 0x00710C     ;ADC conversion result buffer register 4
ADCRESULT5     .set 0x00710D     ;ADC conversion result buffer register 5
ADCRESULT6     .set 0x00710E     ;ADC conversion result buffer register 6
ADCRESULT7     .set 0x00710F     ;ADC conversion result buffer register 7
ADCRESULT8     .set 0x007110     ;ADC conversion result buffer register 8
ADCRESULT9     .set 0x007111     ;ADC conversion result buffer register 9
ADCRESULT10    .set 0x007112     ;ADC conversion result buffer register 10
ADCRESULT11    .set 0x007113     ;ADC conversion result buffer register 11
ADCRESULT12    .set 0x007114     ;ADC conversion result buffer register 12
ADCRESULT13    .set 0x007115     ;ADC conversion result buffer register 13
ADCRESULT14    .set 0x007116     ;ADC conversion result buffer register 14
ADCRESULT15    .set 0x007117     ;ADC conversion result buffer register 15
ADCTRL3        .set 0x007118     ;ADC control register 3
ADCST          .set 0x007119     ;ADC status register

;**************************************************************************
;EVA事件管理器寄存器定义
;*************************************************************************
GPTCONA     .set 0x7400    ;Overall Gptimer control register A
T1CNT       .set 0x7401    ;Timer 1 counter
T1CMPR      .set 0x7402    ;Timer 1 compare register 
T1PR        .set 0x7403    ;Timer 1 period  register
T1CON       .set 0x7404    ;Timer 1 control register
T2CNT       .set 0x7405    ;Timer 2 counter
T2CMPR      .set 0x7406    ;Timer 2 compare register 
T2PR        .set 0x7407    ;Timer 2 period  register
T2CON       .set 0x7408    ;Timer 2 control register
EXTCONA     .set 0x7409    ;Extension control register A 
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Compare registers%%%%%%%%%%%%%%%%%%%%%%%%
COMCONA     .set 0x7411    ;Compare control register A
ACTRA       .set 0x7413    ;Compare action control register A
DBTCONA     .set 0x7415    ;Dead_band timer control register A
CMPR1       .set 0x7417    ;Compare  register 1
CMPR2       .set 0x7418    ;Compare  register 2
CMPR3       .set 0x7419    ;Compare  register 3
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CAPTURE REGISTERS@@@@@@@@@@@@@@@@@@@@@@@@@
CAPCONA     .set 0x7420    ;Capture control register A
CAPFIFOA    .set 0x7422    ;Capture FIFO status register A
CAP1FIFO    .set 0x7423    ;Two_level deep capture FIFO stack1
CAP2FIFO    .set 0x7424    ;Two_level deep capture FIFO stack2
CAP3FIFO    .set 0x7425    ;Two_level deep capture FIFO stack3
CAP1FBOT    .set 0x7427    ;Bottom register of capture FIFO stack1
CAP2FBOT    .set 0x7428    ;Bottom register of capture FIFO stack2
CAP3FBOT    .set 0x7429    ;Bottom register of capture FIFO stack3
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&INTERRUPT REGISTERS&&&&&&&&&&&&&&&&&&&&&
EVAIMRA     .set 0x742C    ;Interrupt mask register A
EVAIMRB     .set 0x742D    ;Interrupt mask register B
EVAIMRC     .set 0x742E    ;Interrupt mask register C
EVAIFRA     .set 0x742F    ;Interrupt flag register A
EVAIFRB     .set 0x7430    ;Interrupt flag register B
EVAIFRC     .set 0x7431    ;Interrupt flag register C
;***************************************************************************

; Pie control register. Required to enable PIE
PIECTRL    .set 0x00000CE0		

; Pie acknowledge register
PIEACK     .set 0x00000CE1		

; Pie Interrupt Enable Registers
PIEIER1    .set 0x00000CE2
PIEIER2    .set 0x00000CE4
PIEIER3    .set 0x00000CE6
PIEIER4    .set 0x00000CE8	
PIEIER5    .set 0x00000CEA
PIEIER6    .set 0x00000CEC
PIEIER7    .set 0x00000CEE	
PIEIER8    .set 0x00000CF0	
PIEIER9    .set 0x00000CF2
PIEIER10   .set 0x00000CF4		
PIEIER11   .set 0x00000CF6
PIEIER12   .set 0x00000CF8

; Pie Interrupt flag registers
PIEIFR1    .set 0x00000CE3
PIEIFR2    .set 0x00000CE5
PIEIFR3    .set 0x00000CE7
PIEIFR4    .set 0x00000CE9	
PIEIFR5    .set 0x00000CEB
PIEIFR6    .set 0x00000CED
PIEIFR7    .set 0x00000CEF	
PIEIFR8    .set 0x00000CF1	
PIEIFR9    .set 0x00000CF3
PIEIFR10   .set 0x00000CF5		
PIEIFR11   .set 0x00000CF7
PIEIFR12   .set 0x00000CF9



VECT:	  .sect ".reset"
        .long INIT            ; RESET Vector
        .sect "vectors"
        .long ERROR           ; ISR1 not implemented
        .long ERROR           ; ISR2 not implemented
        .long ERROR           ; ISR3 not implemented
        .long ERROR           ; ISR4 not implemented
        .long ERROR           ; ISR5 not implemented
        .long ERROR           ; ISR6 not implemented
        .long ERROR           ; ISR7 not implemented
        .long ERROR           ; ISR8 not implemented
        .long ERROR           ; ISR9 not implemented
        .long ERROR           ; ISR10 not implemented
        .long ERROR           ; ISR11 not implemented
        .long ERROR           ; ISR12 not implemented
        .long ERROR           ; ISR13 not implemented
        .long ERROR           ; ISR14 used by Timer2
        
           .sect  "pievt"
PIEVT:	
        .long ERROR ;ISR1_1
        .long ERROR ;ISR1_2
        .long ERROR ;ISR1_3
        .long ERROR ;ISR1_4
        .long ERROR ;ISR1_5
        .long ERROR ;ISR1_6
        .long ERROR ;ISR1_7
        .long ERROR ;ISR1_8	
        .long ERROR ;ISR2_1
        .long ERROR ;ISR2_2
        .long ERROR ;ISR2_3
        .long T1PINT ;ISR2_4 ;事件管理器A定时器周期中断T1PINT
        .long T1CINT ;ISR2_5 ;事件管理器A定时器比较中断T1CINT
        .long ERROR ;ISR2_6     
        .long ERROR ;ISR2_7
        .long ERROR ;ISR2_8
        .long ERROR ;ISR3_1
        .long ERROR ;ISR3_2
        .long ERROR ;ISR3_3
        .long ERROR ;ISR3_4
        .long ERROR ;ISR3_5
        .long ERROR ;ISR3_6
        .long ERROR ;ISR3_7
        .long ERROR ;ISR3_8
        .long ERROR ;ISR4_1
        .long ERROR ;ISR4_2
        .long ERROR ;ISR4_3
        .long ERROR ;ISR4_4
        .long ERROR ;ISR4_5
        .long ERROR ;ISR4_6
        .long ERROR ;ISR4_7
        .long ERROR ;ISR4_8
        .long ERROR ;ISR5_1
        .long ERROR ;ISR5_2
        .long ERROR ;ISR5_3
        .long ERROR ;ISR5_4
        .long ERROR ;ISR5_5
        .long ERROR ;ISR5_6
        .long ERROR ;ISR5_7
        .long ERROR ;ISR5_8
        .long ERROR ;ISR6_1
        .long ERROR ;ISR6_2
        .long ERROR ;ISR6_3
        .long ERROR ;ISR6_4
        .long ERROR ;ISR6_5
        .long ERROR ;ISR6_6
        .long ERROR ;ISR6_7
        .long ERROR ;ISR6_8
        .long ERROR ;ISR7_1
        .long ERROR ;ISR7_2
        .long ERROR ;ISR7_3
        .long ERROR ;ISR7_4
        .long ERROR ;ISR7_5
        .long ERROR ;ISR7_6
        .long ERROR ;ISR7_7
        .long ERROR ;ISR7_8
        .long ERROR ;ISR8_1
        .long ERROR ;ISR8_2
        .long ERROR ;ISR8_3
        .long ERROR ;ISR8_4
        .long ERROR ;ISR8_5
        .long ERROR ;ISR8_6
        .long ERROR ;ISR8_7
        .long ERROR ;ISR8_8
        .long ERROR ;ISR9_1
        .long ERROR ;ISR9_2
        .long ERROR ;ISR9_3
        .long ERROR ;ISR9_4
        .long ERROR ;ISR9_5
        .long ERROR ;ISR9_6
        .long ERROR ;ISR9_7
        .long ERROR ;ISR9_8
        .long ERROR ;ISR10_1
        .long ERROR ;ISR10_2
        .long ERROR ;ISR10_3
        .long ERROR ;ISR10_4
        .long ERROR ;ISR10_5
        .long ERROR ;ISR10_6
        .long ERROR ;ISR10_7
        .long ERROR ;ISR10_8
        .long ERROR ;ISR11_1
        .long ERROR ;ISR11_2
        .long ERROR ;ISR11_3
        .long ERROR ;ISR11_4
        .long ERROR ;ISR11_5
        .long ERROR ;ISR11_6
        .long ERROR ;ISR11_7
        .long ERROR ;ISR11_8
        .long ERROR ;ISR12_1
        .long ERROR ;ISR12_2
        .long ERROR ;ISR12_3
        .long ERROR ;ISR12_4
        .long ERROR ;ISR12_5
        .long ERROR ;ISR12_6
        .long ERROR ;ISR12_7
        .long ERROR ;ISR12_8
        	
        .def _c_int00
        .text
_c_int00:        
INIT:   SETC  OBJMODE
        CLRC  AMODE
        SETC  PAGE0
        SETC  INTM            ; Disable Ints
        CLRC  SXM
        CLRC  OVM 
        SPM   0         
        AND   IER,#0
        AND   IFR,#0
        MOV   @SP,#0x400      ; Initialize stack
        NOP
        LC  RAM_INITIAL
        NOP
        LC  SYS_INITIAL
        NOP
        CLRC  INTM            ;开总中断
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    ;主程序
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
WAIT:
        MOV DP,#200H
        MOV @UPDATE_ANGLE,#180          ;载波周期为5K,则旋转角度数值为#36;载波周期为1K,则旋转角度数值为#180
        MOV @MODULATE_RANGE,#0EA5H      ;载波频率为5K,调制度为0.8,所以数值为2EDH ;调制度为0.8,#124FH 假设调制度为1,所以Ts*M=Ts,这里的Ts为半个载波周期
        MOV @CARRY_PERIOD,#124FH        ;载波周期
        NOP
        NOP
        EALLOW
        MOV DP,#01C0H
        MOV @WDKEY,#055H                ;周期性喂狗
        MOV @WDKEY,#0AAH                ;周期性喂狗
        NOP
        EDIS
        NOP
        ;LC STATIC3_CONVERSION_ROTATION2
        NOP
        ;LC QUADRANT_ESTIMATE
        NOP
        ;LC ANGLE_AND_AMPLITUTE
        NOP
        SB WAIT,UNC

;****************************************************************         
;系统初始化子程序
;****************************************************************
;*************************************************************        
;系统初始化子程序 
SYS_INITIAL:
           NOP
           EALLOW
           MOV DP,#01C0H
           MOV @PCLKCR,#09H         ;外围时钟控制寄存器,开通EVA和AD采样时钟
           NOP
           MOV @SCSR,#01H           ;系统控制寄存器
          ; TSET @SCSR,#0
           NOP
           MOV @PLLCR,#0AH          ;锁相环,晶振30M,锁相环10倍频,但是需要2分频,所以SYSCLKOUT为150M,同时规定HSPCLK为1/2的SYSCLKOUT时钟,因此频率为75M
           NOP
           MOV @WDCR,#68H           ;禁止看门狗
           NOP
           MOV @WDKEY,#055H         ;周期性喂狗
           MOV @WDKEY,#0AAH         ;周期性喂狗
           NOP
           EDIS
           NOP
           OR IER,#02H              ;使能INT2
           MOV DP,#33H
           MOV @PIEIER2,#018H       ;使能EVA事件管理器A定时器周期和比较中断
           MOV @PIECTRL,#01H        ;使能PIE外围中断
           MOV @PIEACK,#0FFH
           NOP
           MOV DP,#1C3H
           EALLOW
           MOV @GPAMUX,#0FFFFH      ;通用口A GPIO A作为PWM输出
           MOV @GPAQUAL,#01H
           EDIS
           NOP
           MOV DP,#1D0H
           MOV @EXTCONA,#0H
           MOV @T1CNT,#0
           MOV @T1PR,#124FH         ;载波频率为5K,所以数值为039A ;#124FH,载波频率为1K,0.5毫秒定时。HSPCLK为75M,又因为定时期8分频,连续上下记数,所以1毫秒定时时间常数为124FH
           MOV @ACTRA,#0666H        ;极性控制寄存器
           MOV @CMPR1,#927H         ;PWM1/2输出初值
           MOV @CMPR2,#927H         ;PWM3/4输出初值
           MOV @CMPR3,#927H         ;PWM5/6输出初值
           MOV @COMCONA,#0A600H     ;比较控制寄存器,使能比较操作,SVENABLE位应该置0而不是1,即禁止空间矢量PWM模式,这样才会有波形输出,如果这位是1,则没有波形输出
           MOV @T1CMPR,#1CDH        ;比较输出,50%占空比
           MOV @T1CON,#0B42H        ;定时期8分频,连续上下记数,一旦仿真挂起,立即停止,即遇到软件断点,停止运行 
           MOV @GPTCONA,#55H  
           MOV @DBTCONA,#0EFCH      ;死区控制寄存器
           MOV @EVAIFRA,#0FFH
           MOV @EVAIFRB,#0FFH
           MOV @EVAIFRC,#0FFH
           MOV @EVAIMRA,#0180H      ;开通定时期1周期中断和定时期比较中断
           MOV @EVAIMRB,#0H
           MOV @EVAIMRC,#0H
           NOP
           LRET

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;RAM变量清零
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
RAM_INITIAL:
          MOVW DP,#EMPTY
          MOVL XAR2,#EMPTY
          MOV @AR0,#12
LOOP:
          MOV  ACC,#0
          MOVL *XAR2++,ACC            ;注意此时清RAM是两个字两个字的清,所以清RAM的时候,要算好个数,否则会把紧跟后面的数值或表格清零。
          BANZ LOOP,AR0--
          LRET

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;AD_SAMPLE采样子程序,程序里进行初始化以及相应的坐标移动处理
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AD_SAMPLE:
        CLRC SXM
        MOV DP,#1C4H
        MOV @ADCTRL1,#7110H            ;复位AD采样
         RPT #5
       || NOP
        NOP                            ;空循环等待复位完成
        MOV @ADCTRL1,#3110H            ;复位完成设置控制器,采用级联方式
        MOV DP,#200H
        MOV @TEMP_BUFF,#4              ;控制循环次数,用于AD采样取平均值
AD_SAMPLE_START:   
        MOV DP,#1C4H
        MOV @ADCTRL2,#4040H            ;复位SEQ1和SEQ2以及相关的设置
        NOP
        RPT #5
       || NOP
        MOV @ADCTRL2,#2020H            ;启动SEQ1和SEQ2
        MOV @ADCTRL3,#0005H            ;同时采样方式
        MOV @ADCMAXCONV,#0002H         ;双通道同时采样,最大通道选择值为3,所以总共有6个AD采样通道
        MOV @ADCCHSELSEQ1,#0210H       ;排序器1采样第2、1、0通道,排序器2采样第5、4、3通道
        ;MOV @ADCCHSELSEQ3,#0A98H      ;ADCA0-RESULT0  ADCB0-RESULT1; ADCA1-RESULT1  ADCB1-RESULT2
AD_SAMPLE_WAIT:
        NOP
        TBIT @ADCST,#2                 ;检测AD采样是否完成,如果没有,则循环等待
        SB AD_SAMPLE_WAIT,TC
        RPT #10
       || NOP
        MOV ACC,@ADCRESULT0            ;取AD采样结果,然后左移12位,因为AD采样结果是左对齐
        LSL ACC,12
        MOV DP,#200H
        MOV @I_SAMPLE_BUFF,AH
        MOV AL, @I_SAMPLE_BUFF         ;四次结果累加
        ADD AL,@IA_SAMPLE
        MOV @IA_SAMPLE,AL
        MOV AL,@TEMP_BUFF              ;循环AD采样次数减1,用于控制循环次数
        SUB AL,#1
        MOV @TEMP_BUFF,AL
        B AD_SAMPLE_START,NEQ
        MOV DP,#200H
        MOV ACC,@IA_SAMPLE             ;AD采样结果除以4,取平均值
        SFR ACC,2
        MOV @IA_SAMPLE,AL
        SETC SXM
        MOV AL,@IA_SAMPLE
        SUB AL,#800H                   ;零点下移
        MOV @IA_SAMPLE,AL
        CLRC SXM
        LRET
                
        
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;静止3相坐标变换成2相坐标
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
STATIC3_CONVERSION_ROTATION2:
        SETC SXM
        MOV DP,#200H
        TBIT @FLAG_BUFF,#0                ;通过判断FLAG_BUFF单元的第0位标致来区别是进行电流还是电压的3相到2

⌨️ 快捷键说明

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