]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/hal/fr30/mb91301/v2_0/src/var_misc.c
Initial revision
[karo-tx-redboot.git] / packages / hal / fr30 / mb91301 / v2_0 / src / var_misc.c
1 //==========================================================================
2 //
3 //      var_misc.c
4 //
5 //      HAL implementation miscellaneous functions
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 //
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
42 //
43 // Author(s):    larsi
44 // Contributors:
45 // Date:         2007-07-09
46 // Purpose:      HAL miscellaneous functions
47 // Description:  This file contains miscellaneous functions provided by the
48 //               HAL.
49 //
50 //####DESCRIPTIONEND####
51 //
52 //========================================================================*/
53
54 #include <pkgconf/hal.h>
55
56 #include <cyg/infra/cyg_type.h>         // Base types
57 #include <cyg/infra/cyg_trac.h>         // tracing macros
58 #include <cyg/infra/cyg_ass.h>          // assertion macros
59
60 #include <cyg/hal/hal_intr.h>
61
62 #include <cyg/hal/hal_misc.h>
63 /*------------------------------------------------------------------------*/
64 // Array which stores the configured priority levels for the configured
65 // interrupts.
66
67 /* this may be useful later when interrupt masking of internal interrupt
68    sources is implemented
69
70 volatile CYG_BYTE hal_interrupt_level[CYGNUM_HAL_ISR_COUNT];
71 */
72 /*------------------------------------------------------------------------*/
73
74 void hal_variant_init(void)
75 {
76 }
77
78 //--------------------------------------------------------------------------
79 // Microsecond delay
80 // This uses reload timer 2, because timer 0 and 1 can cause DMA transfers
81 // and may be used by the application.
82 // Timer is initialized with 32 prescaler. If we need more precise delay
83 // this has to change.
84
85 void hal_delay_us(cyg_int32 n){
86 #define TIMER_TIME  CYGHWR_HAL_FR30_MB91301_SYSTEM_CLOCK_MHZ * 1000000 / CYGHWR_HAL_FR30_MB91301_CLKP_DIVIDER / 32
87
88     unsigned int calc(unsigned long long n){
89         return n * TIMER_TIME / 1000000;
90     }
91
92     cyg_uint16  timer_status;
93
94     n = 21;//calc(n);
95     // stop eventually running counter and initialize
96     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x812);
97
98     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMRLR, 0xFFFF);
99     while(n > 0xffff){
100         // start counting
101         HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x813);
102         n = n - 0xffff;
103         // look for underflow
104         do {
105             HAL_READ_UINT16(CYG_HAL_FR30_DLY_TMCSR, timer_status);
106         } while (!(timer_status & BIT2));
107         // clear underflow bit
108         HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x813);
109     }
110     // clear count enable bit
111     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x810);
112     // set new remaining count value
113     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMRLR, n);
114     // start counting
115     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x813);
116     // look for underflow
117     do {
118         HAL_READ_UINT16(CYG_HAL_FR30_DLY_TMCSR, timer_status);
119     } while (!(timer_status & BIT2));
120     // clear underflow and count enable bits
121     HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x810);
122 }
123
124 /*------------------------------------------------------------------------*/
125 /* End of var_misc.c                                                      */