From dc20057d39d8be9a918f1eee8d3717bb6954ec6d Mon Sep 17 00:00:00 2001 From: rasky Date: Fri, 30 Jul 2004 14:27:49 +0000 Subject: [PATCH] Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management git-svn-id: https://src.develer.com/svnoss/bertos/trunk@92 38d2e660-2303-0410-9eaa-f027e97ec537 --- drv/ser_dsp56k.c | 48 +++++++++++++--------------------------------- drv/timer_dsp56k.h | 14 ++++++++++---- 2 files changed, 23 insertions(+), 39 deletions(-) diff --git a/drv/ser_dsp56k.c b/drv/ser_dsp56k.c index 6c75f8a3..cb892c72 100755 --- a/drv/ser_dsp56k.c +++ b/drv/ser_dsp56k.c @@ -15,6 +15,9 @@ /* * $Log$ + * Revision 1.4 2004/07/30 14:27:49 rasky + * Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management + * * Revision 1.3 2004/06/03 11:27:09 bernie * Add dual-license information. * @@ -26,6 +29,7 @@ #include "ser.h" #include "ser_p.h" #include +#include #include #include @@ -47,11 +51,10 @@ struct SCI struct SerialHardware hw; struct Serial* serial; volatile struct REG_SCI_STRUCT* regs; - uint16_t irq_tx; - uint16_t irq_rx; + IRQ_VECTOR irq_tx; + IRQ_VECTOR irq_rx; }; - static inline void enable_tx_irq_bare(volatile struct REG_SCI_STRUCT* regs) { regs->CR |= REG_SCI_CR_TEIE | REG_SCI_CR_TIIE; @@ -96,8 +99,9 @@ static inline void enable_rx_irq(struct SerialHardware* _hw) enable_rx_irq_bare(regs); } -INLINE void tx_isr(struct SCI *hw) +static void tx_isr(const struct SCI *hw) { +#pragma interrupt warn volatile struct REG_SCI_STRUCT* regs = hw->regs; if (fifo_isempty(&hw->serial->txfifo)) @@ -110,8 +114,9 @@ INLINE void tx_isr(struct SCI *hw) } } -INLINE void rx_isr(struct SCI *hw) +static void rx_isr(const struct SCI *hw) { +#pragma interrupt warn volatile struct REG_SCI_STRUCT* regs = hw->regs; hw->serial->status |= regs->SR & (SERRF_PARITYERROR | @@ -141,7 +146,9 @@ static void init(struct SerialHardware* _hw, struct Serial* ser) // Clear data register (void)regs->DR; - // Set priorities for both IRQs + // Install the handlers and set priorities for both IRQs + irq_install(hw->irq_tx, (isr_t)tx_isr, hw); + irq_install(hw->irq_rx, (isr_t)rx_isr, hw); irq_setpriority(hw->irq_tx, IRQ_PRIORITY_SCI_TX); irq_setpriority(hw->irq_rx, IRQ_PRIORITY_SCI_RX); @@ -205,35 +212,6 @@ static struct SCI SCIDescs[2] = }; - -void ser_hw_tx_isr_0(void); -void ser_hw_tx_isr_0(void) -{ -#pragma interrupt warn - tx_isr(&SCIDescs[0]); -} - -void ser_hw_rx_isr_0(void); -void ser_hw_rx_isr_0(void) -{ -#pragma interrupt warn - rx_isr(&SCIDescs[0]); -} - -void ser_hw_tx_isr_1(void); -void ser_hw_tx_isr_1(void) -{ -#pragma interrupt warn - tx_isr(&SCIDescs[1]); -} - -void ser_hw_rx_isr_1(void); -void ser_hw_rx_isr_1(void) -{ -#pragma interrupt warn - rx_isr(&SCIDescs[1]); -} - struct SerialHardware* ser_hw_getdesc(int unit) { ASSERT(unit < 2); diff --git a/drv/timer_dsp56k.h b/drv/timer_dsp56k.h index 025b5a8e..b7f32583 100755 --- a/drv/timer_dsp56k.h +++ b/drv/timer_dsp56k.h @@ -15,6 +15,9 @@ /* * $Log$ + * Revision 1.4 2004/07/30 14:27:49 rasky + * Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management + * * Revision 1.3 2004/06/06 18:30:34 bernie * Import DSP56800 changes from SC. * @@ -29,9 +32,11 @@ #ifndef DRV_TIMER_DSP56K_H #define DRV_TIMER_DSP56K_H +#include "timer.h" #include #include #include +#include // Calculate register pointer and irq vector from hw.h setting #define REG_SYSTEM_TIMER PP_CAT(REG_TIMER_, SYSTEM_TIMER) @@ -46,6 +51,8 @@ //! Type of time expressed in ticks of the hardware high precision timer typedef uint16_t hptime_t; +static void system_timer_isr(UNUSED(IPTR, arg)); + static void timer_hw_init(void) { uint16_t compare; @@ -65,7 +72,8 @@ static void timer_hw_init(void) // The value for reload (at initializationa and after compare is met) is zero REG_SYSTEM_TIMER->LOAD = 0; - // Set the interrupt priority + // Set the interrupt handler and priority + irq_install(SYSTEM_TIMER_IRQ_VECTOR, &system_timer_isr, NULL); irq_setpriority(SYSTEM_TIMER_IRQ_VECTOR, IRQ_PRIORITY_SYSTEM_TIMER); // Small preprocessor trick to generate the REG_TIMER_CTRL_PRIMARY_IPBYNN macro @@ -90,9 +98,7 @@ INLINE hptime_t timer_hw_hpread(void) return REG_SYSTEM_TIMER->CNTR; } -void system_timer_isr(void); - #define DEFINE_TIMER_ISR \ - void system_timer_isr(void) + static void system_timer_isr(UNUSED(IPTR, arg)) #endif /* DRV_TIMER_DSP56_H */ -- 2.25.1