1 //==========================================================================
5 // HAL implementation miscellaneous functions
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.
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.
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
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.
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.
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.
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####
46 // Purpose: HAL miscellaneous functions
47 // Description: This file contains miscellaneous functions provided by the
50 //####DESCRIPTIONEND####
52 //========================================================================*/
54 #include <pkgconf/hal.h>
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
60 #include <cyg/hal/hal_intr.h>
62 #include <cyg/hal/hal_misc.h>
63 /*------------------------------------------------------------------------*/
64 // Array which stores the configured priority levels for the configured
67 /* this may be useful later when interrupt masking of internal interrupt
68 sources is implemented
70 volatile CYG_BYTE hal_interrupt_level[CYGNUM_HAL_ISR_COUNT];
72 /*------------------------------------------------------------------------*/
74 void hal_variant_init(void)
78 //--------------------------------------------------------------------------
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.
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
88 unsigned int calc(unsigned long long n){
89 return n * TIMER_TIME / 1000000;
92 cyg_uint16 timer_status;
95 // stop eventually running counter and initialize
96 HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x812);
98 HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMRLR, 0xFFFF);
101 HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x813);
103 // look for underflow
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);
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);
115 HAL_WRITE_UINT16(CYG_HAL_FR30_DLY_TMCSR, 0x813);
116 // look for underflow
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);
124 /*------------------------------------------------------------------------*/
125 /* End of var_misc.c */