Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ucosii porting on pxa270  粘家華 R96922041  林育佳 R96922062.

Similar presentations


Presentation on theme: "Ucosii porting on pxa270  粘家華 R96922041  林育佳 R96922062."— Presentation transcript:

1 ucosii porting on pxa270  粘家華 R96922041  林育佳 R96922062

2 Demo on PXA270 Drivers driver.c driver.h (Platform Specific Code) CPUTimer7-segment Software Hardware Application demo.c (DEMO_HUHU()) boot head.s (Platform Specific Code)

3 head.s .vector  ResetHandler reset_irq Initial GPIO, Mmory_Controller enable APD Set up a stack [for calling C code] Create MMU tables Enable MMU InitStacks (IRQMode, FIQMode, SVC_MODE) bl main

4 tools  Environment Cygwin + WinXP  Compiler GNU arm-elf-tools-cygwin v2.95.3  Platform PXA 270

5 Ucosii on PXA270 OS-II OS_CORE.C OS_MBOX.C OS_MEM.C OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C … etc (Processor Independent Code) OS-II Port OS_CPU.h OS_CPU_A.s OS_CPU_C.c (Processor Specific Code) Drivers driver.c driver.h (Platform Specific Code) CPUTimerSerial I/O Software Hardware Application demo.c ( task1() task2() ) boot head.s (Platform Specific Code)

6 Goal step  Step 1 : task1 can run correctly and display something on serial I/O. OSTaskStkInit in OS_CPU_C.c OSStartHighRdy in OS_CPU_A.s  Step 2 : task1 call delay function, task2 run OS_TASK_SW in OS_CPU_A.s

7 OS_CPU_C.c void *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt) { unsigned int *stk ; opt = opt; /* 'opt' is not used, prevent warning */ stk = (unsigned int *)ptos; /* Load stack pointer */ /* build a context for the new task */ *stk = (unsigned int) task; /* PC */ *--stk = 0; /* lr */ *--stk = 0; /* r12 */ *--stk = 0; /* r11 */ *--stk = 0; /* r10 */ *--stk = 0; /* r9 */ *--stk = 0; /* r8 */ *--stk = 0; /* r7 */ *--stk = 0; /* r6 */ *--stk = 0; /* r5 */ *--stk = 0; /* r4 */ *--stk = 0; /* r3 */ *--stk = 0; /* r2 */ *--stk = 0; /* r1 */ *--stk = (unsigned int) pdata; /* r0 */ *--stk = SVC32MODE; /* spsr YYY+ */ *--stk = SVC32MODE; /* psr */ return ((void *)stk); }

8 OS_CPU_A.s  OSStartHighRdy

9 OS_CPU_A.s  OS_TASK_SW

10 Goal step  Step 3 : interrupt handler can run correctly. Initial_TIMER0 in driver.c IrqHnd in head.s  Step 4 : task1 can resume IrqHnd in head.s  OSIntCtxSw in OS_CPU_A.s  _IntCtxSw in OS_CPU_A.s

11 driver.c void Initial_TIMER0(void) { tick_on = UM; tick_ms = 0; tick_sec = 0; tick_min = 0; tick_hour = 0; OIER = 0;/* disable any timer interrupts */ OSCR = LATCH*2;/* push OSCR out of the way */ OSMR0 = LATCH;/* set initial match */ OSSR = 0xf;/* clear status on all timers */ OIER = OIER_E0;/* enable match on timer 0 to cause interrupts */ OSCR = 0; /* initialize free-running timer */ }

12 head.s  IrqHnd bl Chandler

13 OS_CPU_A.s  OSIntCtxSw  IntCtxSw

14 head.s  IrqHnd IrqHnd: STMFDsp!,{r0-r3,r12,lr} bl OSIntEnter bl OSTimeTick bl OSIntExit LDRr0,=OSIntCtxSwFlag LDRr1,[r0] CMPr1,#1 BEQ_IntCtxSw LDMFDsp!, {r0-r3,r12,lr} SUBSpc, lr, #4

15 DEMO

16 Thanks  戴偉堯  涂堂訓  EOS 助教


Download ppt "Ucosii porting on pxa270  粘家華 R96922041  林育佳 R96922062."

Similar presentations


Ads by Google