1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
/************************************************************************************
* arch/sh/src/m16c/chip.h
*
* Copyright (C) 2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************************************/
#ifndef __ARCH_SH_SRC_M16C_CHIP_H
#define __ARCH_SH_SRC_M16C_CHIP_H
/************************************************************************************
* Included Files
************************************************************************************/
#include <nuttx/config.h>
#ifndef __ASSEMBLY__
# include <stdint.h>
#endif
/************************************************************************************
* Definitions
************************************************************************************/
/* FLG register bits */
#define M16C_FLG_C 0x0001 /* Bit 0: Carry flag */
#define M16C_FLG_D 0x0002 /* Bit 1: Debug flag */
#define M16C_FLG_Z 0x0004 /* Bit 2: Zero flag */
#define M16C_FLG_S 0x0008 /* Bit 3: Sign flag */
#define M16C_FLG_B 0x0010 /* Bit 4: Register bank flag */
#define M16C_FLG_O 0x0020 /* Bit 5: Overflow flag */
#define M16C_FLG_I 0x0040 /* Bit 6: Interrupt enable flag */
#define M16C_FLG_U 0x0080 /* Bit 7: Stack pointer select flag */
/* Bits 8-11: Reserved */
#define M16C_FLG_IPLMASK 0x7000 /* Bits 12:14: Processor interrupt priority level */
/* Bit 15: Reserved */
/* Memory Map */
/* Memory-mapped special function registers begin at address 0x00000 */
#define M16C_SFR_BASE 0x00000 /* 00000-003ff: Special Function Registers */
/* Internal, on-chip SRAM begins at address 0x00400 for all chips, regardless of the
* size of the on-chip SRAM.
*/
#define M16C_IRAM_BASE 0x00400 /* 00400-00xxx: Internal RAM */
#if defined(CONFIG_ARCH_CHIP_M30262F3) || defined(CONFIG_ARCH_CHIP_M30262F4)
# define M16C_IRAM_END 0x007ff /* End+1 address of internal RAM */
/* 00800-0efff: Reserved */
#elif defined(CONFIG_ARCH_CHIP_M30262F6) || defined(CONFIG_ARCH_CHIP_M30262F8)
# define M16C_IRAM_END 0x00bff /* End+1 address of internal RAM */
/* 00c00-0efff: Reserved */
#endif
/* Two banks of virtual EEPROM (all parts) */
#define M16C_VEEPROM1_BASE 0x0f000 /* 0f000-0f7fff: Virtual EEPPROM block 1 */
#define M16C_VEEPROM2_BASE 0x0f800 /* 0f800-0fffff: Virtual EEPPROM block 2 */
/* If there were external, "far" RAM, it would be begin at 0x10000. However, these
* specific chips do not support external RAM.
*/
/* Each part has a different amount on on-chip FLASH. The ending FLASH address is
* 0xfffff for all chips, but the starting address varies depening on the amount
* of on-chip FLASH.
*/
#if defined(CONFIG_ARCH_CHIP_M30262F3)
/* 10000-f9ffff: Reserved */
# define M16C_FLASH_BASE 0xfa000 /* fa000-ffffff: Flash ROM (M30262F8) */
#elif defined(CONFIG_ARCH_CHIP_M30262F4)
/* 10000-f7ffff: Reserved */
# define M16C_FLASH_BASE 0xf8000 /* f8000-ffffff: Flash ROM (M30262F8) */
#elif defined(CONFIG_ARCH_CHIP_M30262F6)
/* 10000-f3ffff: Reserved */
# define M16C_FLASH_BASE 0xf4000 /* f4000-ffffff: Flash ROM (M30262F8) */
#elif defined(CONFIG_ARCH_CHIP_M30262F8)
/* 10000-efffff: Reserved */
# define M16C_FLASH_BASE 0xf0000 /* f0000-ffffff: Flash ROM (M30262F8) */
#endif
/* Special Function Register Addresses */
#define M16C_PM0 0x00004 /* Processor mode 0 */
#define M16C_PM1 0x00005 /* Processor mode 1 */
#define M16C_CM0 0x00006 /* System clock control 0 */
#define M16C_CM1 0x00007 /* System clock control 1 */
#define M16C_AIER 0x00009 /* Addrese match interrupt enable */
#define M16C_PRCR 0x0000a /* Protect */
#define M16C_CM2 0x0000c /* Oscillation stop detection */
#define M16C_WDTS 0x0000e /* Watchdog timer start */
#define M16C_WDC 0x0000f /* Watchdog timer control */
#define M16C_RMAD0 0x00010 /* Address match interrupt 0 */
#define M16C_RMAD1 0x00014 /* Address match interrupt 1 */
#define M16C_VCR1 0x00019 /* Power supply detection 1 */
#define M16C_VCR2 0x0001a /* Power supply detection 2 */
#define M16C_PM2 0x0001e /* Processor mode 2 */
#define M16C_D4INT 0x0001f /* Power supply 4V detection */
#define M16C_SAR0 0x00020 /* DMA0 source pointer */
#define M16C_DAR0 0x00024 /* DMA0 destination pointer */
#define M16C_TCR0 0x00028 /* DMA0 transfer counter */
#define M16C_DM0CON 0x0002c /* DMA0 control */
#define M16C_SAR1 0x00030 /* DMA1 source pointer */
#define M16C_DAR1 0x00034 /* DMA1 destination pointer */
#define M16C_TCR1 0x00038 /* DMA1 transfer counter */
#define M16C_DM1CON 0x0003c /* DMA1 control */
#define M16C_INT3IC 0x00044 /* INT3 interrupt control */
#define M16C_INT5IC 0x00048 /* INT5 interrupt control */
#define M16C_INT4IC 0x00049 /* INT4 interrupt control */
#define M16C_BCNIC 0x0004a /* Bus collision detection interrupt control */
#define M16C_DM0IC 0x0004b /* DMA0 interrupt control */
#define M16C_DM1IC 0x0004c /* DMA1 interrupt control */
#define M16C_KUPIC 0x0004d /* Key input interrupt control */
#define M16C_ADIC 0x0004e /* A-D conversion interrupt control */
#define M16C_S2TIC 0x0004f /* UART2 transmit interrupt control */
#define M16C_S2RIC 0x00050 /* UART2 receive interrupt control */
#define M16C_S0TIC 0x00051 /* UART0 transmit interrupt control */
#define M16C_S0RIC 0x00052 /* UART0 receive interrupt control */
#define M16C_S1TIC 0x00053 /* UART1 transmit interrupt control */
#define M16C_S1RIC 0x00054 /* UART1 receive interrupt control */
#define M16C_TA0IC 0x00055 /* Timer A0 interrupt control */
#define M16C_TA1IC 0x00056 /* Timer A1 interrupt control */
#define M16C_TA2IC 0x00057 /* Timer A2 interrupt control */
#define M16C_TA3IC 0x00058 /* Timer A3 interrupt control */
#define M16C_TA4IC 0x00059 /* Timer A4 interrupt control */
#define M16C_TB0IC 0x0005a /* Timer B0 interrupt control */
#define M16C_TB1IC 0x0005b /* Timer B1 interrupt control */
#define M16C_TB2IC 0x0005c /* Timer B2 interrupt control */
#define M16C_INT0IC 0x0005d /* INT0 interrupt control */
#define M16C_INT1IC 0x0005e /* INT1 interrupt control */
#define M16C_FMR4 0x001b3 /* Flash Control 4 */
#define M16C_FMR1 0x001b5 /* Flash Control 1 */
#define M16C_FMR0 0x001b7 /* Flash Control 0 */
#define M16C_PCLKR 0x0025e /* Peripheral Clock Select */
#define M16C_TA11 0x00342 /* Timer A1-1 */
#define M16C_TA21 0x00344 /* Timer A2-1 */
#define M16C_TA41 0x00346 /* Timer A4-1 */
#define M16C_INVC0 0x00348 /* Three-phase PWM control 0 */
#define M16C_INVC1 0x00349 /* Three-phase PWM control 1 */
#define M16C_IDB0 0x0034a /* Three-phase output buffer 0 */
#define M16C_IDB1 0x0034b /* Three-phase output buffer 1 */
#define M16C_DTT 0x0034c /* Dead time timer */
#define M16C_ICTB2 0x0034d /* Timer B2 interrupt occurences frequency set counter */
#define M16C_IFSR 0x0035f /* Interrupt request cause select */
#define M16C_U2SMR4 0x00374 /* UART2 special mode register4 */
#define M16C_U2SMR3 0x00375 /* UART2 special mode register3 */
#define M16C_U2SMR2 0x00376 /* UART2 special mode register2 */
#define M16C_U2SMR 0x00377 /* UART2 special mode */
#define M16C_U2MR 0x00378 /* UART2 transmit/receive mode */
#define M16C_U2BRG 0x00379 /* UART2 bit rate generator */
#define M16C_U2TB 0x0037a /* UART2 transmit buffer */
#define M16C_U2C0 0x0037c /* UART2 transmit/receive control 0 */
#define M16C_U2C1 0x0037d /* UART2 transmit/receive control 1 */
#define M16C_U2RB 0x0037e /* UART2 receive buffer */
#define M16C_TABSR 0x00380 /* Count start flag */
#define M16C_CPSRF 0x00381 /* Clock prescaler reset flag */
#define M16C_ONSF 0x00382 /* One-shot start flag */
#define M16C_TRGSR 0x00383 /* Trigger select */
#define M16C_UDF 0x00384 /* Up-down flag */
#define M16C_TA0 0x00386 /* Timer A0 */
#define M16C_TA1 0x00388 /* Timer A1 */
#define M16C_TA2 0x0038a /* Timer A2 */
#define M16C_TA3 0x0038c /* Timer A3 */
#define M16C_TA4 0x0038e /* Timer A4 */
#define M16C_TB0 0x00390 /* Timer B0 */
#define M16C_TB1 0x00392 /* Timer B1 */
#define M16C_TB2 0x00394 /* Timer B2 */
#define M16C_TA0MR 0x00396 /* Timer A0 mode */
#define M16C_TA1MR 0x00397 /* Timer A1 mode */
#define M16C_TA2MR 0x00398 /* Timer A2 mode */
#define M16C_TA3MR 0x00399 /* Timer A3 mode */
#define M16C_TA4MR 0x0039a /* Timer A4 mode */
#define M16C_TB0MR 0x0039b /* Timer B0 mode */
#define M16C_TB1MR 0x0039c /* Timer B1 mode */
#define M16C_TB2MR 0x0039d /* Timer B2 mode */
#define M16C_TB2SC 0x0039e /* Timer B2 special mode */
#define M16C_U0MR 0x003a0 /* UART0 transmit/receive mode */
#define M16C_U0BRG 0x003a1 /* UART0 bit rate generator */
#define M16C_U0TB 0x003a2 /* UART0 transmit buffer */
#define M16C_U0C0 0x003a4 /* UART0 transmit/receive control 0 */
#define M16C_U0C1 0x003a5 /* UART0 transmit/receive control 1 */
#define M16C_U0RB 0x003a6 /* UART0 receive buffer */
#define M16C_U1MR 0x003a8 /* UART1 transmit/receive mode */
#define M16C_U1BRG 0x003a9 /* UART1 bit rate generator */
#define M16C_U1TB 0x003aa /* UART1 transmit buffer */
#define M16C_U1C0 0x003ac /* UART1 transmit/receive control 0 */
#define M16C_U1C1 0x003ad /* UART1 transmit/receive control 1 */
#define M16C_U1RB 0x003ae /* UART1 receive buffer */
#define M16C_UCON 0x003b0 /* UART2 transmit/receive control 2 */
#define M16C_DM0SL 0x003b8 /* DMA0 cause select */
#define M16C_DM1SL 0x003ba /* DMA1 cause select */
#define M16C_AD0 0x003c0 /* A-D 0 */
#define M16C_AD1 0x003c2 /* A-D 1 */
#define M16C_AD2 0x003c4 /* A-D 2 */
#define M16C_AD3 0x003c6 /* A-D 3 */
#define M16C_AD4 0x003c8 /* A-D 4 */
#define M16C_AD5 0x003ca /* A-D 5 */
#define M16C_AD6 0x003cc /* A-D 6 */
#define M16C_AD7 0x003ce /* A-D 7 */
#define M16C_ADCON2 0x003d4 /* A-D control 2 */
#define M16C_ADCON0 0x003d6 /* A-D control 0 */
#define M16C_ADCON1 0x003d7 /* A-D control 1 */
#define M16C_P1 0x003e1 /* Port P1 */
#define M16C_PD1 0x003e3 /* Port P1 direction */
#define M16C_P6 0x003ec /* Port P6 */
#define M16C_P7 0x003ed /* Port P7 */
#define M16C_PD6 0x003ee /* Port P6 direction */
#define M16C_PD7 0x003ef /* Port P7 direction */
#define M16C_P8 0x003f0 /* Port P8 */
#define M16C_P9 0x003f1 /* Port P9 */
#define M16C_PD8 0x003f2 /* Port P8 direction */
#define M16C_PD9 0x003f3 /* Port P9 direction */
#define M16C_P10 0x003f4 /* Port P10 */
#define M16C_PD10 0x003f6 /* Port P10 direction */
#define M16C_PUR0 0x003fc /* Pull-up control 0 */
#define M16C_PUR1 0x003fd /* Pull-up control 1 */
#define M16C_PUR2 0x003fe /* Pull-up control 2 */
#define M16C_PCR 0x003ff /* Port control */
/************************************************************************************
* Global Data
************************************************************************************/
#ifndef __ASSEMBLY__
extern uint16_t g_snbss; /* Start of near .bss */
extern uint16_t g_enbss; /* End+1 of near .bss */
extern uint16_t g_sndata; /* Start of near .data */
extern uint16_t g_endata; /* End+1 of near .data */
extern uint32_t g_enronly; /* Start of relocated read-only data in FLASH */
#ifdef CONFIG_M16C_HAVEFARRAM
extern uint32_t g_sfbss; /* Start of far .bss */
extern uint32_t g_efbss; /* End+1 of far .bss */
extern uint32_t g_sfdata; /* Start of far .data */
extern uint32_t g_efdata; /* End_1 of far .data */
extern uint32_t g_efronly; /* Start of relocated read-only data in FLASH */
#endif
extern uint32_t g_svarvect; /* Start of variable vectors */
extern uint32_t g_idle_topstack; /* Start of the heap */
/* Address of the saved user stack pointer */
#ifndef __ASSEMBLY__
# if CONFIG_ARCH_INTERRUPTSTACK > 3
extern uint16_t g_intstackbase;
# endif
#endif
#endif /* __ASSEMBLY__ */
#endif /* __ARCH_SH_SRC_M16C_CHIP_H */
|