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

📄 basedo.asm

📁 电力系统中的保护装置全部代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;----------------------------------------------------------------------
;  47 | NU_Change_Preemption(old_preempt);                    //可以切换任务   
;----------------------------------------------------------------------
        ldp       @CL2,DP
        push      r0                    ; |47| 
        ldiu      @CL2,r1               ; |47| 
        callu     r1                    ; far call to _TCSE_Change_Preemption	; |47| 
                                        ; |47| Far Call Occurs
        subi      1,sp                  ; |47| 
	.line	12
                                        ; Begin Epilog Code
        ldiu      *-fp(1),r1
        ldiu      *fp,fp
                                        ; Restore SOE Registers
        pop       ar4
                                        ; Unallocate the Frame
        subi      2,sp
        bu        r1
;*      Branch Occurs to r1 
	.endfunc	48,000001000h,0


	.sect	 ".text"

	.global	_Ctrl_Output_reverse
	.sym	_Ctrl_Output_reverse,_Ctrl_Output_reverse,32,2,0
	.func	53
;******************************************************************************
;* FUNCTION NAME: _Ctrl_Output_reverse                                        *
;*                                                                            *
;*   Architecture       : TMS320C32                                           *
;*   Calling Convention : Stack Parameter Convention                          *
;*   Function Uses Regs : r0,r1,ar0,fp,ar4,sp                                 *
;*   Regs Saved         : ar4                                                 *
;*   Stack Frame        : Full (w/ debug)                                     *
;*   Total Frame Size   : 2 Call + 1 Parm + 0 Auto + 1 SOE = 4 words          *
;******************************************************************************
_Ctrl_Output_reverse:
	.sym	_chn,-2,14,9,32
;* ar4   assigned to _p
	.sym	_p,12,30,4,32
;* r0    assigned to _old_preempt
	.sym	_old_preempt,0,12,4,32
	.line	1
;----------------------------------------------------------------------
;  53 | VOID Ctrl_Output_reverse(UNSIGNED chn)                                 
;----------------------------------------------------------------------
        push      fp
        ldiu      sp,fp
        push      ar4
	.line	2
	.line	3
;----------------------------------------------------------------------
;  55 | register UNSIGNED *p = &CtrlOutBuf;                                    
;  56 | register OPTION   old_preempt;                                         
;----------------------------------------------------------------------
        ldp       @CL1,DP
        ldiu      @CL1,ar4              ; |55| 
	.line	6
;----------------------------------------------------------------------
;  58 | old_preempt = NU_Change_Preemption(NU_NO_PREEMPT);    //不再切换任务,避
;     | 免被其他任务打断,造成误动                                              
;----------------------------------------------------------------------
        ldp       @CL2,DP
        ldiu      8,r1                  ; |58| 
        ldiu      @CL2,r0               ; |58| 
        push      r1                    ; |58| 
        callu     r0                    ; far call to _TCSE_Change_Preemption	; |58| 
                                        ; |58| Far Call Occurs
        subi      1,sp                  ; |58| 
	.line	8
;----------------------------------------------------------------------
;  60 | *p ^= (1 << chn);                                                      
;----------------------------------------------------------------------
        ldiu      1,r1                  ; |60| 
        ash       *-fp(2),r1            ; |60| 
        xor3      r1,*ar4,r1            ; |60| 
        sti       r1,*ar4               ; |60| 
	.line	9
;----------------------------------------------------------------------
;  61 | *pCTRLPORT = *p;                                                       
;----------------------------------------------------------------------
        ldp       @CL3,DP
        ldiu      @CL3,ar0              ; |61| 
        ldiu      *ar0,ar0              ; |61| 
        ldiu      *ar4,r1               ; |61| 
        sti       r1,*ar0               ; |61| 
	.line	11
;----------------------------------------------------------------------
;  63 | NU_Change_Preemption(old_preempt);                    //可以切换任务   
;----------------------------------------------------------------------
        ldp       @CL2,DP
        push      r0                    ; |63| 
        ldiu      @CL2,r1               ; |63| 
        callu     r1                    ; far call to _TCSE_Change_Preemption	; |63| 
                                        ; |63| Far Call Occurs
        subi      1,sp                  ; |63| 
	.line	12
                                        ; Begin Epilog Code
        ldiu      *-fp(1),r1
        ldiu      *fp,fp
                                        ; Restore SOE Registers
        pop       ar4
                                        ; Unallocate the Frame
        subi      2,sp
        bu        r1
;*      Branch Occurs to r1 
	.endfunc	64,000001000h,0


	.sect	 ".text"

	.global	_Switch_Output_on
	.sym	_Switch_Output_on,_Switch_Output_on,32,2,0
	.func	69
;******************************************************************************
;* FUNCTION NAME: _Switch_Output_on                                           *
;*                                                                            *
;*   Architecture       : TMS320C32                                           *
;*   Calling Convention : Stack Parameter Convention                          *
;*   Function Uses Regs : r0,r1,ar0,fp,ar4,ar5,sp                             *
;*   Regs Saved         : ar4,ar5                                             *
;*   Stack Frame        : Full (w/ debug)                                     *
;*   Total Frame Size   : 2 Call + 1 Parm + 0 Auto + 2 SOE = 5 words          *
;******************************************************************************
_Switch_Output_on:
	.sym	_chn,-2,14,9,32
;* ar5   assigned to _p
	.sym	_p,13,24,4,32,.fake5
;* ar4   assigned to _pbuf
	.sym	_pbuf,12,30,4,32
;* r0    assigned to _old_preempt
	.sym	_old_preempt,0,12,4,32
	.line	1
;----------------------------------------------------------------------
;  69 | VOID Switch_Output_on(UNSIGNED chn)                                    
;----------------------------------------------------------------------
        push      fp
        ldiu      sp,fp
        push      ar4
        push      ar5
	.line	2
	.line	3
;----------------------------------------------------------------------
;  71 | register DOSTRU   *p = &DOChn[chn];                                    
;----------------------------------------------------------------------
        ldp       @CL4,DP
        ldiu      *-fp(2),ar5           ; |71| 
        ash       1,ar5                 ; |71| 
        addi      @CL4,ar5              ; |71| Unsigned
	.line	4
;----------------------------------------------------------------------
;  72 | register UNSIGNED *pbuf = &Switchout_buf;                              
;  73 | register OPTION   old_preempt;                                         
;----------------------------------------------------------------------
        ldp       @CL5,DP
        ldiu      @CL5,ar4              ; |72| 
	.line	7
;----------------------------------------------------------------------
;  75 | old_preempt = NU_Change_Preemption(NU_NO_PREEMPT);    //不再切换任务,避
;     | 免被其他任务打断,造成误动                                              
;----------------------------------------------------------------------
        ldp       @CL2,DP
        ldiu      8,r1                  ; |75| 
        ldiu      @CL2,r0               ; |75| 
        push      r1                    ; |75| 
        callu     r0                    ; far call to _TCSE_Change_Preemption	; |75| 
                                        ; |75| Far Call Occurs
        subi      1,sp                  ; |75| 
	.line	9
;----------------------------------------------------------------------
;  77 | *pbuf &= ~(1 << chn);                                                  
;----------------------------------------------------------------------
        ldiu      1,r1                  ; |77| 
        ash       *-fp(2),r1            ; |77| 
        andn3     r1,*ar4,r1            ; |77| 
        sti       r1,*ar4               ; |77| 
	.line	10
;----------------------------------------------------------------------
;  78 | *pDOPORT = *pbuf;                                                      
;----------------------------------------------------------------------
        ldp       @CL6,DP
        ldiu      @CL6,ar0              ; |78| 
        ldiu      *ar0,ar0              ; |78| 
        ldiu      *ar4,r1               ; |78| 
        sti       r1,*ar0               ; |78| 
	.line	12
;----------------------------------------------------------------------
;  80 | p->clock = TMD_System_Clock;                                           
;----------------------------------------------------------------------
        ldp       @CL7,DP
        ldiu      @CL7,ar0              ; |80| 
        ldiu      *ar0,r1               ; |80| 
        sti       r1,*ar5               ; |80| 
	.line	13
;----------------------------------------------------------------------
;  81 | p->state = 0x1;                                                        
;----------------------------------------------------------------------
        ldiu      1,r1                  ; |81| 
        sti       r1,*+ar5(1)           ; |81| 
	.line	15
;----------------------------------------------------------------------
;  83 | NU_Change_Preemption(old_preempt);                    //可以切换任务   
;----------------------------------------------------------------------
        ldp       @CL2,DP
        push      r0                    ; |83| 
        ldiu      @CL2,r1               ; |83| 
        callu     r1                    ; far call to _TCSE_Change_Preemption	; |83| 
                                        ; |83| Far Call Occurs
        subi      1,sp                  ; |83| 
	.line	16
                                        ; Begin Epilog Code
        ldiu      *-fp(1),r1
        ldiu      *fp,fp
                                        ; Restore SOE Registers
        pop       ar5
        pop       ar4
                                        ; Unallocate the Frame
        subi      2,sp
        bu        r1
;*      Branch Occurs to r1 
	.endfunc	84,000003000h,0


	.sect	 ".text"

	.global	_Switch_Output_off
	.sym	_Switch_Output_off,_Switch_Output_off,32,2,0
	.func	89
;******************************************************************************
;* FUNCTION NAME: _Switch_Output_off                                          *
;*                                                                            *
;*   Architecture       : TMS320C32                                           *
;*   Calling Convention : Stack Parameter Convention                          *
;*   Function Uses Regs : r0,r1,ar0,fp,ar4,ar5,sp                             *
;*   Regs Saved         : ar4,ar5                                             *
;*   Stack Frame        : Full (w/ debug)                                     *
;*   Total Frame Size   : 2 Call + 1 Parm + 0 Auto + 2 SOE = 5 words          *
;******************************************************************************
_Switch_Output_off:
	.sym	_chn,-2,14,9,32
;* ar4   assigned to _p
	.sym	_p,12,24,4,32,.fake5
;* ar5   assigned to _pbuf
	.sym	_pbuf,13,30,4,32
;* r0    assigned to _old_preempt
	.sym	_old_preempt,0,12,4,32
	.line	1
;----------------------------------------------------------------------
;  89 | VOID Switch_Output_off(UNSIGNED chn)                                   
;----------------------------------------------------------------------
        push      fp
        ldiu      sp,fp
        push      ar4
        push      ar5
	.line	2
	.line	3
;----------------------------------------------------------------------
;  91 | register DOSTRU   *p = &DOChn[chn];                                    
;----------------------------------------------------------------------
        ldp       @CL4,DP
        ldiu      *-fp(2),ar4           ; |91| 
        ash       1,ar4                 ; |91| 
        addi      @CL4,ar4              ; |91| Unsigned
	.line	4
;----------------------------------------------------------------------
;  92 | register UNSIGNED *pbuf = &Switchout_buf;                              
;  93 | register OPTION   old_preempt;                                         
;----------------------------------------------------------------------
        ldp       @CL5,DP
        ldiu      @CL5,ar5              ; |92| 
	.line	7
;----------------------------------------------------------------------
;  95 | old_preempt = NU_Change_Preemption(NU_NO_PREEMPT);    //不再切换任务,避
;     | 免被其他任务打断,造成误动                                              
;----------------------------------------------------------------------
        ldp       @CL2,DP
        ldiu      8,r1                  ; |95| 
        ldiu      @CL2,r0               ; |95| 
        push      r1                    ; |95| 
        callu     r0                    ; far call to _TCSE_Change_Preemption	; |95| 
                                        ; |95| Far Call Occurs
        subi      1,sp                  ; |95| 
	.line	9
;----------------------------------------------------------------------
;  97 | *pbuf |= 1 << chn;                                                     
;----------------------------------------------------------------------
        ldiu      1,r1                  ; |97| 
        ash       *-fp(2),r1            ; |97| 
        or3       r1,*ar5,r1            ; |97| 
        sti       r1,*ar5               ; |97| 
	.line	10
;----------------------------------------------------------------------
;  98 | *pDOPORT = *pbuf;                                                      
;----------------------------------------------------------------------
        ldp       @CL6,DP
        ldiu      @CL6,ar0              ; |98| 
        ldiu      *ar0,ar0              ; |98| 
        ldiu      *ar5,r1               ; |98| 
        sti       r1,*ar0               ; |98| 
	.line	12
;----------------------------------------------------------------------
; 100 | p->state = 0x0;                                                        
;----------------------------------------------------------------------
        ldiu      0,r1                  ; |100| 
        sti       r1,*+ar4(1)           ; |100| 
	.line	14
;----------------------------------------------------------------------
; 102 | NU_Change_Preemption(old_preempt);                    //可以切换任务   

⌨️ 快捷键说明

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