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

📄 os_cpu_a.lis

📁 将本站的UCOSFORAVR128V276版本升级到了280版
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0000           ;********************************************************************************************************
 0000           ;                                               uC/OS-II
 0000           ;                                         The Real-Time Kernel
 0000           ;
 0000           ;                                       ATmega128  Specific code
 0000           ;
 0000           ;
 0000           ; File     : OS_CPU_A.S
 0000           ; By       : Ole Saether
 0000           ;            Jean J. Labrosse
 0000           ;********************************************************************************************************
 0000           ;                                           I/O PORT ADDRESSES
 0000           ;********************************************************************************************************
 0000           
 0001           BIT00   = 0x01
 0002           BIT01   = 0x02
 0004           BIT02   = 0x04
 0008           BIT03   = 0x08
 0010           BIT04   = 0x10
 0020           BIT05   = 0x20
 0040           BIT06   = 0x40
 0080           BIT07   = 0x80
 0000           
 003F           SREG    = 0x3F
 003E           SPH     = 0x3E
 003D           SPL     = 0x3D
 003B           RAMPZ   = 0x3B
 0000           
 0000           ;********************************************************************************************************
 0000           ;                                         MACROS
 0000           ;********************************************************************************************************
 0000           
 0000                           .macro  PUSH_ALL                            ; Save all registers
 0000                           ST      -Y,R0
 0000                           ST      -Y,R1
 0000                           ST      -Y,R2
 0000                           ST      -Y,R3
 0000                           ST      -Y,R4
 0000                           ST      -Y,R5
 0000                           ST      -Y,R6
 0000                           ST      -Y,R7
 0000                           ST      -Y,R8
 0000                           ST      -Y,R9
 0000                           ST      -Y,R10
 0000                           ST      -Y,R11
 0000                           ST      -Y,R12
 0000                           ST      -Y,R13
 0000                           ST      -Y,R14
 0000                           ST      -Y,R15
 0000                           ST      -Y,R16
 0000                           ST      -Y,R17
 0000                           ST      -Y,R18
 0000                           ST      -Y,R19
 0000                           ST      -Y,R20
 0000                           ST      -Y,R21
 0000                           ST      -Y,R22
 0000                           ST      -Y,R23
 0000                           ST      -Y,R24
 0000                           ST      -Y,R25
 0000                           ST      -Y,R26
 0000                           ST      -Y,R27
 0000                           ST      -Y,R30
 0000                           ST      -Y,R31
 0000                           IN      R16,RAMPZ
 0000                           ST      -Y,R16
 0000                           .macro  POP_ALL                             ; Restore all registers
 0000                           LD      R16,Y+
 0000                           OUT     RAMPZ,R16
 0000                           LD      R31,Y+
 0000                           LD      R30,Y+
 0000                           LD      R27,Y+
 0000                           LD      R26,Y+
 0000                           LD      R25,Y+
 0000                           LD      R24,Y+
 0000                           LD      R23,Y+
 0000                           LD      R22,Y+
 0000                           LD      R21,Y+
 0000                           LD      R20,Y+
 0000                           LD      R19,Y+
 0000                           LD      R18,Y+
 0000                           LD      R17,Y+
 0000                           LD      R16,Y+
 0000                           LD      R15,Y+
 0000                           LD      R14,Y+
 0000                           LD      R13,Y+
 0000                           LD      R12,Y+
 0000                           LD      R11,Y+
 0000                           LD      R10,Y+
 0000                           LD      R9,Y+
 0000                           LD      R8,Y+
 0000                           LD      R7,Y+
 0000                           LD      R6,Y+
 0000                           LD      R5,Y+
 0000                           LD      R4,Y+
 0000                           LD      R3,Y+
 0000                           LD      R2,Y+
 0000                           LD      R1,Y+
 0000                           LD      R0,Y+
 0000                           .macro  PUSH_SP                             ; Save stack pointer
 0000                           IN      R16,SPH
 0000                           ST      -Y,R16
 0000                           IN      R16,SPL
 0000                           ST      -Y,R16
 0000                           .macro  POP_SP                              ; Restore stack pointer
 0000                           LD      R16,Y+
 0000                           OUT     SPL,R16
 0000                           LD      R16,Y+
 0000                           OUT     SPH,R16
 0000                           .macro  PUSH_SREG                           ; Save status register
 0000                           IN      R16,SREG
 0000                           ST      -Y,R16
 0000                           .macro  POP_SREG                            ; Restore status registers
 0000                           LD      R16,Y+
 0000                           OUT     SREG,R16
                                .area   text(rel)
                
                ;/*$PAGE*/.
                ;********************************************************************************************************
                ;                            DISABLE/ENABLE INTERRUPTS USING OS_CRITICAL_METHOD #3
                ;
                ; Description : These functions are used to disable and enable interrupts using OS_CRITICAL_METHOD #3.
                ;
                ;               OS_CPU_SR  OSCPUSaveSR (void)
                ;                     Get current value of SREG
                ;                     Disable interrupts
                ;                     Return original value of SREG
                ;
                ;               void  OSCPURestoreSR (OS_CPU_SR cpu_sr)
                ;                     Set SREG to cpu_sr
                ;                     Return
                ;********************************************************************************************************
                
 0000           _OS_CPU_SR_Save::
 0000 0FB7                      IN      R16,SREG                    ; Get current state of interrupts disable flag
 0002 F894                      CLI                                 ; Disable interrupts
 0004 0895                      RET                                 ; Return original SREG value in R16
 0006           
 0006           
 0006           _OS_CPU_SR_Restore::
 0006 0FBF                      OUT     SREG,R16                    ; Restore SREG
 0008 0895                      RET                                 ; Return
 000A           
 000A           ;/*$PAGE*/.
 000A           ;********************************************************************************************************
 000A           ;                               START HIGHEST PRIORITY TASK READY-TO-RUN
 000A           ;
 000A           ; Description : This function is called by OSStart() to start the highest priority task that was created
 000A           ;               by your application before calling OSStart().
 000A           ;
 000A           ; Note(s)     : 1) The (data)stack frame is assumed to look as follows:
 000A           ;
 000A           ;                  OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer           (Low memory)
 000A           ;                                                SPH of (return) stack pointer
 000A           ;                                                Flags to load in status register
 000A           ;                                                R31
 000A           ;                                                R30
 000A           ;                                                R27
 000A           ;                                                .
 000A           ;                                                .
 000A           ;                                                R0
 000A           ;                                                PCH
 000A           ;                                                PCL                                     (High memory)
 000A           ;
 000A           ;                  where the stack pointer points to the task start address.
 000A           ;
 000A           ;
 000A           ;               2) OSStartHighRdy() MUST:
 000A           ;                      a) Call OSTaskSwHook() then,
 000A           ;                      b) Set OSRunning to TRUE,
 000A           ;                      c) Switch to the highest priority task.
 000A           ;********************************************************************************************************
 000A           
 000A           _OSStartHighRdy::
 000A 0E940000                  CALL    _OSTaskSwHook               ; Invoke user defined context switch hook
 000E 00910000                  LDS     R16,_OSRunning              ; Indicate that we are multitasking
 0012 0395                      INC     R16                         ;
 0014 00930000                  STS     _OSRunning,R16              ;
 0018           
 0018 E0910000                  LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
 001C F0910100                  LDS     R31,_OSTCBHighRdy+1         ; ready to run
 0020 C191                      LD      R28,Z+                      ; Load Y (R29:R28) pointer
 0022 D191                      LD      R29,Z+                      ;
 0024           
 0024 0991                      LD      R16,Y+
 0026 0DBF                      OUT     SPL,R16
 0028 0991                      LD      R16,Y+
 002A 0EBF                      OUT     SPH,R16
 002C 0991                      LD      R16,Y+
 002E 0FBF                      OUT     SREG,R16
 0030 0991                      LD      R16,Y+
 0032 0BBF                      OUT     RAMPZ,R16

⌨️ 快捷键说明

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