summaryrefslogtreecommitdiff
path: root/nuttx/arch/z80/src/z8/chip.h
blob: b96d6c144e48cad6799c10a3b507e111d4a28d2b (plain) (blame)
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
/************************************************************************************
 * arch/z80/src/z8/chip.h
 * arch/z80/src/chip/chip.h
 *
 *   Copyright (C) 2008-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 __Z8_CHIP_H
#define __Z8_CHIP_H

/************************************************************************************
 * Included Files
 ************************************************************************************/

#ifndef __ASSEMBLY__
#  include <stdint.h>
#endif

/************************************************************************************
 * Pre-processor Definitions
 ************************************************************************************/

/* Hexadecimal Representation *******************************************************/

#ifdef __ASSEMBLY__
# define _HX(h)   %##h
#else
# define _HX(h)   0x##h
#endif

/* Memory Map
 *
 * 64Kb Program Memory (64K series)
 *  C:0000 - C:0001 : Flash options
 *  C:0002 - C:0037 : Vectors
 *                  : ROM data
 *                  : Code
 *
 * 4Kb Register File (64K series)
 *  R:020 - R:0ff   : 224 byte RDATA
 *  R:0e0 - R:0ef   :  16-byte working register area (RDATA)
 *  E:100 - E:eff   : 3.5 Kbyte EDATA
 *    f00 -   fff   : 256 byte control register area
 */

/* Special Function Registers *******************************************************
 *
 * Because of the many different ez80 configurations, we will rely on the
 * ZDS-II header file, ez8.h, to provide the correct addresses for each register.
 */

/* Timer Register Bit Definitions ***************************************************/

/* Timer control register */

#define Z8_TIMERCTL_TEN      _HX(80) /* Bit 7: Timer enabled */
#define Z8_TIMERCTL_TPOL     _HX(40) /* Bit 6: Timer input/output polarity */
#define Z8_TIMERCTL_DIV1     _HX(00) /* Bits 3-5: Pre-scale divisor */
#define Z8_TIMERCTL_DIV2     _HX(08)
#define Z8_TIMERCTL_DIV4     _HX(10)
#define Z8_TIMERCTL_DIV8     _HX(18)
#define Z8_TIMERCTL_DIV16    _HX(20)
#define Z8_TIMERCTL_DIV32    _HX(28)
#define Z8_TIMERCTL_DIV64    _HX(30)
#define Z8_TIMERCTL_DIV128   _HX(38)
#define Z8_TIMERCTL_ONESHOT  _HX(00) /* Bits 0-2: Timer mode */
#define Z8_TIMERCTL_CONT     _HX(01)
#define Z8_TIMERCTL_COUNTER  _HX(02)
#define Z8_TIMERCTL_PWM      _HX(03)
#define Z8_TIMERCTL_CAPTURE  _HX(04)
#define Z8_TIMERCTL_COMPARE  _HX(05)
#define Z8_TIMERCTL_GATED    _HX(06)
#define Z8_TIMERCTL_CAPCMP   _HX(07)

/* UART Register Offsets *************************************************************/

#define Z8_UART_TXD          _HX(00)        /*  8-bits: UART Transmit Data */
#define Z8_UART_RXD          _HX(00)        /*  8-bits: UART Receive Data */
#define Z8_UART_STAT0        _HX(01)        /*  8-bits: UART Status 0 */
#define Z8_UART_CTL          _HX(02)        /* 16-bits: UART Control */
#define Z8_UART_CTL0         _HX(02)        /*  8-bits: UART Control 0 */
#define Z8_UART_CTL1         _HX(03)        /*  8-bits: UART COntrol 1 */
#if defined(_Z8FMC16) || defined(_Z8F1680)
#  define Z8_UART_MDSTAT     _HX(04)        /*  8-bits: UART Mode Select & Status */
#else
#  define Z8_UART_STAT1      _HX(04)        /*  8-bits: UART Status 1 */
#endif
#define Z8_UART_ADDR         _HX(05)        /*  8-bits: UART Address Compare */
#define Z8_UART_BR           _HX(06)        /* 16-bits: UART Baud Rate */
#define Z8_UART_BRH          _HX(06)        /*  8-bits: UART Baud Rate High Byte */
#define Z8_UART_BRL          _HX(07)        /*  8-bits: UART Baud Rate Low Byte */

/* UART0/1 Base Register Addresses **************************************************/

#ifdef EZ8_UART0
#  define Z8_UART0_BASE       ((uint8_t volatile far*)0xf40)
#endif

#ifdef EZ8_UART1
#  define Z8_UART1_BASE       ((uint8_t volatile far*)0xf48)
#endif

/* UART0/1 Status 0 Register Bit Definitions ****************************************/

#define Z8_UARTSTAT0_RDA     _HX(80)        /* Bit 7: Receive Data Available */
#define Z8_UARTSTAT0_PE      _HX(40)        /* Bit 6: Parity Error */
#define Z8_UARTSTAT0_OE      _HX(20)        /* Bit 5: Overrun Error */
#define Z8_UARTSTAT0_FE      _HX(10)        /* Bit 4: Framing Error */
#define Z8_UARTSTAT0_BRKD    _HX(08)        /* Bit 3: Break Detect */
#define Z8_UARTSTAT0_TDRE    _HX(04)        /* Bit 2: Transmitter Data Register Empty */
#define Z8_UARTSTAT0_TXE     _HX(02)        /* Bit 1: Transmitter Empty */
#define Z8_UARTSTAT0_CTS     _HX(01)        /* Bit 0: Clear To Send */

/* UART0/1 Control 0/1 Register Bit Definitions *************************************/

#define Z8_UARTCTL0_TEN      _HX(80)        /* Bit 7: Transmit Enable */
#define Z8_UARTCTL0_REN      _HX(40)        /* Bit 6: Receive Enable */
#define Z8_UARTCTL0_CTSE     _HX(20)        /* Bit 5: CTS Enable */
#define Z8_UARTCTL0_PEN      _HX(10)        /* Bit 4: Parity Enable */
#define Z8_UARTCTL0_PSEL     _HX(08)        /* Bit 3: Odd Parity Select */
#define Z8_UARTCTL0_SBRK     _HX(04)        /* Bit 2: Send Break */
#define Z8_UARTCTL0_STOP     _HX(02)        /* Bit 1: Stop Bit Select */
#define Z8_UARTCTL0_LBEN     _HX(01)        /* Bit 0: Loopback Enable */

#define Z8_UARTCTL1_MPMD1    _HX(80)        /* Bit 7: Multiprocessor Mode (bit1) */
#define Z8_UARTCTL1_MPEN     _HX(40)        /* Bit 6: Multiprocessor Enable */
#define Z8_UARTCTL1_MPMD0    _HX(20)        /* Bit 5: Multiprocessor Mode (bit0) */
#define Z8_UARTCTL1_MPBT     _HX(10)        /* Bit 4: Multiprocessor Bit Transmit */
#define Z8_UARTCTL1_DEPOL    _HX(08)        /* Bit 3: Driver Enable Polarity */
#define Z8_UARTCTL1_BRGCTL   _HX(04)        /* Bit 2: Baud Rate Generator Control */
#define Z8_UARTCTL1_RDAIRQ   _HX(02)        /* Bit 1: Receive Data Interrupt Enable */
#define Z8_UARTCTL1_IREN     _HX(01)        /* Bit 0: Infrared Encoder/Decoder Eanble */

/* UART0/1 Mode Status/Select Register Bit Definitions ******************************/

#define Z8_UARTMDSEL_NORMAL  _HX(00)        /* Bits 5-7=0: Multiprocessor and Normal Mode */
#define Z8_UARTMDSEL_FILTER   HX(20)        /* Bits 5-7=1: Noise Filter Control/Status */
#define Z8_UARTMDSEL_LINP     HX(40)        /* Bits 5-7=2: LIN protocol Contol/Status */
#define Z8_UARTMDSEL_HWREV    HX(e0)        /* Bits 5-7=7: LIN-UART Hardware Revision */
                                            /* Bits 0-4:   Mode dependent status */

/* I2C Status Register Bit Definitions **********************************************/

#if defined(_Z8FMC16) || defined(_Z8F1680)
#  define I2C_ISTAT_NCKI   (1 << 0) /* Bit 0: 1=NAK Interrupt */
#  define I2C_ISTAT_SPRS   (1 << 1) /* Bit 1: 1=STOP/RESTART condition Interrupt */
#  define I2C_ISTAT_ARBLST (1 << 2) /* Bit 2: 1=Arbitration lost */
#  define I2C_ISTAT_RD     (1 << 3) /* Bit 3: 1=Read */
#  define I2C_ISTAT_GCA    (1 << 4) /* Bit 4: 1=General Call Address */
#  define I2C_ISTAT_SAM    (1 << 5) /* Bit 5: 1=Slave address match */
#  define I2C_ISTAT_RDRF   (1 << 6) /* Bit 6: 1=Receive Data Register Full */
#  define I2C_ISTAT_TDRE   (1 << 7) /* Bit 7: 1=Transmit Data Register Empty */
#else
#  define I2C_STAT_NCKI    (1 << 0) /* Bit 0: 1=NAK Interrupt */
#  define I2C_STAT_DSS     (1 << 1) /* Bit 1: 1=Data Shift State */
#  define I2C_STAT_TAS     (1 << 2) /* Bit 2: 1=Transmit Address State */
#  define I2C_STAT_RD      (1 << 3) /* Bit 3: 1=Read */
#  define I2C_STAT_10B     (1 << 4) /* Bit 4: 1=10-Bit Address */
#  define I2C_STAT_ACK     (1 << 5) /* Bit 5: 1=Acknowledge */
#  define I2C_STAT_RDRF    (1 << 6) /* Bit 6: 1=Receive Data Register Full */
#  define I2C_STAT_TDRE    (1 << 7) /* Bit 7: 1=Transmit Data Register Empty */
#endif

/* I2C Control Register Bit Definitions *********************************************/

#define I2C_CTL_FILTEN     (1 << 0) /* Bit 0: 1=I2C Signal Filter Enable */
#define I2C_CTL_FLUSH      (1 << 1) /* Bit 1: 1=Flush Data */
#define I2C_CTL_NAK        (1 << 2) /* Bit 2: 1=Send NAK */
#define I2C_CTL_TXI        (1 << 3) /* Bit 3: 1=Enable TDRE interrupts */
#define I2C_CTL_BIRQ       (1 << 4) /* Bit 4: 1=Baud Rate Generator Interrupt Request */
#define I2C_CTL_STOP       (1 << 5) /* Bit 5: 1=Send Stop Condition */
#define I2C_CTL_START      (1 << 6) /* Bit 6: 1=Send Start Condition */
#define I2C_CTL_IEN        (1 << 7) /* Bit 7: 1=I2C Enable */

/* Register access macros ***********************************************************
 *
 * The register access mechanism provided in ez8.h differs from the useful in other
 * NuttX architectures.  The following NuttX common macros will at least make the
 * access compatible at the source level (however, strict type check is lost).
 */

#ifndef __ASSEMBLY__
# define getreg8(a)           (a)
# define putreg8(v,a)         (a) = (v)
# define getreg16(a)          (a)
# define putreg16(v,a)        (a) = (v)
# define getreg32(a)          (a)
# define putreg32(v,a)        (a) = (v)
#endif /* __ASSEMBLY__ */

/************************************************************************************
 * Public Function Prototypes
 ************************************************************************************/

#ifndef __ASSEMBLY__
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif

#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif

#endif  /* __Z8_CHIP_H */