📄 basedo.asm
字号:
;----------------------------------------------------------------------
; 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 + -