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

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

?? os_cpu_a.s

?? ucos在EPS7209上的移植代碼
?? S
字號:
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                                                             ;
;                                                                             ;
;                        u C / O S - II  EP7209  P O R T		      ;
;									      ;
;	                      FILE : os_cpu_a.s				      ;
;									      ;
;                Ported By zartoven@zuguri.org January 29, 2001		      ;
;									      ;
;                 This port is tested on NANOWIT EP7209 Board		      ;
;									      ;
;            To get information about NANOWIT, Visit www.nanowit.com          ;
;									      ;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	Stack Area Definition						;
;.......................................................................;

RAMLimit		EQU		0x00109600	; Internal Sram end

SVCStackSize		EQU		0x1000
IRQStackSize		EQU		0x100
FIQStackSize		EQU		0x100

SVCStackEnd		EQU     	RAMLimit
IRQStackEnd		EQU     	SVCStackEnd-SVCStackSize
FIQStackEnd		EQU     	IRQStackEnd-IRQStackSize

;.......................................................................;
;	EP7209 Internal Register Definition				;
;.......................................................................;
REGISTER_BASE		EQU     	0x00200000

HwControl               EQU     	0x00000100	
HwControlUartEnable     EQU     	0x00000100	
HwStatus2               EQU     	0x00001140

CLKMOD                  EQU     	0x40
UartValue               EQU     	0x00060001
UartValue_13            EQU     	0x00060000
HwUartData              EQU     	0x00000480
HwUartData2             EQU     	0x00001480
HwUartControl           EQU     	0x000004c0
HwUartControl2          EQU     	0x000014c0
CLKCTL_73               EQU     	0x6

SYSCON1			EQU		0x00000100
TC1D			EQU		0x00000300
INTSR1			EQU		0x00000240
INTMR1			EQU		0x00000280
TC1EOI			EQU		0x000006c0
	

;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	Program Start!!! 						;
;.......................................................................;
	AREA    |Assembly$$code|, CODE, READONLY

	ENTRY

;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	Vector Table	 						;
;.......................................................................;
	b	ResetHandler
	ldr     pc, UndefV
	ldr     pc, SWIV
	ldr     pc, PAbortV
	ldr     pc, DAbortV
	ldr     pc, UnusedV
	ldr     pc, IRQV
	ldr	pc, FIQV

UndefV
	DCD     UndefHandler
SWIV
	DCD     SWIHandler
PAbortV
	DCD     PAbortHandler
DAbortV
	DCD     DAbortHandler
UnusedV
	DCD     UnusedHandler
IRQV
	DCD     IRQHandler
FIQV
	DCD     FIQHandler

UndefHandler
	movs    pc, lr
SWIHandler
	movs    pc, lr
PAbortHandler
	subs    pc, lr, #4
DAbortHandler
	subs    pc, lr, #8
UnusedHandler
	movs    pc, lr
FIQHandler
	subs    pc, lr, #4

;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	IRQHandler is very important					;
;.......................................................................;
IRQHandler
	stmfd	sp!,{r0-r3}

	mov	r1,#REGISTER_BASE
	ldr	r2,=INTSR1
	ldr	r0,[r1,r2]
	tst	r0,#0x100
	bne	TimerIRQ		; Check Timer IRQ
;
;	if use other IRQ, follow Timer IRQ type...
;	

	ldmfd	sp!,{r0-r3}		
        subs    pc,lr,#4

;------------------------------------------------------------------------
;	Timer IRQ Header Part..
;
TimerIRQ
	ldr	r2,=TC1EOI		; Timer 1 Interrupt Clear
	str	r0,[r1,r2]
	
	mov	r2,sp			; copy IRQ's sp -> r2
	add	sp,sp,#16		; recover IRQ's sp 
	sub	r3,lr,#4		; copy return address -> r3

	LDR	r0,=IRQ_2
	MOVS	pc,r0
IRQ_2
	stmfd	sp!,{r3}		; push SVC's pc
	stmfd	sp!,{r4-r12,lr}		; push SVC's r14, r12-r4
	mov	r4,r2
	ldmfd	r4!,{r0-r3}		
	stmfd	sp!,{r0-r3}		; push SVC's r3-r0
	mrs	r5,cpsr
	stmfd	sp!,{r5}		; push SVC's PSR
;
; This IRQ Header is needed for other IRQ Handler
;------------------------------------------------------------------------
	B     	OSTickISR		; Real Body...




;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	Starting Point!!!!						;
;.......................................................................;

ResetHandler

	ldr 	r0, =0x80002200		; Clock Speed Setting
	ldr 	r1, [r0]
	orr 	r1, r1, #CLKCTL_73
	strb 	r1, [r0] 

;------------------------------------------------------------------------
;	Stack Point Setting Each CPU Mode
;

	ldr     r0, =0x000000d2		; IRQ Mode sp Setting
        msr     cpsr_cf, r0
	ldr     r13, =IRQStackEnd

	ldr     r0, =0x000000d1		; FIQ Mode sp Setting
	msr     cpsr_cf, r0
	ldr     r13, =FIQStackEnd

	ldr     r0, =0x000000d3		; SVC Mode sp Setting
	msr     cpsr_cf, r0
	ldr     r13, =SVCStackEnd

;------------------------------------------------------------------------
;	MMU Configuration
;
	ldr     r0, =0x00000000
	mcr     p15, 0, r0, c5, c0
	mcr     p15, 0, r0, c7, c0

	ldr     r0, =0x55555555
	mcr     p15, 0, r0, c3, c0

    	IMPORT  PageTable

	ldr     r0, =PageTable
	mcr     p15, 0, r0, c2, c0

	ldr     r0, =0x0000007d
	mcr     p15, 0, r0, c1, c0

	;
	; There should always be two NOP instructions following the enable or
	; disable of the MMU.
	;
	mov     r0, r0
	mov     r0, r0
	
	;	
	; Delay for MMU
	;
	ldr 	r1, =0x0	
	ldr 	r2, =0x100																			
delay
	cmp    	r1, r2
	ldrne  	r3, [r1], #4
	bne    	delay

;------------------------------------------------------------------------
;	Variable Area Initialization
;

        IMPORT  |Image$$RO$$Limit|      ; End of ROM code (=start of ROM data)
        IMPORT  |Image$$RW$$Base|       ; Base of RAM to initialise
        IMPORT  |Image$$ZI$$Base|       ; Base and limit of area
        IMPORT  |Image$$ZI$$Limit|      ; to zero initialise

        ldr     r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
        ldr     r1, =|Image$$RW$$Base|  ; and RAM copy
        ldr     r3, =|Image$$ZI$$Base|  ; Zero init base => top of initialised data
        cmp     r0, r1                  ; Check that they are different
        beq     %1
0       cmp     r1, r3                  ; Copy init data
        ldrcc   r2, [r0], #4
        strcc   r2, [r1], #4
        bcc     %0
1       ldr     r1, =|Image$$ZI$$Limit| ; Top of zero init segment
        mov     r2, #0
2       cmp     r3, r1                  ; Zero init
        strcc   r2, [r3], #4
        bcc     %2

;------------------------------------------------------------------------
;	Serial Port Initialization
;	115200 BPS, Data bit 8 Bit, No Parity, Stop Bit 1 Bit
;
	ldr     r12, =REGISTER_BASE
	mov     r0, #HwControlUartEnable
	str     r0, [r12, #HwControl]
	ldr     r1, =HwStatus2
	add     r1,r1,r12
	ldr     r2, [r1]
	tst     r2, #CLKMOD
	ldreq   r0, =UartValue
	ldrne   r0, =UartValue_13
	str     r0, [r12, #HwUartControl]


;------------------------------------------------------------------------
;	Timer1 Setting = 10ms period 
;
	mov	r1,#REGISTER_BASE
	ldr	r2,=SYSCON1
	ldr	r0,[r1,r2]
	bic	r0,r0,#0x20
	orr	r0,r0,#0x10
	str	r0,[r1,r2]

	ldr	r2,=TC1D
	ldr	r0,=21			; 2115 -> 1 Second, 21 -> 10ms
	str	r0,[r1,r2]
	
	ldr	r2,=INTMR1
	ldr	r0,[r1,r2]
	orr	r0,r0,#0x100
	str	r0,[r1,r2]

	ldr	r2,=TC1EOI
	mov	r0,#0
	str	r0,[r1,r2]

;------------------------------------------------------------------------
;	C Routine Entry Point
;
	IMPORT	C_Entry
	b	C_Entry


;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
;	Simple Subrutine						;
;.......................................................................;

;------------------------------------------------------------------------
;	void SendChar(char ch) // Put a character to UART
;

	EXPORT  SendChar
SendChar
	mov	r1, #REGISTER_BASE
WLoop
	ldr	r2, [r1, #0x0140]
	tst	r2, #0x00800000
	bne	WLoop
	str	r0, [r1, #0x0480]
	mov	pc, lr

;------------------------------------------------------------------------
;	int splx(int onoff) // IRQ On/Off
;			    // onoff : 1 -> IRQ Disable
;			    // onoff : 0 -> IRQ Enable
	EXPORT  splx
splx
        MRS     r1, cpsr        
        BIC     r2, r1, #0x80   
        CMP     r0, #1          
        ORREQ   r2, r2, #0x80   
        MSR     CPSR_cxsf, r2   
        MOVS    r1, r1, LSL #25 
        MOV     r0, #0          
        MOVCS   r0, #1          
        mov	pc,lr


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------; 
;	uC/OS Porting Core Function : OSStartHighRdy                          ;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	IMPORT	OSTaskSwHook
	IMPORT	OSRunning
	IMPORT	OSTCBHighRdy

	EXPORT	OSStartHighRdy

OSStartHighRdy  

	BL	OSTaskSwHook			; Call user defined task switch hook

	LDR	r0,=OSRunning			; Indicate that multitasking has started
	MOV	r1,#1
	STRB	r1,[r0]

	LDR	r0,=OSTCBHighRdy		; r0 <= &OSTCBHighRdy
	LDR	r0,[r0]				; r0 <=  OSTCBHighRdy

	LDR	sp,[r0]				; sp <=  OSTCBHighRdy->OSTCBStkPtr

	LDMFD	sp!,{r0}			; restore SP...
	MSR	CPSR_xsf,r0
	LDMFD   sp!,{r0 - r12, lr , pc}		; Load task's context & Run task

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------; 
;	uC/OS Porting Core Function : OSCtxSw                                 ;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	IMPORT	OSTCBCur
	IMPORT	OSTaskSwHook
	IMPORT	OSTCBHighRdy
	IMPORT	OSPrioCur
	IMPORT	OSPrioHighRdy

	EXPORT	OSCtxSw

OSCtxSw	
	STMFD	sp!,{lr}			; push resume address
	STMFD	sp!,{r0 - r12, lr}		; push rest context
	MRS	r0,CPSR
	STMFD	sp!,{r0}			; push CPSR

	LDR	r0,=OSTCBCur			; r0 <= &OSTCBCur
	LDR	r0,[r0]				; r0 <=  OSTCBCur
	STR	sp,[r0]				; OSTCBCur->OSTCBStkPtr = sp

	BL	OSTaskSwHook			; Call user defined task switch hook

	LDR	r0,=OSTCBCur			; r0 <= &OSTCBCur
	LDR	r1,=OSTCBHighRdy		; r1 <= &OSTCBHighRdy
	
	LDR	r2,[r1]				; r2 <=  OSTCBHighRdy
	STR	r2,[r0]				; OSTCBCur = OSTCBHighRdy

	LDR	r0,=OSPrioCur			; r0 <= &OSPrioCur
	LDR	r1,=OSPrioHighRdy		; r1 <= &OSPrioHighRdy
	
	LDRB	r3,[r1]				; r3 <=  OSPrioHighRdy
	STRB	r3,[r0]				; OSPrioCur = OSPrioHighRdy

	LDR	sp,[r2]				; sp <=  OSTCBHighRdy->OSTCBStkPtr

	LDMFD	sp!,{r0}			; restore SP...
	MSR	CPSR_xsf,r0
	LDMFD   sp!,{r0 - r12, lr , pc}		; Load task's context & Run task


;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------; 
;	uC/OS Porting Core Function : OSIntCtxSw                              ;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	IMPORT	OSTCBCur
	IMPORT	OSTaskSwHook
	IMPORT	OSTCBHighRdy
	IMPORT	OSPrioCur
	IMPORT	OSPrioHighRdy

	EXPORT	OSIntCtxSw 

OSIntCtxSw 

	ADD	sp,sp,#4

	LDR	r0,=OSTCBCur			; r0 <= &OSCTBCur
	LDR	r0,[r0]				; r0 <=  OSCTBCur

	STR	sp,[r0]				; OSTCBCur->OSTCBStkPtr = sp
	
	BL	OSTaskSwHook			; Call user defined task switch hook

	LDR	r0,=OSTCBCur			; r0 <= &OSTCBCur
	LDR	r1,=OSTCBHighRdy		; r1 <= &OSTCBHighRdy
	
	LDR	r2,[r1]				; r2 <=  OSTCBHighRdy
	STR	r2,[r0]				; OSTCBCur = OSTCBHighRdy

	LDR	r0,=OSPrioCur			; r0 <= &OSPrioCur
	LDR	r1,=OSPrioHighRdy		; r1 <= &OSPrioHighRdy
	
	LDRB	r3,[r1]				; r3 <=  OSPrioHighRdy
	STRB	r3,[r0]				; OSPrioCur = OSPrioHighRdy

	LDR	sp,[r2]				; sp <=  OSTCBHighRdy->OSTCBStkPtr
	LDMFD	sp!,{r0}			; restore SP...
	MSR	CPSR_xsf,r0
	LDMFD   sp!,{r0 - r12, lr , pc}		; Load task's context & Run task

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------; 
;	uC/OS Porting Core Function : OSTickISR                               ;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	IMPORT	OSIntNesting
	IMPORT	OSTimeTick
	IMPORT	OSIntExit

OSTickISR  

	LDR	r0,=OSIntNesting		; Notify uC/OS-II of ISR
	LDRB	r1,[r0]
	ADD	r1,r1,#1
	STRB	r1,[r0]
	
	BL	OSTimeTick			; Process system tick
        BL	OSIntExit			; Notify uC/OS-II of end of ISR

	LDMFD	sp!,{r0}
	MSR	CPSR_xsf,r0
	LDMFD   sp!,{r0 - r12, lr , pc}      

	END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777欧美精品| 欧美羞羞免费网站| 蜜桃久久久久久| 日韩黄色一级片| 日韩激情在线观看| 激情小说欧美图片| 韩国女主播一区二区三区| 国产中文一区二区三区| 国产成人鲁色资源国产91色综| 激情综合色播激情啊| 国产成人超碰人人澡人人澡| 成人av在线观| 色悠久久久久综合欧美99| 日本高清不卡视频| 宅男噜噜噜66一区二区66| 欧美变态凌虐bdsm| 欧美国产激情二区三区| 亚洲男人的天堂一区二区| 国产精品久久久久影院老司| 亚洲人成在线观看一区二区| 亚洲国产精品久久人人爱蜜臀| 日本在线观看不卡视频| 国模套图日韩精品一区二区| 成人网页在线观看| 色婷婷久久综合| 精品日韩一区二区三区免费视频| 久久久不卡影院| 一区二区三区高清| 美国毛片一区二区| 豆国产96在线|亚洲| 在线视频观看一区| 欧美激情一区二区三区蜜桃视频| 中文字幕视频一区| 污片在线观看一区二区| 国v精品久久久网| 91麻豆精品国产91久久久久久久久 | 欧美日韩电影在线| 久久久欧美精品sm网站| 亚洲最大的成人av| 国产成人在线色| 欧美一区二区视频免费观看| 中文av一区二区| 日韩av一区二| 色综合久久中文综合久久97| 日韩精品在线一区| 亚洲一区在线观看免费| 懂色中文一区二区在线播放| 欧美一区日韩一区| 亚洲精选视频免费看| 激情综合网av| 欧美一区二区三区人| 国产精品久久二区二区| 日本欧美一区二区三区乱码| 色综合久久综合中文综合网| 久久久综合网站| 捆绑紧缚一区二区三区视频| 欧美欧美欧美欧美首页| 一区二区三区四区不卡在线 | 美女视频黄 久久| 欧美三级在线看| 亚洲女人****多毛耸耸8| 国产精品一区二区在线观看网站| 欧美高清hd18日本| 天天综合天天综合色| 欧美亚洲动漫精品| 亚洲精品免费在线观看| www.亚洲免费av| 国产精品护士白丝一区av| 成人精品小蝌蚪| 国产精品色在线观看| 国产成人夜色高潮福利影视| 久久久精品国产免大香伊| 国产一区二区精品在线观看| 久久亚洲精华国产精华液| 精品一区二区三区av| 日韩欧美在线网站| 乱中年女人伦av一区二区| 日韩免费高清电影| 国内精品免费在线观看| 国产午夜精品久久久久久免费视 | 91精品国产乱| 久久精品国产精品亚洲综合| 日韩视频中午一区| 狠狠色丁香婷综合久久| 久久久国产一区二区三区四区小说| 久久99久久精品| 久久精品网站免费观看| 9色porny自拍视频一区二区| 亚洲免费在线播放| 欧美中文字幕一区| 日本免费在线视频不卡一不卡二| 7777精品伊人久久久大香线蕉超级流畅 | 国产成人精品一区二区三区四区| 国产无一区二区| 日本韩国一区二区| 日韩电影在线观看一区| 久久欧美一区二区| 色婷婷国产精品综合在线观看| 亚洲va在线va天堂| 久久综合丝袜日本网| 播五月开心婷婷综合| 亚洲第一激情av| 国产无人区一区二区三区| 97se亚洲国产综合在线| 亚洲成人精品影院| 2022国产精品视频| 欧美亚洲国产bt| 国产凹凸在线观看一区二区| 亚洲黄一区二区三区| 精品久久国产字幕高潮| 91丨九色丨黑人外教| 男女男精品视频网| 日韩毛片一二三区| 精品粉嫩超白一线天av| 欧美视频一区二区三区四区| 国产在线一区二区综合免费视频| 综合久久久久久| 精品久久国产老人久久综合| 欧美性受xxxx黑人xyx性爽| 激情国产一区二区| 亚洲高清三级视频| 国产精品久久久久久亚洲毛片| 欧美久久婷婷综合色| 91污片在线观看| 国产美女娇喘av呻吟久久| 日一区二区三区| 亚洲精品成人悠悠色影视| 久久精品一区二区三区不卡| 91精品久久久久久久久99蜜臂| 91色综合久久久久婷婷| 国产一区二区三区av电影| 天天综合色天天综合色h| 亚洲精品国久久99热| 日本一区二区三区四区在线视频| 717成人午夜免费福利电影| 91久久精品一区二区| 波多野结衣一区二区三区| 国产一区 二区| 极品美女销魂一区二区三区| 美女网站一区二区| 日韩中文字幕一区二区三区| 日韩制服丝袜av| 五月综合激情网| 天天做天天摸天天爽国产一区| 中文字幕日韩av资源站| 中文字幕在线观看不卡| 国产精品免费免费| 中文字幕第一区| 国产精品国产三级国产普通话蜜臀 | 亚洲一区二区三区在线播放| 亚洲久草在线视频| 亚洲精品日韩一| 亚洲综合精品久久| 五月天亚洲婷婷| 日韩成人av影视| 日韩av午夜在线观看| 日韩电影一区二区三区四区| 日韩国产欧美在线观看| 久久精品av麻豆的观看方式| 韩国女主播成人在线| 国产精品亚洲一区二区三区在线| 国产一区二区三区四区五区入口 | 懂色av中文字幕一区二区三区 | 精品一区二区免费视频| 国产成人av福利| 99久久777色| 欧美中文一区二区三区| 欧美精品自拍偷拍动漫精品| 日韩视频免费观看高清完整版在线观看 | 亚洲一区二区在线视频| 日本一区中文字幕| 国产一区二区主播在线| 播五月开心婷婷综合| 欧美美女黄视频| xvideos.蜜桃一区二区| 亚洲欧洲一区二区在线播放| 亚洲v精品v日韩v欧美v专区| 捆绑调教一区二区三区| av午夜一区麻豆| 8x福利精品第一导航| 国产日韩成人精品| 午夜在线成人av| 国产精品一区一区| 欧美日韩综合不卡| 久久毛片高清国产| 亚洲一区二区三区爽爽爽爽爽| 理论电影国产精品| 99精品久久只有精品| 欧美一区二区在线播放| 国产精品二区一区二区aⅴ污介绍| 亚洲成av人片| eeuss鲁片一区二区三区| 4438x成人网最大色成网站| 国产精品看片你懂得| 奇米亚洲午夜久久精品| 99精品视频在线播放观看| 日韩精品一区国产麻豆| 亚洲午夜久久久久中文字幕久| 国产九九视频一区二区三区| 欧美图片一区二区三区|