亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_a.s43

?? uxos在MSP430上的移植代碼
?? S43
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                              (c) Copyright 2002, Micrium, Inc., Weston, FL
;                                          All Rights Reserved
;
;                                               TI MSP430
;
;
; File         : OS_CPU_A.S43
; By           : Jian Chen (yenger@hotmail.com)
;                Jean J. Labrosse
;********************************************************************************************************

#include   <msp430x14x.h>

;********************************************************************************************************
;                                           MACRO DEFINITIONS
;********************************************************************************************************

PUSHALL     MACRO
            push     r4
            push     r5
            push     r6
            push     r7
            push     r8
            push     r9
            push     r10
            push     r11
            push     r12
            push     r13
            push     r14
            push     r15         
            ENDM

POPALL      MACRO
            pop      r15
            pop      r14
            pop      r13
            pop      r12
            pop      r11
            pop      r10
            pop      r9
            pop      r8
            pop      r7
            pop      r6
            pop      r5
            pop      r4          
            ENDM
            
;********************************************************************************************************
;                                  PUBLIC AND EXTERNAL DECLARATIONS
;********************************************************************************************************

            EXTERN  OSIntExit
            EXTERN  OSIntNesting

            EXTERN  OSISRStkPtr

            EXTERN  OSPrioCur
            EXTERN  OSPrioHighRdy

            EXTERN  OSRunning

            EXTERN  OSTCBCur
            EXTERN  OSTCBHighRdy

            EXTERN  OSTaskSwHook
            EXTERN  OSTimeTick

            PUBLIC  OSCtxSw
            PUBLIC  OSCPURestoreSR
            PUBLIC  OSCPUSaveSR
            PUBLIC  OSIntCtxSw
            PUBLIC  OSStartHighRdy
            PUBLIC  WDT_ISR

;********************************************************************************************************
;                                  START HIGHEST PRIORITY READY TASK
;
; Description: This function is called by OSStart() to start the highest priority task that is ready to run.
;
; Note       : OSStartHighRdy() MUST:
;                 a) Call OSTaskSwHook() then,
;                 b) Set OSRunning to TRUE,
;                 c) Switch to the highest priority task.
;********************************************************************************************************

            RSEG    CODE                    ; Program code

OSStartHighRdy
            call     #OSTaskSwHook

            mov.b    #1, &OSRunning         ; kernel running

            mov.w    SP, &OSISRStkPtr       ; save interrupt stack              

            mov.w    &OSTCBHighRdy, R13     ; load highest ready task stack
            mov.w    @R13, SP

            POPALL                          ; pop all registers
             
            reti                            ; emulate return from interrupt
 

;********************************************************************************************************
;                                     TASK LEVEL CONTEXT SWITCH
;
; Description: This function is called by OS_Sched() to perform a task level context switch.
;
; Note       : OSCtxSw() MUST:
;                 a) Save the current task's registers onto the current task stack
;                 b) Save the SP into the current task's OS_TCB
;                 c) Call OSTaskSwHook()
;                 d) Copy OSPrioHighRdy to OSPrioCur
;                 e) Copy OSTCBHighRdy to OSTCBCur
;                 f) Load the SP with OSTCBHighRdy->OSTCBStkPtr
;                 g) Restore all the registers from the high priority task stack
;                 h) Perform a return from interrupt
;********************************************************************************************************

OSCtxSw
            push      sr                    ; emulate interrupt by also saving the SR
            PUSHALL                         ; push all registers             
             
            mov.w     &OSTCBCur, R13        ; OSTCBCur->OSTCBStkPtr = SP
            mov.w     SP, 0(R13)

            call      #OSTaskSwHook

            mov.b     &OSPrioHighRdy, R13   ; OSPrioCur = OSPrioHighRdy
            mov.b     R13, &OSPrioCur       ;
                          
            mov.w     &OSTCBHighRdy, R13    ; OSTCBCur  = OSTCBHighRdy
            mov.w     R13, &OSTCBCur        ;
                          
            mov.w     @R13, SP              ; SP        = OSTCBHighRdy->OSTCBStkPtr
             
            POPALL                          ; pop all registers
             
            reti                            ; return from interrup


;********************************************************************************************************
;                                       ISR LEVEL CONTEXT SWITCH
;
; Description: This function is called by OSIntExit() to perform an ISR level context switch.
;
; Note       : OSIntCtxSw() MUST:
;                 a) Call OSTaskSwHook()
;                 b) Copy OSPrioHighRdy to OSPrioCur
;                 c) Copy OSTCBHighRdy to OSTCBCur
;                 d) Load the SP with OSTCBHighRdy->OSTCBStkPtr
;                 e) Restore all the registers from the high priority task stack
;                 f) Perform a return from interrupt
;********************************************************************************************************

OSIntCtxSw
             
            call      #OSTaskSwHook

            mov.b     &OSPrioHighRdy, R13   ; OSPrioCur = OSPrioHighRdy
            mov.b     R13, &OSPrioCur       ;
                          
            mov.w     &OSTCBHighRdy, R13    ; OSTCBCur  = OSTCBHighRdy
            mov.w     R13, &OSTCBCur        ;
                          
            mov.w     @R13, SP              ; SP        = OSTCBHighRdy->OSTCBStkPtr
             
            POPALL                          ; pop all registers
             
            reti                            ; return from interrup


;********************************************************************************************************
;                                              TICK ISR
;
; Description: This ISR handles tick interrupts.  This ISR uses the Watchdog timer as the tick source.
;
; Notes      : 1) The following C pseudo-code describes the operations being performed in the code below.
;
;                 Save all the CPU registers
;                 if (OSIntNesting == 0) {
;                     OSTCBCur->OSTCBStkPtr = SP;
;                     SP                    = OSISRStkPtr;  /* Use the ISR stack from now on           */
;                 }
;                 OSIntNesting++;
;                 Enable interrupt nesting;                 /* Allow nesting of interrupts (if needed) */
;                 Clear the interrupt source;
;                 OSTimeTick();                             /* Call uC/OS-II's tick handler            */
;                 DISABLE general interrupts;               /* Must DI before calling OSIntExit()      */
;                 OSIntExit();
;                 if (OSIntNesting == 0) {
;                     SP = OSTCBHighRdy->OSTCBStkPtr;       /* Restore the current task's stack        */
;                 }
;                 Restore the CPU registers
;                 Return from interrupt.
;
;              2) ALL ISRs should be written like this!
;
;              3) You MUST disable general interrupts BEFORE you call OSIntExit() because an interrupt 
;                 COULD occur just as OSIntExit() returns and thus, the new ISR would save the SP of 
;                 the ISR stack and NOT the SP of the task stack.  This of course will most likely cause
;                 the code to crash.  By disabling interrupts BEFORE OSIntExit(), interrupts would be
;                 disabled when OSIntExit() would return.  This assumes that you are using OS_CRITICAL_METHOD
;                 #3 (which is the prefered method).
;
;              4) If you DON'T use a separate ISR stack then you don't need to disable general interrupts 
;                 just before calling OSIntExit().  The pseudo-code for an ISR would thus look like this:
;
;                 Save all the CPU registers
;                 if (OSIntNesting == 0) {
;                     OSTCBCur->OSTCBStkPtr = SP;
;                 }
;                 OSIntNesting++;
;                 Enable interrupt nesting;                 /* Allow nesting of interrupts (if needed) */
;                 Clear the interrupt source;
;                 OSTimeTick();                             /* Call uC/OS-II's tick handler            */
;                 OSIntExit();
;                 Restore the CPU registers
;                 Return from interrupt.
;********************************************************************************************************

WDT_ISR                                     ; wd timer ISR
            PUSHALL                         ; push all registers             
             
            bic.b    #0x01, IE1             ; disable wd timer interrupt
             
            cmp.b    #0, &OSIntNesting      ; if (OSIntNesting == 0)  
            jne      WDT_ISR_1
                               
            mov.w    &OSTCBCur, R13         ;     save task stack
            mov.w    SP, 0(R13)

            mov.w    &OSISRStkPtr, SP       ;     load interrupt stack             

WDT_ISR_1
            inc.b    &OSIntNesting          ; increase OSIntNesting
            bis.b    #0x01, IE1             ; enable wd timer interrupt
             
            EINT                            ; enable general interrupt to allow for interrupt nesting

            call     #OSTimeTick            ; call ticks routine             

            DINT                            ; IMPORTANT: disable general interrupt BEFORE calling OSIntExit()

            call     #OSIntExit             ; call ticks routine

            cmp.b    #0, &OSIntNesting      ; if (OSIntNesting == 0) 
            jne      WDT_ISR_2

            mov.w    &OSTCBHighRdy, R13     ;     restore task stack SP
            mov.w    @R13, SP
                       
WDT_ISR_2
            POPALL                          ; pop all registers
             
            reti                            ; return from interrupt
                                           

;********************************************************************************************************
;                             SAVE AND RESTORE THE CPU'S STATUS REGISTER
;
; Description: These functions are used to implement OS_CRITICAL_METHOD #3 by saving the status register
;              in a local variable of the calling function and then, disables interrupts. 
;
; Notes      : R12 is assumed to hold the argument passed to OSCPUSaveSR() and also, the value returned
;              by OSCPURestoreSR().
;********************************************************************************************************

OSCPUSaveSR
            MOV.W    SR,R12
            DINT
            RET


OSCPURestoreSR
            MOV.W    R12,SR
            RET

;********************************************************************************************************
;                                 WD TIMER INTERRUPT VECTOR ENTRY
;
; MSP430x11x1/MSP430F14x Interrupt vectors             
;********************************************************************************************************
            COMMON  INTVEC

            ORG     WDT_VECTOR 
WDT_VEC     DW      WDT_ISR                 ; interrupt vector. Watchdog/Timer, Timer mode

            END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人在线观看| 国产成人免费在线视频| 日韩电影在线看| 成人精品鲁一区一区二区| 欧美电影在哪看比较好| 1024成人网| 国产精品资源站在线| 欧美日韩高清影院| 中文字幕日本乱码精品影院| 老司机免费视频一区二区| 一本色道a无线码一区v| 中文字幕乱码日本亚洲一区二区| 亚洲线精品一区二区三区| 国产成人自拍在线| 精品久久久网站| 日韩高清一区在线| 欧美视频一区在线| 一区二区成人在线视频| 99久免费精品视频在线观看| 国产肉丝袜一区二区| 韩国欧美国产1区| 欧美一区二区美女| 天堂影院一区二区| 欧美夫妻性生活| 午夜精品久久久久久久久| 欧美日韩在线播| 亚洲一区二区三区中文字幕 | 国产精品美女久久久久久久久| 日本亚洲天堂网| 91精品综合久久久久久| 日韩av电影一区| 91精品国产麻豆| 免费观看久久久4p| 91精品国产乱码久久蜜臀| 日韩制服丝袜先锋影音| 制服视频三区第一页精品| 天天影视色香欲综合网老头| 9191精品国产综合久久久久久| 五月天久久比比资源色| 91精品在线麻豆| 欧美性生活久久| 亚洲国产人成综合网站| 欧美福利一区二区| 久久9热精品视频| 久久久久久毛片| 成人网页在线观看| 亚洲精品欧美综合四区| 欧美在线你懂的| 日韩影院在线观看| 精品国产乱码久久| 9久草视频在线视频精品| 一区二区三区国产豹纹内裤在线 | 欧美在线免费观看亚洲| 日日噜噜夜夜狠狠视频欧美人| 欧美一区二区在线免费播放 | 综合久久国产九一剧情麻豆| 色综合久久久久综合99| 丝袜国产日韩另类美女| 精品日韩成人av| kk眼镜猥琐国模调教系列一区二区| 亚洲黄色免费网站| 欧美一级专区免费大片| 成人妖精视频yjsp地址| 亚洲成人动漫av| 久久久久99精品一区| 色一情一伦一子一伦一区| 日本sm残虐另类| 一区精品在线播放| 91精品在线观看入口| 成人av电影免费在线播放| 调教+趴+乳夹+国产+精品| 国产精品理论在线观看| 欧美一区二区视频在线观看| 成人app下载| 精品一二线国产| 亚洲免费观看高清| 欧美videossexotv100| 91一区二区在线| 精品一区二区在线免费观看| 亚洲免费视频中文字幕| 久久久不卡网国产精品二区| 欧美丝袜第三区| 成人免费观看视频| 久久成人av少妇免费| 亚洲一区自拍偷拍| 国产精品女同互慰在线看| 日韩女同互慰一区二区| 欧美在线综合视频| 成人黄色电影在线| 国产永久精品大片wwwapp| 亚洲国产成人va在线观看天堂| 欧美国产欧美综合| 26uuu亚洲综合色| 337p亚洲精品色噜噜噜| 欧美三级电影网站| 91免费看`日韩一区二区| 欧美性受极品xxxx喷水| www.av亚洲| 国产福利视频一区二区三区| 麻豆91在线播放| 视频一区中文字幕| 亚洲va国产天堂va久久en| 日韩理论片网站| 国产精品女同一区二区三区| 精品国产乱码久久久久久免费| 日韩一区二区三区四区| 欧美日韩成人在线| 欧美日韩色一区| 欧美日韩一区视频| 欧美日韩精品系列| 欧美日韩成人高清| 91精品国产黑色紧身裤美女| 欧美日本国产一区| 欧美一区二区在线观看| 69堂精品视频| 欧美一级欧美一级在线播放| 欧美一卡二卡在线观看| 制服丝袜激情欧洲亚洲| 日韩欧美国产高清| 精品免费国产二区三区| 精品国产一区二区三区久久影院 | 日本中文一区二区三区| 免费成人在线视频观看| 麻豆国产精品视频| 国产寡妇亲子伦一区二区| 粉嫩绯色av一区二区在线观看| 成人18视频在线播放| 91在线视频官网| 欧美日韩精品久久久| 欧美一级高清大全免费观看| 欧美va在线播放| 中文字幕第一区| 亚洲色图欧美激情| 亚洲成人精品一区| 日韩高清在线电影| 国模无码大尺度一区二区三区| 国产成人精品三级| 色综合久久中文综合久久97| 欧美军同video69gay| 精品国产乱码久久久久久浪潮 | 国产麻豆精品久久一二三| 国产精品一二三区在线| 色综合天天做天天爱| 91精品国产一区二区三区| 久久久亚洲精华液精华液精华液| 国产精品免费观看视频| 亚洲成av人影院| 国产精品羞羞答答xxdd| 色8久久人人97超碰香蕉987| 欧美一区二区精品久久911| 国产精品麻豆网站| 日韩激情一区二区| hitomi一区二区三区精品| 欧美日韩黄视频| 中文字幕高清一区| 日韩在线一二三区| 精品美女在线观看| 亚洲一区二区三区精品在线| 精品无人区卡一卡二卡三乱码免费卡 | 狠狠色丁香久久婷婷综| 91亚洲精品久久久蜜桃网站| 日韩欧美色综合网站| 国产精品精品国产色婷婷| 捆绑调教美女网站视频一区| 91色porny在线视频| 日韩精品一区二区三区老鸭窝| 亚洲色图在线视频| 国产麻豆精品视频| 91精品久久久久久久99蜜桃 | 欧美精品一区男女天堂| 亚洲电影视频在线| 成人精品电影在线观看| 欧美大片在线观看一区| 一区二区三区不卡视频| 成人性生交大合| 337p粉嫩大胆色噜噜噜噜亚洲| 婷婷一区二区三区| 色婷婷激情综合| 国产精品狼人久久影院观看方式| 水野朝阳av一区二区三区| 91国产丝袜在线播放| 国产午夜精品美女毛片视频| 麻豆久久久久久久| 777奇米成人网| 午夜av一区二区| 欧美曰成人黄网| 亚洲一区二区三区小说| 一本色道久久综合亚洲精品按摩| 欧美高清在线精品一区| 激情综合色综合久久| 欧美一区二区三区四区五区| 亚洲成人自拍偷拍| 欧美在线观看视频一区二区 | 中文字幕中文字幕在线一区| 日本一不卡视频| 91 com成人网| 婷婷中文字幕一区三区| 这里只有精品视频在线观看| 日韩国产在线一| 91精品国产品国语在线不卡|