diff options
| author | Bernard Xiong <[email protected]> | 2013-03-26 09:08:25 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2013-03-26 09:08:25 +0800 |
| commit | 8e6a534fa3411d86ca61c1291fde39d0b893094e (patch) | |
| tree | 50fec5f77c0fd63b112952118a7a81056a981cb6 | |
| parent | e9c86a175016568fed2e45fd6f2ffa4c7c77bffb (diff) | |
fix compiling issue in Jz47XX
| -rw-r--r-- | bsp/jz47xx/board.c | 31 | ||||
| -rw-r--r-- | bsp/jz47xx/rtconfig.h | 1 | ||||
| -rw-r--r-- | bsp/jz47xx/uart.c | 6 | ||||
| -rw-r--r-- | libcpu/mips/jz47xx/interrupt.c | 35 |
4 files changed, 29 insertions, 44 deletions
diff --git a/bsp/jz47xx/board.c b/bsp/jz47xx/board.c index 439534ec8c..b2f1ba0092 100644 --- a/bsp/jz47xx/board.c +++ b/bsp/jz47xx/board.c @@ -27,7 +27,7 @@ /** * This is the timer interrupt service routine. */ -void rt_hw_timer_handler() +void rt_hw_timer_handler(int vector, void* param) { /* increase a OS tick */ rt_tick_increase(); @@ -52,33 +52,6 @@ void rt_hw_timer_init() /* clear counter */ OST_CNT = 0; -#if 0 - switch (RTC_DIV) - { - case 1: - val = OST_TCSR_PRESCALE1; - break; - case 4: - val = OST_TCSR_PRESCALE4; - break; - case 16: - val = OST_TCSR_PRESCALE16; - break; - case 64: - val = OST_TCSR_PRESCALE64; - break; - case 256: - val = OST_TCSR_PRESCALE256; - break; - case 1024: - val = OST_TCSR_PRESCALE1024; - break; - default: - val = OST_TCSR_PRESCALE4; - break; - } -#endif - #ifdef RTC_SRC_EXTAL OST_CSR = (val | OST_TCSR_EXT_EN); #else @@ -89,7 +62,7 @@ void rt_hw_timer_init() TCU_TMCR = TCU_TMCR_OSTMCL; TCU_TESR = TCU_TESR_OSTST; - rt_hw_interrupt_install(IRQ_TCU0, rt_hw_timer_handler, RT_NULL); + rt_hw_interrupt_install(IRQ_TCU0, rt_hw_timer_handler, RT_NULL, "tick"); rt_hw_interrupt_umask (IRQ_TCU0); } diff --git a/bsp/jz47xx/rtconfig.h b/bsp/jz47xx/rtconfig.h index d1457c486b..47f7beae7a 100644 --- a/bsp/jz47xx/rtconfig.h +++ b/bsp/jz47xx/rtconfig.h @@ -18,6 +18,7 @@ /* Thread Debug */ #define RT_DEBUG #define RT_USING_OVERFLOW_CHECK +#define RT_USING_INTERRUPT_INFO /* Using Hook */ #define RT_USING_HOOK diff --git a/bsp/jz47xx/uart.c b/bsp/jz47xx/uart.c index eaa0a4cf72..309a89d63f 100644 --- a/bsp/jz47xx/uart.c +++ b/bsp/jz47xx/uart.c @@ -129,10 +129,10 @@ struct rt_uart_jz rt_uint8_t rx_buffer[RT_UART_RX_BUFFER_SIZE]; }uart_device; -static void rt_uart_irqhandler(int irqno) +static void rt_uart_irqhandler(int vector, void* param) { rt_ubase_t level, isr; - struct rt_uart_jz* uart = &uart_device; + struct rt_uart_jz* uart = param; /* read interrupt status and clear it */ isr = UART_ISR(uart->hw_base); @@ -212,7 +212,7 @@ static rt_err_t rt_uart_open(rt_device_t dev, rt_uint16_t oflag) UART_IER(uart->hw_base) |= (UARTIER_RIE | UARTIER_RTIE); /* install interrupt */ - rt_hw_interrupt_install(uart->irq, rt_uart_irqhandler, RT_NULL); + rt_hw_interrupt_install(uart->irq, rt_uart_irqhandler, uart, "uart"); rt_hw_interrupt_umask(uart->irq); } return RT_EOK; diff --git a/libcpu/mips/jz47xx/interrupt.c b/libcpu/mips/jz47xx/interrupt.c index 7d531cbd71..f9ada3254a 100644 --- a/libcpu/mips/jz47xx/interrupt.c +++ b/libcpu/mips/jz47xx/interrupt.c @@ -11,7 +11,7 @@ * Date Author Notes * 2010-07-09 Bernard first version */ -#include <rtthread.h> +#include <rthw.h> #include "jz47xx.h" #define JZ47XX_MAX_INTR 32 @@ -20,7 +20,7 @@ extern rt_uint32_t rt_interrupt_nest; rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; rt_uint32_t rt_thread_switch_interrupt_flag; -static rt_isr_handler_t irq_handle_table[JZ47XX_MAX_INTR]; +static struct rt_irq_desc irq_handle_table[JZ47XX_MAX_INTR]; /** * @addtogroup Jz47xx @@ -39,9 +39,10 @@ void rt_hw_interrupt_init() { rt_int32_t index; + rt_memset(irq_handle_table, 0x00, sizeof(irq_handle_table)); for (index = 0; index < JZ47XX_MAX_INTR; index ++) { - irq_handle_table[index] = (rt_isr_handler_t)rt_hw_interrupt_handler; + irq_handle_table[index].handler = (rt_isr_handler_t)rt_hw_interrupt_handler; } /* init interrupt nest, and context in thread sp */ @@ -73,18 +74,28 @@ void rt_hw_interrupt_umask(int vector) /** * This function will install a interrupt service routine to a interrupt. * @param vector the interrupt number - * @param new_handler the interrupt service routine to be installed - * @param old_handler the old interrupt service routine + * @param handler the interrupt service routine to be installed + * @param param the interrupt service function parameter + * @param name the interrupt name + * @return old handler */ -void rt_hw_interrupt_install(int vector, rt_isr_handler_t new_handler, rt_isr_handler_t *old_handler) +rt_isr_handler_t rt_hw_interrupt_install(int vector, + rt_isr_handler_t handler, + void *param, + char *name) { + rt_isr_handler_t old_handler = RT_NULL; + if (vector >= 0 && vector < JZ47XX_MAX_INTR) { - if (old_handler != RT_NULL) - *old_handler = irq_handle_table[vector]; - if (new_handler != RT_NULL) - irq_handle_table[vector] = (rt_isr_handler_t)new_handler; + old_handler = irq_handle_table[vector].handler; + + rt_strncpy(irq_handle_table[vector].name, name, RT_NAME_MAX); + irq_handle_table[vector].handler = handler; + irq_handle_table[vector].param = param; } + + return old_handler; } void rt_interrupt_dispatch(void *ptreg) @@ -102,10 +113,10 @@ void rt_interrupt_dispatch(void *ptreg) if ((pending & (1<<i))) { pending &= ~(1<<i); - irq_func = irq_handle_table[i]; + irq_func = irq_handle_table[i].handler; /* do interrupt */ - (*irq_func)(i); + (*irq_func)(i, irq_handle_table[i].param); /* ack interrupt */ INTC_IPR = (1 << i); |
