1; 2; These are the macros used by the v850 port of the uCOS/II. 3; 4 5 6 7 8 9;******************************************************************** 10; function: 11; description: 12; --- Modifies ---------------------------------------------- 13; IO : 14; Mem: 15; CPU: 16; --- Uses -------------------------------------------------- 17; IO : 18; Mem: 19; --- Input ------------------------------------------------- 20; --- Output ------------------------------------------------ 21; --- Notes ------------------------------------------------- 22;==================================================================== 23 24SAVE_CPU_CTX MACRO 25 ;Save all registers on entry (r3 is the stack pointer) 26 prepare {r23,r24,r25,r26,r27,r28,r29,r30,r31},(8+(4*14)) ;Add 8 bytes for 2 more registers 27 mov sp, ep 28 sst.w r1, 0[ep] 29 sst.w r2, 4[ep] 30 sst.w r5, 8[ep] 31 sst.w r6, 12[ep] 32 sst.w r7, 16[ep] 33 sst.w r8, 20[ep] 34 sst.w r9, 24[ep] 35 sst.w r10, 28[ep] 36 sst.w r11, 32[ep] 37 sst.w r12, 36[ep] 38 sst.w r13, 40[ep] 39 sst.w r14, 44[ep] 40 sst.w r15, 48[ep] 41 sst.w r16, 52[ep] 42 ;Save caller's PC 43 stsr EIPC, r1 44 sst.w r1, 56[ep] 45 ;Save caller's PSW 46 stsr EIPSW, r1 47 sst.w r1, 60[ep] 48 49 ENDMAC 50 51 52 53 54 55;******************************************************************** 56; function: 57; description: 58; --- Modifies ---------------------------------------------- 59; IO : 60; Mem: 61; CPU: 62; --- Uses -------------------------------------------------- 63; IO : 64; Mem: 65; --- Input ------------------------------------------------- 66; --- Output ------------------------------------------------ 67; --- Notes ------------------------------------------------- 68;==================================================================== 69SAVE_SP MACRO 70 ;Save stack pointer on OSTCBCur->OSTCBStkPtr (OSTCBStkPtr=0) 71 mov OSTCBCur, r21 72 ld.w 0[r21], r21 73 st.w sp, 0[r21] 74 ENDMAC 75 76 77 78;******************************************************************** 79; function: 80; description: 81; --- Modifies ---------------------------------------------- 82; IO : 83; Mem: 84; CPU: 85; --- Uses -------------------------------------------------- 86; IO : 87; Mem: 88; --- Input ------------------------------------------------- 89; --- Output ------------------------------------------------ 90; --- Notes ------------------------------------------------- 91;==================================================================== 92ISR_ENTRY MACRO 93 LOCAL _DontSaveSP 94 95 ;Save all CPU registers according to the standard stack frame 96 SAVE_CPU_CTX 97 98 mov OSIntNesting, r1 ;Increment OSNesting by one 99 LD.BU 0[r1],r2 100 add 1, r2 101 ST.B r2, 0[r1] 102 cmp 1, r2 ;If OSNesting==1 save SP in current TCB 103 bne _DontSaveSP 104 SAVE_SP 105_DontSaveSP: 106 ENDMAC 107 108;******************************************************************** 109; function: 110; description: 111; --- Modifies ---------------------------------------------- 112; IO : 113; Mem: 114; CPU: 115; --- Uses -------------------------------------------------- 116; IO : 117; Mem: 118; --- Input ------------------------------------------------- 119; --- Output ------------------------------------------------ 120; --- Notes ------------------------------------------------- 121;==================================================================== 122ISR_EXIT MACRO 123 jarl OSIntExit, lp ;Call OSIntExit() 124 jr OS_Restore_CPU_Context ;Restore processors registers and execute RETI 125 ENDMAC 126