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

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

?? os_cpu_a.s

?? 在ATEML公司EB40/40a/42/63/55開發板上運行的uCOS-II v2.0。
?? S
字號:
#------------------------------------------------------------------------------
#-         ATMEL Microcontroller Software Support  -  ROUSSET  -
#------------------------------------------------------------------------------
# The software is delivered "AS IS" without warranty or condition of any
# kind, either express, implied or statutory. This includes without
# limitation any warranty or condition with respect to merchantability or
# fitness for any particular purpose, or against the infringements of
# intellectual property rights of others.
#-----------------------------------------------------------------------------
#- File source          : os_cpu.s
#- Object               : AT91 Ucos specific assembly functions
#-
#- 1.0 21/08/00 EL      : creation
#------------------------------------------------------------------------------

	.IFDEF AT91R40008
	.INCLUDE "eb40a.inc"
	.ENDIF

	.IFDEF AT91R40807
	.INCLUDE "eb40.inc"
	.ENDIF

	.IFDEF AT91M40800
	.INCLUDE "eb40.inc"
	.ENDIF

	.IFDEF AT91M42800
	.INCLUDE "eb42.inc"
	.ENDIF

	.IFDEF AT91M63200
	.INCLUDE "eb63.inc"
	.ENDIF

	.IFDEF AT91M55800
    .include "parts/m55800/m55800.inc"
    .INCLUDE "periph/arm7tdmi/arm.inc"
#--------------------------------
#- Advanced Interrupt Controller
#--------------------------------

     .INCLUDE         "../../periph/aic/aic.inc"

    .EQU	TC0_BASE,      TCB0_BASE      /* Channel 0 Base Address */
	.ENDIF
	
	.EXTERN OSTCBCur
	.EXTERN OSTCBHighRdy
	.EXTERN OSPrioCur
	.EXTERN OSPrioHighRdy
    .EXTERN OSRunning
    .EXTERN OSIntNesting
    .EXTERN OSTimeTick
    .EXTERN OSIntEnter
    .EXTERN OSIntExit
           
	.GLOBAL OSTickISR
 	.GLOBAL ARMDisableInt
	.GLOBAL ARMEnableInt
	.GLOBAL OSIntCtxSw
	.GLOBAL OS_TASK_SW
	.GLOBAL OSStartHighRdy


#--------------------------------------------------------------------------------------
ARMDisableInt:             	    
	mrs     r12, CPSR           /* get current CPU mode 			  */
  	orr     r12, r12, #I_BIT    /* set the interrupt disable mode bit */
  	msr     CPSR_c, r12         
  	bx	lr                  
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
ARMEnableInt:
  	mrs 	r12, CPSR             /* move current processor status into reg 12  */
  	bic 	r12, r12, #I_BIT      /* clear the interrupt disable bit 			*/
  	msr 	CPSR_c, r12           
  	bx	lr                    
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
OSIntCtxSw:

# Interrupt Exit if higher priority task ready to run
# New Task Context switch 

	add	sp,sp, #0x18             /* adjust sp to compensate for the call to OSIntExit */
	msr     CPSR_c, #0x92           /* switch to IRQ mode and disable IRQ's              */
			                /* the following 2 lines keep the stack				 */
  	ldmfd   sp!, {r12, r14}         /* restore the stack 								 */
	ldmfd   sp!, {r12}   

	ldr     r12, =AIC_BASE
    str		r12, [r12, #AIC_EOICR]  /* write any value to EOICR to signal end of int	 */
   	msr     CPSR_c, #ARM_MODE_SYS   /* switch back to system mode with IRQ and FIQ enabled */
       
	b  	OSCtxSw                 	/* perform the context switch						 */
                                      
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
OS_TASK_SW:
# Call from OSSched()
# New Task Context switch  
  	stmfd 	sp!, {r0-r12, r14}		/* store current context 		*/
	b  	OSCtxSw                 	/* perform the context switch   */                                
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
OSCtxSw:                  	        
  	mrs 	r4, CPSR                /* load current psr to r4		*/
  	stmfd 	sp!, {r4}               /* save current PSR to stack    */
  	mrs 	r4, SPSR                /* load saved psr to r4         */
  	stmfd 	sp!, {r4}               /* saved saved psr to stack     */

	# OSPrioCur = OSPrioHighRdy
  	ldr 	r4, =OSPrioCur          /* load the current priority pointer */
  	ldr 	r5, =OSPrioHighRdy      /* load address of highest prio task */
  	ldrb  	r6, [r5]                /* load value of highest prio task   */
  	strb  	r6, [r4]                /* store value of highest in current */

	# Get current task TCB address
  	ldr 	r4, =OSTCBCur           /* load pointer						*/
  	ldr 	r5, [r4]                /* load current tcb sp              */
  	str 	sp, [r5]                /* store sp in preempted tasks's TCB*/

  	# Get highest priority task TCB address
  	ldr	r6, =OSTCBHighRdy
  	ldr 	r6, [r6]                /* get highrdy's sp		*/
  	ldr 	sp, [r6]                /* set sp = highrdy[sp] */

  	# OSTCBCur = OSTCBHighRdy
 	str 	r6, [r4]                /* set new current task TCB address		*/
  	ldmfd 	sp!, {r4}               /* load saved SPSR from stack           */
  	msr 	SPSR_c, r4              /* spsr = saved spsr                    */
  	ldmfd 	sp!, {r4}               /* load saved cpsr from stack           */
  	msr 	CPSR_c, r4              /* cpsr = saved cpsr                    */
  	ldmfd 	sp!, {r0-r12, r14}      /* restore r0-r12 and lr interworking   */
  	bx  	r14                     /* interworking branch on lr            */
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
OSStartHighRdy:
    # Set OSRunning == TRUE
  	ldr 	r4, =OSRunning          /* point r4 to OSRunning  	*/
	mov 	r5, #1                  /* move 1 into r5	        */
	strb 	r5, [r4]                /* store r5 in [r4]         */

    # Get current task TCB address
  	ldr 	r4, =OSTCBCur           /* point to current tcb  	*/

    # Get highest priority task TCB address
  	ldr 	r5, =OSTCBHighRdy       /* point to highest tcb  			*/
	ldr 	r5, [r5]                /* get stack pointer  	            */
	ldr 	sp, [r5]                /* sp = highrdy[sp]  	            */
	str 	r5, [r4]                /* set current tcb = highrdy tcb    */
                                    
	ldmfd 	sp!, {r4}               /* get spsr  									*/	
	ldmfd 	sp!, {r4}               /* get cpsr new state from top of the stack  	*/
	msr 	CPSR_c, r4              /* set cpsr = saved CPSR   	                    */
	ldmfd 	sp!, {r0-r12, r14}      /* restore registers r0-r12 and lr	            */
	bx	r14                     	/* branch on new task                           */
#--------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------
OSTickISR:
#- Adjust and save LR_irq in IRQ stack
        sub     r14, r14, #4
        stmfd   sp!, {r14}

#- Save SPSR and r0 in IRQ stack
        mrs     r14, SPSR
        stmfd   sp!, {r12, r14}

#- Write in the IVR to support Protect Mode
#- No effect in Normal Mode
#- De-assert the NIRQ and clear the source in Protect Mode
        ldr     r14, =AIC_BASE
        str     r14, [r14, #AIC_IVR]
    
# read the interrupt status reg to clear it
        ldr     r12,=TC0_BASE       	/* load tc0  base address			*/
        ldr     r12,[r12, #0x020]   	/* read from status register offse  */

#- Enable Interrupt and Switch in SYS Mode
        mrs     r12, CPSR
        bic     r12, r12, #I_BIT
        orr     r12, r12, #ARM_MODE_SYS
        msr     CPSR_c, r12              

#- Save scratch/used registers and LR in SYS Stack
        stmfd   sp!, { r0-r12,r14}
	            	
        ldr     r12, =OSIntEnter         
        mov     r14,pc                   
        bx      r12			 			/* Branch to OsIntEnter */
        ldr     r12, =OSTimeTick         
        mov     r14,pc                   
        bx      r12                     /* Branch to OsTimeTick */      
        ldr     r12, =OSIntExit          
        mov     r14,pc                   
        bx      r12                     /* Branch to OSIntExit 	*/
 
# Interrupt Exit if no higher priority task ready to run
         
# restore interrupted task  
#- Restore scratch/used registers and LR from System Stack
        ldmfd   sp!, { r0-r12, r14}
                    
#- Disable Interrupt and switch back in IRQ mode
        mrs	r12, CPSR
        bic     r12, r12, #ARM_MODE_SYS
        orr     r12, r12, #I_BIT|ARM_MODE_IRQ
        msr     CPSR_c, r12
        
#- Mark the End of Interrupt on the AIC
        ldr     r12, =AIC_BASE
        str	r12, [r12, #AIC_EOICR]
#- Restore SPSR_irq and r0 from IRQ stack
        ldmfd   sp!, {r12, r14}
        msr     SPSR_c, r14
#- Restore adjusted  LR_irq from IRQ stack directly in the PC
        ldmfd   sp!, {pc}^
        .END
#--------------------------------------------------------------------------------------


.END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类中文字| 国产精品成人免费在线| 一本大道久久a久久精品综合| 国产一区二区视频在线| 人禽交欧美网站| 久久99国产乱子伦精品免费| 蜜臀精品一区二区三区在线观看| 婷婷国产在线综合| 捆绑调教美女网站视频一区| 久久99精品久久久| 国产一区在线看| www.66久久| 欧美性xxxxxx少妇| 欧美一区二区三区在线看| 日韩欧美一区二区不卡| 国产亚洲一区二区三区| 国产精品色婷婷久久58| 亚洲人午夜精品天堂一二香蕉| 亚洲特级片在线| 亚洲高清免费在线| 国产在线精品一区二区夜色| 成人黄色片在线观看| 欧美三级电影在线观看| 亚洲精品在线观看网站| 国产精品蜜臀在线观看| 午夜精品一区二区三区三上悠亚| 精品一区二区三区免费毛片爱| 成人黄色小视频| 91.com在线观看| 国产午夜精品久久久久久久 | 亚洲国产成人自拍| 亚洲视频在线一区观看| 免费成人在线播放| av爱爱亚洲一区| 日韩一区二区三区免费观看| 国产精品国产三级国产aⅴ中文| 香蕉久久夜色精品国产使用方法 | 欧美性色黄大片| 欧美电影免费观看完整版| 中文字幕一区二区5566日韩| 天天亚洲美女在线视频| www.欧美日韩国产在线| 欧美一级一级性生活免费录像| 中文字幕一区二区三区蜜月| 裸体在线国模精品偷拍| 色国产综合视频| 久久综合九色综合欧美就去吻 | 日本一区中文字幕| 91香蕉视频mp4| 久久综合色综合88| 日本少妇一区二区| 色呦呦一区二区三区| 国产亚洲一区二区三区四区| 日韩成人免费看| 在线免费一区三区| |精品福利一区二区三区| 久久精品久久99精品久久| 在线观看视频91| 一区二区三区色| 99v久久综合狠狠综合久久| 久久人人97超碰com| 毛片av一区二区三区| 欧美老人xxxx18| 亚洲国产日韩在线一区模特| av电影天堂一区二区在线观看| 日韩免费高清电影| 免费国产亚洲视频| 欧美精品 日韩| 首页综合国产亚洲丝袜| 欧美大度的电影原声| 日韩三级伦理片妻子的秘密按摩| 中文字幕日本乱码精品影院| 国产精品一区二区三区乱码| 精品国产一区二区国模嫣然| 午夜视频一区二区| 宅男噜噜噜66一区二区66| 婷婷开心激情综合| 日韩视频免费观看高清完整版 | 亚洲一区免费视频| 欧洲亚洲国产日韩| 亚洲电影一区二区| 制服丝袜av成人在线看| 日本成人在线不卡视频| 日韩视频一区二区三区| 另类小说视频一区二区| 久久免费电影网| av激情亚洲男人天堂| 一区二区三区免费网站| 欧美日本一区二区三区四区| 手机精品视频在线观看| 日韩欧美国产三级| 国产伦精品一区二区三区视频青涩| 2020国产精品久久精品美国| 国产成人激情av| 亚洲精品成a人| 欧美喷水一区二区| 国产在线播精品第三| 亚洲情趣在线观看| 欧美一级黄色片| 国产成人精品影院| 一区二区高清免费观看影视大全| 884aa四虎影成人精品一区| 国产剧情一区二区三区| 亚洲乱码国产乱码精品精的特点| 欧美亚洲国产一区在线观看网站 | 国产欧美一区二区精品性色| 91麻豆产精品久久久久久| 亚洲mv大片欧洲mv大片精品| 精品美女在线观看| 色婷婷av一区| 激情综合色播五月| 一区二区三区四区激情| 欧美精品一区二区三区视频 | 欧美一区二区三区免费在线看| 成人免费看视频| 日韩成人午夜电影| 亚洲色欲色欲www| 欧美sm极限捆绑bd| 欧美中文字幕一区二区三区亚洲| 久久超碰97中文字幕| 亚洲影院免费观看| 国产欧美一区二区精品性| 91精品久久久久久久99蜜桃| 9i看片成人免费高清| 激情文学综合插| 日韩黄色免费电影| 日韩美女视频19| 久久久久久日产精品| 欧美精品精品一区| 在线看国产一区二区| 国产成人亚洲精品青草天美| 日产欧产美韩系列久久99| 亚洲综合成人网| 国产精品超碰97尤物18| 中文一区二区完整视频在线观看| 6080亚洲精品一区二区| 在线观看免费亚洲| 色综合夜色一区| 99精品在线观看视频| 成人激情动漫在线观看| 国产一区二区剧情av在线| 美女一区二区视频| 男女男精品视频网| 美女视频一区二区| 青娱乐精品视频| 丝袜亚洲另类欧美综合| 亚洲高清免费观看高清完整版在线观看 | 成人激情免费网站| 成a人片国产精品| 成人教育av在线| 成人av午夜影院| 成人永久免费视频| 成人性视频免费网站| 成人涩涩免费视频| 91在线视频免费观看| 成人精品免费看| 91丨九色丨蝌蚪丨老版| 波波电影院一区二区三区| 成人蜜臀av电影| 色综合久久久久久久久| 色综合一区二区| 欧美日韩国产成人在线91| 91精品国产色综合久久不卡蜜臀| 欧美狂野另类xxxxoooo| 欧美一区2区视频在线观看| 欧美变态口味重另类| 久久九九久久九九| 国产精品国产三级国产三级人妇| 亚洲日本在线a| 丝袜诱惑亚洲看片| 国产美女娇喘av呻吟久久| 不卡一区二区三区四区| 欧美三区在线视频| 日韩欧美一区在线观看| 精品成人佐山爱一区二区| 国产精品丝袜在线| 亚洲成年人影院| 国产一区二区三区在线观看精品| 国产成人欧美日韩在线电影| 99久久婷婷国产综合精品| 欧美色网一区二区| 精品国产髙清在线看国产毛片| 日本一区二区高清| 亚洲成a人v欧美综合天堂| 久久97超碰国产精品超碰| av激情亚洲男人天堂| 欧美丰满高潮xxxx喷水动漫| 久久综合九色综合久久久精品综合| **性色生活片久久毛片| 蜜桃视频在线一区| 色综合视频一区二区三区高清| 日韩免费观看高清完整版在线观看| 日本一二三不卡| 日韩精品亚洲专区| 99精品国产99久久久久久白柏| 欧美成人一级视频| 亚洲一区二区三区四区的| 国产精品一区二区三区四区| 欧美中文字幕亚洲一区二区va在线| 久久久久久久久久久久久夜|