at91dbgureg.h revision 1.1.22.1 1 1.1.22.1 simonb /* $NetBSD: at91dbgureg.h,v 1.1.22.1 2008/07/03 18:37:51 simonb Exp $ */
2 1.1.22.1 simonb
3 1.1.22.1 simonb /*
4 1.1.22.1 simonb * Copyright (c) 2007 Embedtronics Oy
5 1.1.22.1 simonb * All rights reserved.
6 1.1.22.1 simonb *
7 1.1.22.1 simonb * Redistribution and use in source and binary forms, with or without
8 1.1.22.1 simonb * modification, are permitted provided that the following conditions
9 1.1.22.1 simonb * are met:
10 1.1.22.1 simonb * 1. Redistributions of source code must retain the above copyright
11 1.1.22.1 simonb * notice, this list of conditions and the following disclaimer.
12 1.1.22.1 simonb * 2. Redistributions in binary form must reproduce the above copyright
13 1.1.22.1 simonb * notice, this list of conditions and the following disclaimer in the
14 1.1.22.1 simonb * documentation and/or other materials provided with the distribution.
15 1.1.22.1 simonb * 3. All advertising materials mentioning features or use of this software
16 1.1.22.1 simonb * must display the following acknowledgement:
17 1.1.22.1 simonb * This product includes software developed by Ichiro FUKUHARA.
18 1.1.22.1 simonb * 4. The name of the company nor the name of the author may be used to
19 1.1.22.1 simonb * endorse or promote products derived from this software without specific
20 1.1.22.1 simonb * prior written permission.
21 1.1.22.1 simonb *
22 1.1.22.1 simonb * THIS SOFTWARE IS PROVIDED BY ICHIRO FUKUHARA ``AS IS'' AND ANY EXPRESS OR
23 1.1.22.1 simonb * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 1.1.22.1 simonb * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 1.1.22.1 simonb * IN NO EVENT SHALL ICHIRO FUKUHARA OR THE VOICES IN HIS HEAD BE LIABLE FOR
26 1.1.22.1 simonb * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 1.1.22.1 simonb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 1.1.22.1 simonb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 1.1.22.1 simonb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 1.1.22.1 simonb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 1.1.22.1 simonb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 1.1.22.1 simonb * SUCH DAMAGE.
33 1.1.22.1 simonb */
34 1.1.22.1 simonb
35 1.1.22.1 simonb #ifndef _AT91DBGUREG_H_
36 1.1.22.1 simonb #define _AT91DBGUREG_H_
37 1.1.22.1 simonb
38 1.1.22.1 simonb #define AT91DBGU_BASE 0xFFFFF200 /* DBGU unit base addresses (physical) */
39 1.1.22.1 simonb #define AT91DBGU_SIZE 0x200 /* DBGU peripheral address space size */
40 1.1.22.1 simonb
41 1.1.22.1 simonb #define DBGU_CR 0x00UL /* Control Register */
42 1.1.22.1 simonb #define DBGU_MR 0x04UL /* Mode Register */
43 1.1.22.1 simonb #define DBGU_IER 0x08UL /* Interrupt Enable Register */
44 1.1.22.1 simonb #define DBGU_IDR 0x0CUL /* Interrupt Disable Register */
45 1.1.22.1 simonb #define DBGU_IMR 0x10UL /* Interrupt Mask Register */
46 1.1.22.1 simonb #define DBGU_SR 0x14UL /* Status Register */
47 1.1.22.1 simonb #define DBGU_RHR 0x18UL /* Receive Holding Register */
48 1.1.22.1 simonb #define DBGU_THR 0x1CUL /* Transmit Holding Register */
49 1.1.22.1 simonb #define DBGU_BRGR 0x20UL /* Baud Rate Generator Register */
50 1.1.22.1 simonb #define DBGU_CIDR 0x40UL /* Chip ID Register */
51 1.1.22.1 simonb #define DBGU_EXID 0x44UL /* Chip ID Extension Register */
52 1.1.22.1 simonb #define DBGU_FNR 0x48UL /* Force NTRST Register */
53 1.1.22.1 simonb #define DBGU_PDC 0x100UL
54 1.1.22.1 simonb
55 1.1.22.1 simonb /* Control Register bits: */
56 1.1.22.1 simonb #define DBGU_CR_RSTSTA 0x100 /* 1 = reset the status bits */
57 1.1.22.1 simonb #define DBGU_CR_TXDIS 0x080 /* 1 = disable transmitter */
58 1.1.22.1 simonb #define DBGU_CR_TXEN 0x040 /* 1 = enable transmitter */
59 1.1.22.1 simonb #define DBGU_CR_RXDIS 0x020 /* 1 = disable receiver */
60 1.1.22.1 simonb #define DBGU_CR_RXEN 0x010 /* 1 = enable receiver */
61 1.1.22.1 simonb #define DBGU_CR_RSTTX 0x008 /* 1 = reset transmitter */
62 1.1.22.1 simonb #define DBGU_CR_RSTRX 0x004 /* 1 = reset receiver */
63 1.1.22.1 simonb
64 1.1.22.1 simonb /* Mode Register bits: */
65 1.1.22.1 simonb #define DBGU_MR_CHMODE 0xC000 /* channel mode */
66 1.1.22.1 simonb #define DBGU_MR_CHMOD_NORMAL 0x0000
67 1.1.22.1 simonb #define DBGU_MR_CHMOD_ECHO 0x4000
68 1.1.22.1 simonb #define DBGU_MR_CHMOD_LOCAL_LOOP 0x8000
69 1.1.22.1 simonb #define DBGU_MR_CHMOD_REMOTE_LOOP 0xC000
70 1.1.22.1 simonb
71 1.1.22.1 simonb #define DBGU_MR_PAR 0x0E00 /* parity type */
72 1.1.22.1 simonb #define DBGU_MR_PAR_EVEN 0x0000
73 1.1.22.1 simonb #define DBGU_MR_PAR_ODD 0x0200
74 1.1.22.1 simonb #define DBGU_MR_PAR_SPACE 0x0400
75 1.1.22.1 simonb #define DBGU_MR_PAR_MARK 0x0600
76 1.1.22.1 simonb #define DBGU_MR_PAR_NONE 0x0800
77 1.1.22.1 simonb
78 1.1.22.1 simonb /* Interrupt bits: */
79 1.1.22.1 simonb #define DBGU_INT_COMMRX 0x80000000
80 1.1.22.1 simonb #define DBGU_INT_COMMTX 0x40000000
81 1.1.22.1 simonb #define DBGU_INT_RXBUFF 0x00001000
82 1.1.22.1 simonb #define DBGU_INT_TXBUFE 0x00000800
83 1.1.22.1 simonb #define DBGU_INT_TXEMPTY 0x00000200
84 1.1.22.1 simonb #define DBGU_INT_PARE 0x00000080
85 1.1.22.1 simonb #define DBGU_INT_FRAME 0x00000040
86 1.1.22.1 simonb #define DBGU_INT_OVRE 0x00000020
87 1.1.22.1 simonb #define DBGU_INT_ENDTX 0x00000010
88 1.1.22.1 simonb #define DBGU_INT_ENDRX 0x00000008
89 1.1.22.1 simonb #define DBGU_INT_TXRDY 0x00000002
90 1.1.22.1 simonb #define DBGU_INT_RXRDY 0x00000001
91 1.1.22.1 simonb
92 1.1.22.1 simonb /* Status register bits: */
93 1.1.22.1 simonb #define DBGU_SR_COMMRX 0x80000000
94 1.1.22.1 simonb #define DBGU_SR_COMMTX 0x40000000
95 1.1.22.1 simonb #define DBGU_SR_RXBUFF 0x00001000
96 1.1.22.1 simonb #define DBGU_SR_TXBUFE 0x00000800
97 1.1.22.1 simonb #define DBGU_SR_TXEMPTY 0x00000200
98 1.1.22.1 simonb #define DBGU_SR_PARE 0x00000080
99 1.1.22.1 simonb #define DBGU_SR_FRAME 0x00000040
100 1.1.22.1 simonb #define DBGU_SR_OVRE 0x00000020
101 1.1.22.1 simonb #define DBGU_SR_ENDTX 0x00000010
102 1.1.22.1 simonb #define DBGU_SR_ENDRX 0x00000008
103 1.1.22.1 simonb #define DBGU_SR_TXRDY 0x00000002
104 1.1.22.1 simonb #define DBGU_SR_RXRDY 0x00000001
105 1.1.22.1 simonb
106 1.1.22.1 simonb
107 1.1.22.1 simonb /* Chip ID Register bits: */
108 1.1.22.1 simonb #define DBGU_CIDR_EXT 0x80000000 /* 1 = Extended Chip ID exists */
109 1.1.22.1 simonb
110 1.1.22.1 simonb #define DBGU_CIDR_NVPTYP 0x70000000 /* Nonvolatile Pgm Mem Type */
111 1.1.22.1 simonb #define DBGU_CIDR_NVPTYP_ROM 0x00000000
112 1.1.22.1 simonb #define DBGU_CIDR_NVPTYP_ROMLESS 0x10000000
113 1.1.22.1 simonb #define DBGU_CIDR_NVPTYP_SRAM 0x40000000
114 1.1.22.1 simonb #define DBGU_CIDR_NVPTYP_FLASH 0x20000000
115 1.1.22.1 simonb #define DBGU_CIDR_NVTYP_ROM_FLASH 0x30000000 /* NVPSIZ is ROM size, NVPSIZ2 is Flash Size */
116 1.1.22.1 simonb
117 1.1.22.1 simonb #define DBGU_CIDR_ARCH 0x0FF00000 /* Architecture identifier */
118 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM9XX 0x01900000 /* AT91SAM9xx Series */
119 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM9XEXX 0x02900000 /* AT91SAM9XExx Series */
120 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X34 0x03400000 /* AT91x34 Series */
121 1.1.22.1 simonb #define DBGU_CIDR_ARCH_CAP9 0x03900000 /* CAP9 Series */
122 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X40 0x04000000 /* AT91x40 Series */
123 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X42 0x04200000 /* AT91x42 Series */
124 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X55 0x05500000 /* AT91x55 Series */
125 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7AXX 0x06000000 /* AT91SAM7Axx Series */
126 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X63 0x06300000 /* AT91x63 Series */
127 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7SXX 0x07000000 /* AT91SAM7Sxx Series */
128 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7XCXX 0x07100000 /* AT91SAM7XCxx Series */
129 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7SEXX 0x07200000 /* AT91SAM7SExx Series */
130 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7LXX 0x07300000 /* AT91SAM7LExx Series */
131 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91SAM7XXX 0x07500000 /* AT91SAM7Xxx Series */
132 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT91X92 0x09200000 /* AT91x92 Series */
133 1.1.22.1 simonb #define DBGU_CIDR_ARCH_AT75CXX 0x0F000000 /* AT75Cxx Series */
134 1.1.22.1 simonb
135 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ 0x000F0000 /* Internal SRAM Size */
136 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_1K 0x00010000
137 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_2K 0x00020000
138 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_4K 0x00050000
139 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_8K 0x00080000
140 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_16K 0x00090000
141 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_32K 0x000A0000
142 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_64K 0x000B0000
143 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_128K 0x000C0000
144 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_256K 0x000D0000
145 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_96K 0x000E0000
146 1.1.22.1 simonb #define DBGU_CIDR_SRAMSIZ_512K 0x000F0000
147 1.1.22.1 simonb
148 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ 0x00000F00 /* Nonvolatile Pgm Mem Size */
149 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_NONE 0x00000000
150 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_8K 0x00000100
151 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_16K 0x00000200
152 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_32K 0x00000300
153 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_64K 0x00000500
154 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_128K 0x00000700
155 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_256K 0x00000900
156 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_512K 0x00000A00
157 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_1024K 0x00000C00
158 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ_2048K 0x00000E00
159 1.1.22.1 simonb
160 1.1.22.1 simonb #define DBGU_CIDR_NPVSIZ2 0x0000F000 /* Nonvolatile Pgm 2 Mem Size */
161 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_NONE 0x00000000
162 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_8K 0x00001000
163 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_16K 0x00002000
164 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_32K 0x00003000
165 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_64K 0x00005000
166 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_128K 0x00007000
167 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_256K 0x00009000
168 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_512K 0x0000A000
169 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_1024K 0x0000C000
170 1.1.22.1 simonb #define DBGU_CIDR_NVPSIZ2_2048K 0x0000E000
171 1.1.22.1 simonb
172 1.1.22.1 simonb #define DBGU_CIDR_EPROC 0x000000E0 /* Embedded Processor ID */
173 1.1.22.1 simonb #define DBGU_CIDR_EPROC_946ES 0x00000020
174 1.1.22.1 simonb #define DBGU_CIDR_EPROC_7TDMI 0x00000040
175 1.1.22.1 simonb #define DBGU_CIDR_EPROC_920T 0x00000080
176 1.1.22.1 simonb #define DBGU_CIDR_EPROC_926EJS 0x000000E0
177 1.1.22.1 simonb
178 1.1.22.1 simonb #define DBGU_CIDR_VERSION 0x0000001F /* version of the device */
179 1.1.22.1 simonb
180 1.1.22.1 simonb #define DBGU_CIDR_AT91RM9200 0x09290781
181 1.1.22.1 simonb #define DBGU_CIDR_AT91SAM9260 0x019803A0
182 1.1.22.1 simonb #define DBGU_CIDR_AT91SAM9261 0x019703A0
183 1.1.22.1 simonb #define DBGU_CIDR_AT91SAM9263 0x019607A0
184 1.1.22.1 simonb
185 1.1.22.1 simonb #define AT91RM9200_CHIP_ID DBGU_CIDR_AT91RM9200
186 1.1.22.1 simonb #define AT91SAM9260_CHIP_ID DBGU_CIDR_AT91SAM9260
187 1.1.22.1 simonb #define AT91SAM9261_CHIP_ID DBGU_CIDR_AT91SAM9261
188 1.1.22.1 simonb #define AT91SAM9263_CHIP_ID DBGU_CIDR_AT91SAM9263
189 1.1.22.1 simonb
190 1.1.22.1 simonb #define DBGUREG(reg) *((volatile u_int32_t*)(AT91DBGU_BASE + (reg)))
191 1.1.22.1 simonb
192 1.1.22.1 simonb #define DBGU_INIT(mstclk, speed) do { \
193 1.1.22.1 simonb DBGUREG(DBGU_PDC + PDC_PTCR) = PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS; \
194 1.1.22.1 simonb DBGUREG(DBGU_BRGR) = ((mstclk) / 16 + (speed) / 2) / (speed); \
195 1.1.22.1 simonb DBGUREG(DBGU_MR) = DBGU_MR_PAR_NONE; \
196 1.1.22.1 simonb DBGUREG(DBGU_CR) = DBGU_CR_RSTSTA | DBGU_CR_RSTTX | DBGU_CR_RSTRX; \
197 1.1.22.1 simonb DBGUREG(DBGU_CR) = DBGU_CR_TXEN | DBGU_CR_RXEN; \
198 1.1.22.1 simonb (void)DBGUREG(DBGU_SR); \
199 1.1.22.1 simonb } while (/*CONSTCOND*/0)
200 1.1.22.1 simonb
201 1.1.22.1 simonb #define DBGU_PUTC(ch) do { \
202 1.1.22.1 simonb int s = splserial(); \
203 1.1.22.1 simonb while ((DBGUREG(DBGU_SR) & DBGU_SR_TXRDY) == 0) { \
204 1.1.22.1 simonb splx(s); s = splserial(); \
205 1.1.22.1 simonb }; \
206 1.1.22.1 simonb DBGUREG(DBGU_THR) = ch; \
207 1.1.22.1 simonb splx(s); \
208 1.1.22.1 simonb } while (/*CONSTCOND*/0)
209 1.1.22.1 simonb
210 1.1.22.1 simonb #define DBGU_PEEKC() ((DBGUREG(DBGU_SR) & DBGU_SR_RXRDY) ? DBGUREG(DBGU_RHR) : -1)
211 1.1.22.1 simonb
212 1.1.22.1 simonb #define DBGU_PUTS(string) do { \
213 1.1.22.1 simonb const char *_ptr = (string); \
214 1.1.22.1 simonb while (*_ptr) { \
215 1.1.22.1 simonb DBGU_PUTC(*_ptr); \
216 1.1.22.1 simonb _ptr++; \
217 1.1.22.1 simonb } \
218 1.1.22.1 simonb } while (/*CONSTCOND*/0)
219 1.1.22.1 simonb
220 1.1.22.1 simonb #endif // _AT91DBGUREG_H_
221 1.1.22.1 simonb
222