diff -Ncr utkernel_source.curr/config/sysdepend/app_at91/utk_config_depend.h utkernel_source/config/sysdepend/app_at91/utk_config_depend.h *** utkernel_source.curr/config/sysdepend/app_at91/utk_config_depend.h Sat Aug 8 11:08:57 2009 --- utkernel_source/config/sysdepend/app_at91/utk_config_depend.h Sun Aug 9 23:40:51 2009 *************** *** 20,29 **** /* ROMINFO */ #define SYSTEMAREA_TOP 0x40000000 /* RAM system area top */ ! #define SYSTEMAREA_END 0x40010000 /* RAM system area end */ /* User definition */ ! #define RI_USERAREA_TOP 0x40010000 /* RAM user area top */ #define RI_USERINIT NULL /* User initialization program */ --- 20,29 ---- /* ROMINFO */ #define SYSTEMAREA_TOP 0x40000000 /* RAM system area top */ ! #define SYSTEMAREA_END 0x40008000 /* RAM system area end */ /* User definition */ ! #define RI_USERAREA_TOP 0x40008000 /* RAM user area top */ #define RI_USERINIT NULL /* User initialization program */ *************** *** 58,64 **** #define CFN_VER_PRNO3 0 #define CFN_VER_PRNO4 0 ! #define CFN_REALMEMEND ((VP)0x40010000) /* * Initial task priority --- 58,64 ---- #define CFN_VER_PRNO3 0 #define CFN_VER_PRNO4 0 ! #define CFN_REALMEMEND ((VP)0x40008000) /* * Initial task priority *************** *** 80,86 **** #define USR_STACK_SIZE 0 /* not used */ #define APPLICATION_STACK_TOP 0x00000000 /* not used */ ! #define EXCEPTION_STACK_TOP 0x40010000 /* * Use dynamic memory allocation --- 80,86 ---- #define USR_STACK_SIZE 0 /* not used */ #define APPLICATION_STACK_TOP 0x00000000 /* not used */ ! #define EXCEPTION_STACK_TOP 0x40008000 /* * Use dynamic memory allocation diff -Ncr utkernel_source.curr/etc/sysdepend/app_at91/makerules.sysdepend utkernel_source/etc/sysdepend/app_at91/makerules.sysdepend *** utkernel_source.curr/etc/sysdepend/app_at91/makerules.sysdepend Sat Aug 8 11:08:57 2009 --- utkernel_source/etc/sysdepend/app_at91/makerules.sysdepend Sun Aug 9 21:11:52 2009 *************** *** 62,68 **** LDFLAGS += ### CPU CLOCK (Hz) ### ! CFLAGS += -DCPU_CLOCK=72000000UL ### C ### CC := $(GNUarm)/bin/gcc --- 62,68 ---- LDFLAGS += ### CPU CLOCK (Hz) ### ! CFLAGS += -DCPU_CLOCK=58982400UL ### C ### CC := $(GNUarm)/bin/gcc diff -Ncr utkernel_source.curr/include/tk/sysdepend/app_at91/sysdef_depend.h utkernel_source/include/tk/sysdepend/app_at91/sysdef_depend.h *** utkernel_source.curr/include/tk/sysdepend/app_at91/sysdef_depend.h Sat Aug 8 11:08:57 2009 --- utkernel_source/include/tk/sysdepend/app_at91/sysdef_depend.h Sun Aug 9 01:07:01 2009 *************** *** 13,21 **** */ /* ! * @(#)sysdef_depend.h (tk/lpc2388) * ! * Definition about LPC2388 * * Included also from assembler program. */ --- 13,21 ---- */ /* ! * @(#)sysdef_depend.h (tk/lpc2138) * ! * Definition about LPC2138 * * Included also from assembler program. */ *************** *** 71,80 **** #define VICSoftInt (VICBase + 0x0018) #define VICSoftIntClear (VICBase + 0x001c) #define VICProtection (VICBase + 0x0020) ! #define VICSWPriorityMask (VICBase + 0x0024) #define VICVectAddr(x) (VICBase + 0x0100 + ((x) * 4)) ! #define VICVectPriority(x) (VICBase + 0x0200 + ((x) * 4)) ! #define VICAddress (VICBase + 0x0f00) /* * System Control Registers --- 71,80 ---- #define VICSoftInt (VICBase + 0x0018) #define VICSoftIntClear (VICBase + 0x001c) #define VICProtection (VICBase + 0x0020) ! #define VICVectorAddr (VICBase + 0x0030) // LPC21xx/22xx ! #define VICDefVectAddr (VICBase + 0x0034) // LPC21xx/22xx #define VICVectAddr(x) (VICBase + 0x0100 + ((x) * 4)) ! #define VICVectCntl(x) (VICBase + 0x0200 + ((x) * 4)) // LPC21xx/22xx /* * System Control Registers *************** *** 87,96 **** #define PLLFEED (SystemControlBase + 0x008c) #define PCONP (SystemControlBase + 0x00c4) #define APBDIV (SystemControlBase + 0x0100) // LPC21xx/22xx - #define CCLKCFG (SystemControlBase + 0x0104) // LPC23xx - #define USBCLKCFG (SystemControlBase + 0x0108) // LPC23xx - #define CLKSRCSEL (SystemControlBase + 0x010c) // LPC23xx - #define PCLKSEL0 (SystemControlBase + 0x01a8) // LPC23xx - #define PCLKSEL1 (SystemControlBase + 0x01ac) // LPC23xx #endif /* __TK_SYSDEF_DEPEND_H__ */ --- 87,91 ---- diff -Ncr utkernel_source.curr/include/tk/sysdepend/app_at91/syslib_depend.h utkernel_source/include/tk/sysdepend/app_at91/syslib_depend.h *** utkernel_source.curr/include/tk/sysdepend/app_at91/syslib_depend.h Sat Aug 8 11:08:57 2009 --- utkernel_source/include/tk/sysdepend/app_at91/syslib_depend.h Sat Aug 8 11:38:12 2009 *************** *** 13,21 **** */ /* ! * @(#)syslib_depend.h (tk/LPC2388) * ! * micro T-Kernel LPC2388 Library */ #ifndef __TK_SYSLIB_DEPEND_H__ --- 13,21 ---- */ /* ! * @(#)syslib_depend.h (tk/LPC2138) * ! * micro T-Kernel LPC2138 Library */ #ifndef __TK_SYSLIB_DEPEND_H__ *************** *** 54,62 **** /* * Interrupt enable * Enable the interrupt specified by 'intvec.' - * intpri is interrupt priority, 0 (Highest) ... 15 (Lowest). */ ! IMPORT void EnableInt( INTVEC intvec, INT intpri ); /* * Interrupt disable --- 54,61 ---- /* * Interrupt enable * Enable the interrupt specified by 'intvec.' */ ! IMPORT void EnableInt( INTVEC intvec ); /* * Interrupt disable *************** *** 75,89 **** * Issue EOI(End Of Interrupt) */ IMPORT void EndOfInt( INTVEC intvec ); - - /* - * Interrupt priority mask - * Mask all interrupts which have equal or lower priority. - * intpri is priority mask, 0 ... 16. - * 0/16 masks/unmasks all interrupts, 7 masks priority 7 ... 15. - * Return value is old priority mask (intpri value). - */ - IMPORT INT SetIntLevel( INT intpri ); /* ------------------------------------------------------------------------ */ --- 74,79 ---- diff -Ncr utkernel_source.curr/kernel/sysdepend/device/app_at91/icrt0.S utkernel_source/kernel/sysdepend/device/app_at91/icrt0.S *** utkernel_source.curr/kernel/sysdepend/device/app_at91/icrt0.S Sat Aug 8 11:08:58 2009 --- utkernel_source/kernel/sysdepend/device/app_at91/icrt0.S Sun Aug 9 21:49:12 2009 *************** *** 79,133 **** memmap_init: // remap vector area (boot loader -> user flash) ldr r2, =MEMMAP ! str r1, [r2] pll_init: // setup PLL ldr r4, =PLLCON mov r5, #0x55 mov r6, #0xaa ! ldr r2, [r4, #0x08] // PLLSTAT ! tst r2, #(1 << 25) // PLL is connected: disconnect now ! strne r1, [r4, #0x00] // PLLCON=1 (PLL enable/disconnect) ! strne r6, [r4, #0x0c] // PLLFEED=0xaa ! strne r5, [r4, #0x0c] // PLLFEED=0x55 ! str r0, [r4, #0x00] // PLLCON=0 (PLL disable/disconnect) ! str r6, [r4, #0x0c] // PLLFEED=0xaa ! str r5, [r4, #0x0c] // PLLFEED=0x55 ! ldr r2, =CLKSRCSEL // clock source: internal RC-OSC, 4MHz ! str r0, [r2] ! mov r2, #((2 - 1) << 16) // Fcco = (2 x M x Fin) / N ! orr r2, r2, #(72 - 1) // 288MHz = (2 x 72 x 4MHz) / 2 ! str r2, [r4, #0x04] // PLLCFG ! str r6, [r4, #0x0c] // PLLFEED=0xaa ! str r5, [r4, #0x0c] // PLLFEED=0x55 - str r1, [r4, #0x00] // PLLCON=1 (PLL enable/disconnect) - str r6, [r4, #0x0c] // PLLFEED=0xaa - str r5, [r4, #0x0c] // PLLFEED=0x55 - pll_wait: ! ldr r2, [r4, #0x08] // PLLSTAT ! tst r2, #(1 << 26) beq pll_wait // wait for lock - ldr r2, =CCLKCFG // CPU Clock: PLL clock / 4 - mov r3, #(4 - 1) - str r3, [r2] - mov r3, #3 ! str r3, [r4, #0x00] // PLLCON=3 (PLL enable/connect) ! str r6, [r4, #0x0c] // PLLFEED=0xaa ! str r5, [r4, #0x0c] // PLLFEED=0x55 pclk_init: // setup PCLK ! ldr r2, =PCLKSEL0 // PCLK=CCLK/4 (LPC23xx) ! str r0, [r2, #0x00] // PCLKSEL0 ! str r0, [r2, #0x04] // PCLKSEL1 // --------------------------------------------------------------------------- --- 79,127 ---- memmap_init: // remap vector area (boot loader -> user flash) ldr r2, =MEMMAP ! strb r1, [r2] pll_init: // setup PLL ldr r4, =PLLCON mov r5, #0x55 mov r6, #0xaa ! ldrh r2, [r4, #0x08] // PLLSTAT ! tst r2, #(1 << 9) // PLL is connected: disconnect now ! strneb r1, [r4, #0x00] // PLLCON=1 (PLL enable/disconnect) ! strneb r6, [r4, #0x0c] // PLLFEED=0xaa ! strneb r5, [r4, #0x0c] // PLLFEED=0x55 ! strb r0, [r4, #0x00] // PLLCON=0 (PLL disable/disconnect) ! strb r6, [r4, #0x0c] // PLLFEED=0xaa ! strb r5, [r4, #0x0c] // PLLFEED=0x55 ! mov r2, #(1 << 5) // CCLK = Fcco / (2 x P) ! // 60MHz = 240MHz / (2 * 2) ! orr r2, r2, #(4 - 1) // CCLK = Fosc x M ! // 60MHz = 15MHz x 4 ! strb r2, [r4, #0x04] // PLLCFG ! strb r6, [r4, #0x0c] // PLLFEED=0xaa ! strb r5, [r4, #0x0c] // PLLFEED=0x55 ! strb r1, [r4, #0x00] // PLLCON=1 (PLL enable/disconnect) ! strb r6, [r4, #0x0c] // PLLFEED=0xaa ! strb r5, [r4, #0x0c] // PLLFEED=0x55 pll_wait: ! ldrh r2, [r4, #0x08] // PLLSTAT ! tst r2, #(1 << 10) beq pll_wait // wait for lock mov r3, #3 ! strb r3, [r4, #0x00] // PLLCON=3 (PLL enable/connect) ! strb r6, [r4, #0x0c] // PLLFEED=0xaa ! strb r5, [r4, #0x0c] // PLLFEED=0x55 pclk_init: // setup PCLK ! ldr r2, =APBDIV // PCLK=CCLK/4 (LPC21xx/LPC22xx) ! strb r0, [r2, #0x00] // APBDIV // --------------------------------------------------------------------------- *************** *** 237,244 **** stmfd sp!, {ip} /* sp-> spsr_xxx, ip, lr_xxx */ stmfd sp!, {r3} /* sp-> r3, spsr_xxx, ip, lr_xxx */ ! ldr lr, =VICAddress ! ldr lr, [lr] /* lr := IRQ No. */ ldr ip, =Csym(knl_intvec) /* exception vector table */ add ip, ip, lr, LSL #2 /* ip := &vector[IRQ No.] */ ldr r3, [ip] /* r3 := vector[IRQ No.] */ --- 231,261 ---- stmfd sp!, {ip} /* sp-> spsr_xxx, ip, lr_xxx */ stmfd sp!, {r3} /* sp-> r3, spsr_xxx, ip, lr_xxx */ ! ldr ip, =VICIRQStatus ! ldr ip, [ip] ! mov lr, #0 /* lr: IRQ No. */ ! ! bsf_step16: ! ldr r3,=0xffff ! tst ip, r3 ! addeq lr, lr, #16 ! moveq ip, ip, lsr #16 ! bsf_step8: ! tst ip, #0xff ! addeq lr, lr, #8 ! moveq ip, ip, lsr #8 ! bsf_step4: ! tst ip, #0x0f ! addeq lr, lr, #4 ! moveq ip, ip, lsr #4 ! bsf_step2: ! tst ip, #0x03 ! addeq lr, lr, #2 ! moveq ip, ip, lsr #2 ! bsf_step1: ! tst ip, #0x01 ! addeq lr, lr, #1 ! ldr ip, =Csym(knl_intvec) /* exception vector table */ add ip, ip, lr, LSL #2 /* ip := &vector[IRQ No.] */ ldr r3, [ip] /* r3 := vector[IRQ No.] */ diff -Ncr utkernel_source.curr/kernel/sysdepend/device/app_at91/tkdev_init.c utkernel_source/kernel/sysdepend/device/app_at91/tkdev_init.c *** utkernel_source.curr/kernel/sysdepend/device/app_at91/tkdev_init.c Sat Aug 8 11:08:58 2009 --- utkernel_source/kernel/sysdepend/device/app_at91/tkdev_init.c Mon Aug 10 21:01:14 2009 *************** *** 32,40 **** out_w(VICIntEnClr, ~0); // disable all interrupt out_w(VICSoftIntClear, ~0); // disable all s/w interrupt out_w(VICIntSelect, 0); // all interrupt: IRQ - out_w(VICSWPriorityMask, 0xffff); // setup interrupt mask ! for (i = 0; i < 32; i++) out_w(VICVectAddr(i), i); return E_OK; } --- 32,39 ---- out_w(VICIntEnClr, ~0); // disable all interrupt out_w(VICSoftIntClear, ~0); // disable all s/w interrupt out_w(VICIntSelect, 0); // all interrupt: IRQ ! for (i = 0; i < 16; i++) out_w(VICVectCntl(i), 0); return E_OK; } diff -Ncr utkernel_source.curr/kernel/sysdepend/device/app_at91/tkdev_timer.h utkernel_source/kernel/sysdepend/device/app_at91/tkdev_timer.h *** utkernel_source.curr/kernel/sysdepend/device/app_at91/tkdev_timer.h Sat Aug 8 11:08:58 2009 --- utkernel_source/kernel/sysdepend/device/app_at91/tkdev_timer.h Sun Aug 9 11:04:17 2009 *************** *** 62,68 **** #define TnCTCR (TimerBase + 0x0070) #define TimerIntVec 4 - #define TimerIntPri 5 /* 0 (highest) ... 15 (lowest) */ /* * Set timer --- 62,67 ---- *************** *** 113,119 **** knl_define_inthdr(TimerIntVec, knl_timer_handler_startup); /* Timer interrupt enable */ ! EnableInt(TimerIntVec, TimerIntPri); } /* --- 112,118 ---- knl_define_inthdr(TimerIntVec, knl_timer_handler_startup); /* Timer interrupt enable */ ! EnableInt(TimerIntVec); } /* *************** *** 146,152 **** /* Interrupt disable */ DISINT; ! out_w(VICAddress, 0); // issue EOI /* Enable its own interrupt */ out_w(VICIntEnable, 1 << TimerIntVec); --- 145,151 ---- /* Interrupt disable */ DISINT; ! out_w(VICVectorAddr, 0); // issue EOI /* Enable its own interrupt */ out_w(VICIntEnable, 1 << TimerIntVec); diff -Ncr utkernel_source.curr/kernel/sysmain/build/app_at91/Makefile utkernel_source/kernel/sysmain/build/app_at91/Makefile *** utkernel_source.curr/kernel/sysmain/build/app_at91/Makefile Sat Aug 8 11:08:58 2009 --- utkernel_source/kernel/sysmain/build/app_at91/Makefile Sat Aug 8 12:38:24 2009 *************** *** 17,22 **** --- 17,27 ---- # sysmain (system-dependent description) # + BD = /home/uaa/utk/utk.lpc2138/utkernel_source + GNU_BD = /usr/local + TOOL_ORIGIN = GNUarm + GNUarm = /usr/local/arm-elf + # T-Engine type MACHINE = at91 TETYPE = app diff -Ncr utkernel_source.curr/lib/libtk/src/sysdepend/app_at91/int.c utkernel_source/lib/libtk/src/sysdepend/app_at91/int.c *** utkernel_source.curr/lib/libtk/src/sysdepend/app_at91/int.c Sat Aug 8 11:08:58 2009 --- utkernel_source/lib/libtk/src/sysdepend/app_at91/int.c Sun Aug 9 01:08:44 2009 *************** *** 13,19 **** */ /* ! * @(#)int.c (libtk/LPC2388) * * Interrupt controller */ --- 13,19 ---- */ /* ! * @(#)int.c (libtk/LPC2138) * * Interrupt controller */ *************** *** 25,42 **** /* * Enable interrupt * Enables the interrupt specified in intvec. - * intpri is interrupt priority, 0 (Highest) ... 15 (Lowest). */ ! EXPORT void EnableInt( INTVEC intvec, INT intpri ) { - UINT imask; - - DI(imask); - - out_w(VICVectPriority(intvec), intpri); out_w(VICIntEnable, 1 << intvec); - - EI(imask); } /* --- 25,34 ---- /* * Enable interrupt * Enables the interrupt specified in intvec. */ ! EXPORT void EnableInt( INTVEC intvec ) { out_w(VICIntEnable, 1 << intvec); } /* *************** *** 68,95 **** EXPORT void EndOfInt( INTVEC intvec ) { /* write anything to notify */ ! out_w(VICAddress, 0); ! } ! ! /* ! * Interrupt priority mask ! * Masks all interrupts which have equal or lower priority. ! * intpri is priority mask, 0 ... 16. ! * 0/16 masks/unmasks all interrupts, 7 masks priority 7 ... 15. ! * Return value is old priority mask (intpri value). ! */ ! EXPORT INT SetIntLevel( INT intpri ) ! { ! UINT imask, pmask; ! INT lv; ! ! DI(imask); ! ! pmask = in_w(VICSWPriorityMask) & 0xffff; ! out_w(VICSWPriorityMask, 0xffff >> (16 - intpri)); ! ! EI(imask); ! ! for (lv = 0; ; lv++, pmask >>= 1) if (!pmask) break; ! return lv; } --- 60,64 ---- EXPORT void EndOfInt( INTVEC intvec ) { /* write anything to notify */ ! out_w(VICVectorAddr, 0); } diff -Ncr utkernel_source.curr/lib/libtm/src/sysdepend/app_at91/sio.c utkernel_source/lib/libtm/src/sysdepend/app_at91/sio.c *** utkernel_source.curr/lib/libtm/src/sysdepend/app_at91/sio.c Sat Aug 8 11:08:58 2009 --- utkernel_source/lib/libtm/src/sysdepend/app_at91/sio.c Sun Aug 9 22:02:54 2009 *************** *** 7,14 **** #define uartClock (CPU_CLOCK / 4) // Hz #define uartSpeed 38400 // bps #define uartDivisor (uartClock / (uartSpeed * 16)) ! Inline UW uartRead(UW adr) {return *(_UW*)adr;} ! Inline void uartWrite(UW adr, UW dat) {*(_UW*)adr = dat;} #define RHR (uartBase + (0x00 * uartStep)) // r #define THR (uartBase + (0x00 * uartStep)) // w --- 7,14 ---- #define uartClock (CPU_CLOCK / 4) // Hz #define uartSpeed 38400 // bps #define uartDivisor (uartClock / (uartSpeed * 16)) ! Inline UW uartRead(UW adr) {return *(_UB*)adr;} ! Inline void uartWrite(UW adr, UW dat) {*(_UB*)adr = dat;} #define RHR (uartBase + (0x00 * uartStep)) // r #define THR (uartBase + (0x00 * uartStep)) // w *************** *** 62,68 **** void sio_init(void) { *PCONP |= (1 << 3); // UART0 power-up ! *PINSEL0 = (*PINSEL0 & ~(0x0f << 4)) | (0x05 << 4); // TXD0/RXD0 enable uartWrite(IER, 0x00); // disable interrupt --- 62,68 ---- void sio_init(void) { *PCONP |= (1 << 3); // UART0 power-up ! *PINSEL0 = (*PINSEL0 & ~(0x0f << 0)) | (0x05 << 0); // TXD0/RXD0 enable uartWrite(IER, 0x00); // disable interrupt