From 1a734fe2f4fd7aa681f9fd5ca38f4af86e3310b3 Mon Sep 17 00:00:00 2001 From: wuyangyong Date: Wed, 15 Jun 2011 04:02:11 +0000 Subject: [PATCH] update lpc2148 git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1514 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- libcpu/arm/lpc214x/cpu.c | 42 ------ libcpu/arm/lpc214x/{interrupt.c => cpuport.c} | 133 ++++++++++++++---- libcpu/arm/lpc214x/stack.c | 61 -------- libcpu/arm/lpc214x/startup_gcc.S | 8 +- libcpu/arm/lpc214x/trap.c | 40 ------ 5 files changed, 108 insertions(+), 176 deletions(-) delete mode 100644 libcpu/arm/lpc214x/cpu.c rename libcpu/arm/lpc214x/{interrupt.c => cpuport.c} (56%) delete mode 100644 libcpu/arm/lpc214x/stack.c delete mode 100644 libcpu/arm/lpc214x/trap.c diff --git a/libcpu/arm/lpc214x/cpu.c b/libcpu/arm/lpc214x/cpu.c deleted file mode 100644 index 5e228171f..000000000 --- a/libcpu/arm/lpc214x/cpu.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * File : cpu.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Develop Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rt-thread.org/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-08-23 Bernard first version - */ - -#include -#include "lpc214x.h" - -/** - * @addtogroup LPC214x - */ -/*@{*/ - -/** - * this function will reset CPU - * - */ -void rt_hw_cpu_reset() -{ -} - -/** - * this function will shutdown CPU - * - */ -void rt_hw_cpu_shutdown() -{ - rt_kprintf("shutdown...\n"); - - while (1); -} - -/*@}*/ diff --git a/libcpu/arm/lpc214x/interrupt.c b/libcpu/arm/lpc214x/cpuport.c similarity index 56% rename from libcpu/arm/lpc214x/interrupt.c rename to libcpu/arm/lpc214x/cpuport.c index 3c4e78e85..3af1d61a7 100644 --- a/libcpu/arm/lpc214x/interrupt.c +++ b/libcpu/arm/lpc214x/cpuport.c @@ -1,36 +1,76 @@ -/* - * File : trap.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Development Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-08-23 Bernard first version - */ - -#include +/* + * File : cpuport.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-06-15 aozima the first version for lpc214x + */ + +#include #include "lpc214x.h" + +#define MAX_HANDLERS 32 +#define SVCMODE 0x13 -#define MAX_HANDLERS 32 - -extern rt_uint32_t rt_interrupt_nest; - -rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; -rt_uint32_t rt_thread_switch_interrput_flag; +extern rt_uint32_t rt_interrupt_nest; /** * @addtogroup LPC214x */ -/*@{*/ +/*@{*/ + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + unsigned long *stk; + stk = (unsigned long *)stack_addr; + *(stk) = (unsigned long)tentry; /* entry point */ + *(--stk) = (unsigned long)texit; /* 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 long)parameter; /* r0 : argument */ + *(--stk) = SVCMODE; /* cpsr */ + *(--stk) = SVCMODE; /* spsr */ + + /* return task's current stack address */ + return (rt_uint8_t *)stk; +} + +/* exception and interrupt handler table */ +rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrput_flag; + void rt_hw_interrupt_handler(int vector) { rt_kprintf("Unhandled interrupt %d occured!!!\n", vector); -} +} /** * This function will initialize hardware interrupt @@ -39,7 +79,7 @@ void rt_hw_interrupt_init() { rt_base_t index; rt_uint32_t *vect_addr, *vect_ctl; - + /* initialize VIC*/ VICIntEnClr = 0xffffffff; VICVectAddr = 0; @@ -60,7 +100,7 @@ void rt_hw_interrupt_init() rt_interrupt_from_thread = 0; rt_interrupt_to_thread = 0; rt_thread_switch_interrput_flag = 0; -} +} /** * This function will mask a interrupt. @@ -69,8 +109,8 @@ void rt_hw_interrupt_init() void rt_hw_interrupt_mask(int vector) { VICIntEnClr = (1 << vector); -} - +} + /** * This function will un-mask a interrupt. * @param vector the interrupt number @@ -78,8 +118,8 @@ void rt_hw_interrupt_mask(int vector) void rt_hw_interrupt_umask(int vector) { VICIntEnable = (1 << vector); -} - +} + /** * This function will install a interrupt service routine to a interrupt. * @param vector the interrupt number @@ -100,6 +140,41 @@ void rt_hw_interrupt_install(int vector, rt_isr_handler_t new_handler, rt_isr_ha if (old_handler != RT_NULL) *old_handler = (rt_isr_handler_t) *vect_addr; if (new_handler != RT_NULL) *vect_addr = (rt_uint32_t) new_handler; } +} + +/** + * this function will reset CPU + * + */ +void rt_hw_cpu_reset() +{ } +/** + * this function will shutdown CPU + * + */ +void rt_hw_cpu_shutdown() +{ + rt_kprintf("shutdown...\n"); + + while (1); +} + +void rt_hw_trap_irq() +{ + rt_isr_handler_t isr_func; + + isr_func = (rt_isr_handler_t) VICVectAddr; + isr_func(0); + + /* acknowledge Interrupt */ + // VICVectAddr = 0; +} + +void rt_hw_trap_fiq() +{ + rt_kprintf("fast interrupt request\n"); +} + /*@}*/ diff --git a/libcpu/arm/lpc214x/stack.c b/libcpu/arm/lpc214x/stack.c deleted file mode 100644 index 177545f37..000000000 --- a/libcpu/arm/lpc214x/stack.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * File : stack.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Development Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-08-23 Bernard the first version - */ -#include - -#define SVCMODE 0x13 - -/** - * @addtogroup LPC214x - */ -/*@{*/ - -/** - * This function will initialize thread stack - * - * @param tentry the entry of thread - * @param parameter the parameter of entry - * @param stack_addr the beginning stack address - * @param texit the function will be called when thread exit - * - * @return stack address - */ -rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, - rt_uint8_t *stack_addr, void *texit) -{ - unsigned long *stk; - - stk = (unsigned long *)stack_addr; - *(stk) = (unsigned long)tentry; /* entry point */ - *(--stk) = (unsigned long)texit; /* 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 long)parameter; /* r0 : argument */ - *(--stk) = SVCMODE; /* cpsr */ - *(--stk) = SVCMODE; /* spsr */ - - /* return task's current stack address */ - return (rt_uint8_t *)stk; -} - -/*@}*/ diff --git a/libcpu/arm/lpc214x/startup_gcc.S b/libcpu/arm/lpc214x/startup_gcc.S index f14bec39a..13e01c7dc 100644 --- a/libcpu/arm/lpc214x/startup_gcc.S +++ b/libcpu/arm/lpc214x/startup_gcc.S @@ -1,7 +1,7 @@ .extern main /* 引入外部C入口 */ .extern __bss_beg__ - .extern __bss_end__ + .extern __bss_end .extern __stack_end__ .extern __data_beg__ .extern __data_end__ @@ -66,9 +66,9 @@ .equ PLLCON_PLLE, (1<<0) /* PLL Enable */ .equ PLLCON_PLLC, (1<<1) /* PLL Connect */ .equ PLLSTAT_LOCK, (1<<10) /* PLL Lock Status */ - .equ PLLCFG_MSEL, ((PLL_MUL - 1) << 0) + //.equ PLLCFG_MSEL, ((PLL_MUL - 1) << 0) .equ PLLCFG_PSEL, (0x02 << 5) - .equ PLLCFG_Val, (PLLCFG_MSEL|PLLCFG_PSEL) + //.equ PLLCFG_Val, (PLLCFG_MSEL|PLLCFG_PSEL) .equ MEMMAP, 0xE01FC040 /*Memory Mapping Control*/ @@ -208,7 +208,7 @@ endless_loop: .LC1: .word __bss_beg__ .LC2: - .word __bss_end__ + .word __bss_end .LC3: .word __data_beg__ .LC4: diff --git a/libcpu/arm/lpc214x/trap.c b/libcpu/arm/lpc214x/trap.c deleted file mode 100644 index e0237e8b2..000000000 --- a/libcpu/arm/lpc214x/trap.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * File : trap.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Development Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-08-25 Bernard first version - */ - -#include -#include -#include "lpc214x.h" - -/** - * @addtogroup LPC214x - */ -/*@{*/ - -void rt_hw_trap_irq() -{ - rt_isr_handler_t isr_func; - - isr_func = (rt_isr_handler_t) VICVectAddr; - isr_func(0); - - /* acknowledge Interrupt */ - // VICVectAddr = 0; -} - -void rt_hw_trap_fiq() -{ - rt_kprintf("fast interrupt request\n"); -} - -/*@}*/