]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/m68k/mcf52xx/mcf5272/mcf5272c3/plf/v2_0/include/plf_intr.h
Initial revision
[karo-tx-redboot.git] / packages / hal / m68k / mcf52xx / mcf5272 / mcf5272c3 / plf / v2_0 / include / plf_intr.h
1 #ifndef CYGONCE_HAL_PLF_INTR_H
2 #define CYGONCE_HAL_PLF_INTR_H
3
4 //==========================================================================
5 //
6 //      plf_intr.h
7 //
8 //      Platform specific interrupt and clock support
9 //
10 //
11 //==========================================================================
12 //####ECOSGPLCOPYRIGHTBEGIN####
13 // -------------------------------------------
14 // This file is part of eCos, the Embedded Configurable Operating System.
15 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
16 //
17 // eCos is free software; you can redistribute it and/or modify it under
18 // the terms of the GNU General Public License as published by the Free
19 // Software Foundation; either version 2 or (at your option) any later version.
20 //
21 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
22 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
23 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
24 // for more details.
25 //
26 // You should have received a copy of the GNU General Public License along
27 // with eCos; if not, write to the Free Software Foundation, Inc.,
28 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
29 //
30 // As a special exception, if other files instantiate templates or use macros
31 // or inline functions from this file, or you compile this file and link it
32 // with other works to produce a work based on this file, this file does not
33 // by itself cause the resulting work to be covered by the GNU General Public
34 // License. However the source code for this file must still be made available
35 // in accordance with section (3) of the GNU General Public License.
36 //
37 // This exception does not invalidate any other reasons why a work based on
38 // this file might be covered by the GNU General Public License.
39 //
40 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
41 // at http://sources.redhat.com/ecos/ecos-license/
42 // -------------------------------------------
43 //####ECOSGPLCOPYRIGHTEND####
44 //==========================================================================
45
46 #include <pkgconf/hal.h>
47 #include <cyg/infra/cyg_type.h>
48
49 //--------------------------------------------------------------------------
50 // Interrupt vectors.
51
52 /*      The vector used by the Real time clock                              */
53
54 #define CYGNUM_HAL_INTERRUPT_RTC (CYGNUM_HAL_VECTOR_TMR4)
55
56 //---------------------------------------------------------------------------
57 // Clock control
58
59 /*      The mcf5272 has 4 timers 0-3.  Define the timer number that we want */
60 /* to use for the OS's clock.                                               */
61
62 #define CYGNUM_HAL_RTC_TIMER_NUM (3)
63
64 /*      Set the timer to generate 1 ms or 1000000 ns period interrupts.     */
65
66 #define HAL_M68K_MCF52xx_MCF5272_CLOCK_NS 1000000
67 #if CYGNUM_HAL_RTC_PERIOD != HAL_M68K_MCF52xx_MCF5272_CLOCK_NS
68 #warning Unexpected clock period for this board!!!
69 #endif
70
71 /*      Initialize the timer to generate an interrupt every 1 ms.  Use  the */
72 /* system clock divided by 16 as  the source.  Using 11*3 as the  prescaler */
73 /* gives a 8 us counter.  When this counter reaches 125 (1 ms) generate  an */
74 /* interrupt.                                                               */
75
76 #define HAL_CLOCK_INITIALIZE(_period_)                                      \
77 CYG_MACRO_START                                                             \
78 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].tmr = 0x0000;                  \
79 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].trr = 125-1;                   \
80 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].tcn = 0;                       \
81 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].ter = 0x0003;                  \
82 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].tmr =                          \
83     (((3*11)-1) << MCF5272_TIMER_TMR_PS_BIT) |                              \
84     (0 << MCF5272_TIMER_TMR_CE_BIT) |                                       \
85     (0 << MCF5272_TIMER_TMR_OM_BIT) |                                       \
86     (1 << MCF5272_TIMER_TMR_ORI_BIT) |                                      \
87     (1 << MCF5272_TIMER_TMR_FRR_BIT) |                                      \
88     (2 << MCF5272_TIMER_TMR_CLK_BIT) |                                      \
89     (1 << MCF5272_TIMER_TMR_RST_BIT);                                       \
90 CYG_MACRO_END
91
92 /*      We must clear the bit in the timer event register before we can get */
93 /* another interrupt.                                                       */
94
95 #define HAL_CLOCK_RESET( _vector_, _period_ )                               \
96 CYG_MACRO_START                                                             \
97 MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].ter = 0x0002;                  \
98 CYG_MACRO_END
99
100 /*      Read the current counter from the timer.                            */
101
102 #define HAL_CLOCK_READ( _pvalue_ )                                          \
103 CYG_MACRO_START                                                             \
104 *(_pvalue_) = MCF5272_SIM->timer[CYGNUM_HAL_RTC_TIMER_NUM].tcn;             \
105 CYG_MACRO_END
106
107 //---------------------------------------------------------------------------
108 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
109