annotate packages/hal/mn10300/am33/current/src/var_misc.c @ 1777:c16341b1bac6 default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Mon, 12 Oct 2009 02:26:09 +0100
parents 3de3d5e778f2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
2 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
3 // var_misc.c
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
4 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
5 // HAL CPU variant miscellaneous functions
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
6 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
7 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
12 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
14 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
16 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
20 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
21 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
22 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
25 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
27 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
28 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
30 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
32 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
34 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
38 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
40 //==========================================================================
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
42 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
43 // Author(s): nickg
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
44 // Contributors: nickg, jlarmour, dmoseley
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
45 // Date: 1999-01-21
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
46 // Purpose: HAL miscellaneous functions
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
47 // Description: This file contains miscellaneous functions provided by the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
48 // HAL.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
49 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
50 //####DESCRIPTIONEND####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
51 //
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
52 //========================================================================*/
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
53
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
54 #include <pkgconf/hal.h>
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
55
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
56 #include <cyg/infra/cyg_type.h> // Base types
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
57 #include <cyg/infra/cyg_trac.h> // tracing macros
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
58 #include <cyg/infra/cyg_ass.h> // assertion macros
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
59
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
60 #include <cyg/hal/hal_cache.h>
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
61
421
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
62 #include <cyg/hal/hal_intr.h> // HAL_CLOCK_READ
453
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
63 #include CYGHWR_MEMORY_LAYOUT_H
421
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
64
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
65 /*------------------------------------------------------------------------*/
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
66 /* Variant specific initialization routine. */
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
67
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
68 void hal_variant_init(void)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
69 {
421
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
70 // Let the timer run at a default rate (for delays)
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
71 HAL_CLOCK_INITIALIZE(CYGNUM_HAL_RTC_PERIOD);
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
72 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
73
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
74 /*------------------------------------------------------------------------*/
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
75 /* Cache functions. */
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
77 #if 0 //!defined(CYG_HAL_MN10300_SIM)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
78 void cyg_hal_dcache_store(CYG_ADDRWORD base, int size)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
79 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
80 volatile register CYG_BYTE *way0 = HAL_DCACHE_PURGE_WAY0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
81 volatile register CYG_BYTE *way1 = HAL_DCACHE_PURGE_WAY1;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
82 volatile register CYG_BYTE *way2 = HAL_DCACHE_PURGE_WAY2;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
83 volatile register CYG_BYTE *way3 = HAL_DCACHE_PURGE_WAY3;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
84 register int i;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
85 register CYG_ADDRWORD state;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
86
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
87 HAL_DCACHE_IS_ENABLED(state);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
88 if (state)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
89 HAL_DCACHE_DISABLE();
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
90
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
91 way0 += base & 0x000003f0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
92 way1 += base & 0x000003f0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
93 way2 += base & 0x000003f0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
94 way3 += base & 0x000003f0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
95 for( i = 0; i < size; i += HAL_DCACHE_LINE_SIZE )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
96 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
97 *(CYG_ADDRWORD *)way0 = 0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
98 *(CYG_ADDRWORD *)way1 = 0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
99 *(CYG_ADDRWORD *)way2 = 0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
100 *(CYG_ADDRWORD *)way3 = 0;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
101 way0 += HAL_DCACHE_LINE_SIZE;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
102 way1 += HAL_DCACHE_LINE_SIZE;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
103 way2 += HAL_DCACHE_LINE_SIZE;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
104 way3 += HAL_DCACHE_LINE_SIZE;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
105 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
106 if (state)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
107 HAL_DCACHE_ENABLE();
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
108 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
109 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
110
421
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
111 /*------------------------------------------------------------------------*/
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
112 /* Clock functions. */
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
113
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
114 cyg_uint32 __hal_period__;
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
115
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
116 // Delay for some usecs.
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
117 void
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
118 hal_delay_us(cyg_int32 delay)
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
119 {
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
120 #define _TICKS_PER_USEC (CYGHWR_HAL_MN10300_PROCESSOR_OSC/1000000)
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
121 cyg_uint32 now, prev, diff, usecs;
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
122
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
123 diff = usecs = 0;
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
124 HAL_CLOCK_READ(&prev);
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
125
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
126 while (delay > usecs) {
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
127 HAL_CLOCK_READ(&now);
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
128
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
129 if (now < prev)
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
130 diff += (now + (__hal_period__ - prev));
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
131 else
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
132 diff += (now - prev);
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
133
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
134 prev = now;
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
135
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
136 if (diff >= _TICKS_PER_USEC) {
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
137 usecs += (diff / _TICKS_PER_USEC);
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
138 diff %= _TICKS_PER_USEC;
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
139 }
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
140 }
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
141 }
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
142
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
143
453
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
144 /*------------------------------------------------------------------------*/
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
145 /* Memory top support */
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
146
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
147 #define SDBASE0 ((volatile unsigned *)0xDA000008)
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
148 #define SDBASE1 ((volatile unsigned *)0xDA00000C)
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
149 #define SDRAMBUS ((volatile unsigned *)0xDA000000)
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
150
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
151 #if CYGINT_HAL_MN10300_MEM_REAL_REGION_TOP
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
152 externC cyg_uint8 *
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
153 hal_mn10300_mem_real_region_top( cyg_uint8 *regionend )
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
154 {
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
155 unsigned dram_size, dram_base;
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
156
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
157 // Figure out actual DRAM size from memory controller config.
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
158 dram_size = 0x400000 << ((*SDRAMBUS >> 16) & 0x3);
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
159 if (*SDBASE1 & 1)
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
160 dram_size *= 2;
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
161 dram_base = (*SDBASE0 & ((*SDBASE0 & 0xfff0) << 16));
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
162
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
163 CYG_ASSERT( dram_size >= 8<<20, "Less than 8MB SDRAM reported!" );
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
164 CYG_ASSERT( dram_size <= 256<<20, "More than 256MB SDRAM reported!" );
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
165
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
166 // is it the "normal" end of the DRAM region? If so, it should be
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
167 // replaced by the real size
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
168 if ( regionend ==
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
169 ((cyg_uint8 *)CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE) ) {
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
170 regionend = (cyg_uint8 *)dram_base + dram_size;
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
171 }
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
172 return regionend;
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
173 }
3de3d5e778f2 AM33 enhancements
msalter
parents: 421
diff changeset
174 #endif
421
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
175
9352d202f4b1 Upgrade mn10300/asb2303 from cygmon to RedBoot
msalter
parents: 210
diff changeset
176
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
177 #ifdef CYGPKG_CYGMON
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
178 /*------------------------------------------------------------------------*/
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
179 /* GDB Register functions. */
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
180 #include <cyg/hal/var_arch.h>
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
181 #include <cyg/hal/hal_stub.h>
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
182
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
183 #if CYGHWR_HAL_MN10300_AM33_REVISION == 2
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
184 int fpu_regs_read = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
185 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
186
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
187 int msp_read = 0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
188
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
189 extern int *_registers_valid;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
190
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
191 void am33_get_gdb_extra_registers(CYG_ADDRWORD *registers, HAL_SavedRegisters *regs)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
192 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
193 register CYG_ADDRWORD epsw;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
194 asm volatile (" mov epsw, %0 " : "=r" (epsw) : );
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
195
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
196 registers[15] = regs->e0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
197 registers[16] = regs->e1;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
198 registers[17] = regs->e2;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
199 registers[18] = regs->e3;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
200 registers[19] = regs->e4;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
201 registers[20] = regs->e5;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
202 registers[21] = regs->e6;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
203 registers[22] = regs->e7;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
204
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
205 registers[26] = regs->mcrh;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
206 registers[27] = regs->mcrl;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
207 registers[28] = regs->mcvf;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
208
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
209 registers[14] = regs->mdrq;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
210
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
211 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
212 register CYG_ADDRWORD ssp, usp, msp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
213 asm volatile (" mov usp, %0 " : "=a" (usp) : );
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
214 asm volatile (" mov ssp, %0 " : "=a" (ssp) : );
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
215 if ((epsw & HAL_ARCH_AM33_PSW_ML) == HAL_ARCH_AM33_PSW_ML)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
216 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
217 // We are running in Monitor mode. Go ahead and read the MSP.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
218 asm volatile (" mov msp, %0 " : "=a" (msp) : );
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
219 msp_read = 1;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
220 } else {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
221 msp = 0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
222 msp_read = 0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
223 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
224
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
225 // Now we need to determine which sp was in effect when we hit this exception,
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
226 // since we want the register image to reflect the state at the time of the
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
227 // exception.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
228 if ((regs->psw & HAL_ARCH_AM33_PSW_ML) == HAL_ARCH_AM33_PSW_ML)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
229 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
230 msp = regs->sp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
231 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
232 else if ((regs->psw & HAL_ARCH_AM33_PSW_nSL) == 0)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
233 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
234 ssp = regs->sp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
235 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
236 else
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
237 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
238 usp = regs->sp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
239 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
240
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
241 registers[23] = ssp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
242 registers[24] = msp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
243 registers[25] = usp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
244 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
245
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
246 #if CYGHWR_HAL_MN10300_AM33_REVISION == 2
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
247 if ((regs->psw & HAL_ARCH_AM33_PSW_FE) == HAL_ARCH_AM33_PSW_FE)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
248 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
249 // The FPU is enabled. Go ahead and read the registers
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
250 asm volatile (" fmov fpcr, %0 " : "=d" (registers[29]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
251 asm volatile (" fmov fs0, %0 " : "=m" (registers[32]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
252 asm volatile (" fmov fs1, %0 " : "=m" (registers[33]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
253 asm volatile (" fmov fs2, %0 " : "=m" (registers[34]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
254 asm volatile (" fmov fs3, %0 " : "=m" (registers[35]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
255 asm volatile (" fmov fs4, %0 " : "=m" (registers[36]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
256 asm volatile (" fmov fs5, %0 " : "=m" (registers[37]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
257 asm volatile (" fmov fs6, %0 " : "=m" (registers[38]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
258 asm volatile (" fmov fs7, %0 " : "=m" (registers[39]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
259 asm volatile (" fmov fs8, %0 " : "=m" (registers[40]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
260 asm volatile (" fmov fs9, %0 " : "=m" (registers[41]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
261 asm volatile (" fmov fs10, %0 " : "=m" (registers[42]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
262 asm volatile (" fmov fs11, %0 " : "=m" (registers[43]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
263 asm volatile (" fmov fs12, %0 " : "=m" (registers[44]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
264 asm volatile (" fmov fs13, %0 " : "=m" (registers[45]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
265 asm volatile (" fmov fs14, %0 " : "=m" (registers[46]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
266 asm volatile (" fmov fs15, %0 " : "=m" (registers[47]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
267 asm volatile (" fmov fs16, %0 " : "=m" (registers[48]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
268 asm volatile (" fmov fs17, %0 " : "=m" (registers[49]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
269 asm volatile (" fmov fs18, %0 " : "=m" (registers[50]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
270 asm volatile (" fmov fs19, %0 " : "=m" (registers[51]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
271 asm volatile (" fmov fs20, %0 " : "=m" (registers[52]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
272 asm volatile (" fmov fs21, %0 " : "=m" (registers[53]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
273 asm volatile (" fmov fs22, %0 " : "=m" (registers[54]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
274 asm volatile (" fmov fs23, %0 " : "=m" (registers[55]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
275 asm volatile (" fmov fs24, %0 " : "=m" (registers[56]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
276 asm volatile (" fmov fs25, %0 " : "=m" (registers[57]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
277 asm volatile (" fmov fs26, %0 " : "=m" (registers[58]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
278 asm volatile (" fmov fs27, %0 " : "=m" (registers[59]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
279 asm volatile (" fmov fs28, %0 " : "=m" (registers[60]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
280 asm volatile (" fmov fs29, %0 " : "=m" (registers[61]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
281 asm volatile (" fmov fs30, %0 " : "=m" (registers[62]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
282 asm volatile (" fmov fs31, %0 " : "=m" (registers[63]) : );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
283 fpu_regs_read = 1;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
284 } else {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
285 fpu_regs_read = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
286 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
287 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
288
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
289 #ifdef CYGHWR_REGISTER_VALIDITY_CHECKING
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
290 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
291 int i;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
292
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
293 // Initially set all registers to valid
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
294 for (i = 0; i < NUMREGS; i++)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
295 _registers_valid[i] = 1;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
296
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
297 if (msp_read == 0)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
298 _registers_valid[MSP] = 0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
299
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
300 if (fpu_regs_read == 0)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
301 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
302 for (i = FP_START; i <= FP_END; i++)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
303 _registers_valid[i] = 0;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
304 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
305 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
306 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
307 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
308
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
309 void am33_set_gdb_extra_registers(CYG_ADDRWORD *registers, HAL_SavedRegisters *regs)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
310 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
311 regs->e0 = registers[15];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
312 regs->e1 = registers[16];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
313 regs->e2 = registers[17];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
314 regs->e3 = registers[18];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
315 regs->e4 = registers[19];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
316 regs->e5 = registers[20];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
317 regs->e6 = registers[21];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
318 regs->e7 = registers[22];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
319
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
320 regs->mcrh = registers[26];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
321 regs->mcrl = registers[27];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
322 regs->mcvf = registers[28];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
323
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
324 regs->mdrq = registers[14];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
325
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
326 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
327 register CYG_ADDRWORD ssp, usp, msp;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
328 ssp = registers[23];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
329 msp = registers[24];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
330 usp = registers[25];
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
331 if ((registers[11] & HAL_ARCH_AM33_PSW_ML) == HAL_ARCH_AM33_PSW_ML)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
332 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
333 // We were running in monitor mode.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
334 // Go ahead and manually restore ssp and usp.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
335 // msp will be restored by the rti.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
336 asm volatile (" mov %0, usp " : : "a" (usp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
337 asm volatile (" mov %0, ssp " : : "a" (ssp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
338 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
339 else if ((registers[11] & HAL_ARCH_AM33_PSW_nSL) == 0)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
340 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
341 // We were running in system mode.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
342 // Go ahead and manually restore msp and usp.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
343 // ssp will be restored by the rti.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
344 asm volatile (" mov %0, usp " : : "a" (usp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
345 if (msp_read)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
346 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
347 asm volatile (" mov %0, msp " : : "a" (msp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
348 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
349 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
350 else
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
351 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
352 // We were running in user mode.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
353 // Go ahead and manually restore msp and ssp.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
354 // usp will be restored by the rti.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
355 asm volatile (" mov %0, ssp " : : "a" (ssp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
356 if (msp_read)
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
357 {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
358 asm volatile (" mov %0, msp " : : "a" (msp));
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
359 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
360 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
361 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
362
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
363 #if CYGHWR_HAL_MN10300_AM33_REVISION == 2
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
364 if (fpu_regs_read)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
365 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
366 // The FPU registers have been read and the FPU is enabled.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
367 // Go ahead and write the registers
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
368 asm volatile (" fmov %0, fpcr " : : "d" (registers[29]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
369 asm volatile (" fmov %0, fs0 " : : "m" (registers[32]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
370 asm volatile (" fmov %0, fs1 " : : "m" (registers[33]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
371 asm volatile (" fmov %0, fs2 " : : "m" (registers[34]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
372 asm volatile (" fmov %0, fs3 " : : "m" (registers[35]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
373 asm volatile (" fmov %0, fs4 " : : "m" (registers[36]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
374 asm volatile (" fmov %0, fs5 " : : "m" (registers[37]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
375 asm volatile (" fmov %0, fs6 " : : "m" (registers[38]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
376 asm volatile (" fmov %0, fs7 " : : "m" (registers[39]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
377 asm volatile (" fmov %0, fs8 " : : "m" (registers[40]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
378 asm volatile (" fmov %0, fs9 " : : "m" (registers[41]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
379 asm volatile (" fmov %0, fs10 " : : "m" (registers[42]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
380 asm volatile (" fmov %0, fs11 " : : "m" (registers[43]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
381 asm volatile (" fmov %0, fs12 " : : "m" (registers[44]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
382 asm volatile (" fmov %0, fs13 " : : "m" (registers[45]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
383 asm volatile (" fmov %0, fs14 " : : "m" (registers[46]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
384 asm volatile (" fmov %0, fs15 " : : "m" (registers[47]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
385 asm volatile (" fmov %0, fs16 " : : "m" (registers[48]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
386 asm volatile (" fmov %0, fs17 " : : "m" (registers[49]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
387 asm volatile (" fmov %0, fs18 " : : "m" (registers[50]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
388 asm volatile (" fmov %0, fs19 " : : "m" (registers[51]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
389 asm volatile (" fmov %0, fs20 " : : "m" (registers[52]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
390 asm volatile (" fmov %0, fs21 " : : "m" (registers[53]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
391 asm volatile (" fmov %0, fs22 " : : "m" (registers[54]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
392 asm volatile (" fmov %0, fs23 " : : "m" (registers[55]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
393 asm volatile (" fmov %0, fs24 " : : "m" (registers[56]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
394 asm volatile (" fmov %0, fs25 " : : "m" (registers[57]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
395 asm volatile (" fmov %0, fs26 " : : "m" (registers[58]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
396 asm volatile (" fmov %0, fs27 " : : "m" (registers[59]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
397 asm volatile (" fmov %0, fs28 " : : "m" (registers[60]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
398 asm volatile (" fmov %0, fs29 " : : "m" (registers[61]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
399 asm volatile (" fmov %0, fs30 " : : "m" (registers[62]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
400 asm volatile (" fmov %0, fs31 " : : "m" (registers[63]) );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
401 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
402 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
403 }
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 76
diff changeset
404 #endif // CYGPKG_CYGMON
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
405
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
406 /*------------------------------------------------------------------------*/
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
407 /* End of var_misc.c */