2e9ad76c2ecaaa93d61c6bd688c005c04745b568
[fw/sdcc] / device / include / mcs51 / c8051f000.h
1 /*---------------------------------------------------------------------------
2    Register Declarations for the Cygnal/SiLabs C8051F000-F017 Processor Range
3
4    Copyright (C) 2003 - Maarten Brock, sourceforge.brock@dse.nl
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 ---------------------------------------------------------------------------*/
20
21 #ifndef C8051F000_H
22 #define C8051F000_H
23
24
25 /*  BYTE Registers  */
26 sfr at 0x80 P0       ;  /* PORT 0                                                  */
27 sfr at 0x81 SP       ;  /* STACK POINTER                                           */
28 sfr at 0x82 DPL      ;  /* DATA POINTER - LOW BYTE                                 */
29 sfr at 0x83 DPH      ;  /* DATA POINTER - HIGH BYTE                                */
30 sfr at 0x87 PCON     ;  /* POWER CONTROL                                           */
31 sfr at 0x88 TCON     ;  /* TIMER CONTROL                                           */
32 sfr at 0x89 TMOD     ;  /* TIMER MODE                                              */
33 sfr at 0x8A TL0      ;  /* TIMER 0 - LOW BYTE                                      */
34 sfr at 0x8B TL1      ;  /* TIMER 1 - LOW BYTE                                      */
35 sfr at 0x8C TH0      ;  /* TIMER 0 - HIGH BYTE                                     */
36 sfr at 0x8D TH1      ;  /* TIMER 1 - HIGH BYTE                                     */
37 sfr at 0x8E CKCON    ;  /* CLOCK CONTROL                                           */
38 sfr at 0x8F PSCTL    ;  /* PROGRAM STORE R/W CONTROL                               */
39 sfr at 0x90 P1       ;  /* PORT 1                                                  */
40 sfr at 0x91 TMR3CN   ;  /* TIMER 3 CONTROL                                         */
41 sfr at 0x92 TMR3RLL  ;  /* TIMER 3 RELOAD REGISTER - LOW BYTE                      */
42 sfr at 0x93 TMR3RLH  ;  /* TIMER 3 RELOAD REGISTER - HIGH BYTE                     */
43 sfr at 0x94 TMR3L    ;  /* TIMER 3 - LOW BYTE                                      */
44 sfr at 0x95 TMR3H    ;  /* TIMER 3 - HIGH BYTE                                     */
45 sfr at 0x98 SCON     ;  /* SERIAL PORT CONTROL                                     */
46 sfr at 0x99 SBUF     ;  /* SERIAL PORT BUFFER                                      */
47 sfr at 0x9A SPI0CFG  ;  /* SERIAL PERIPHERAL INTERFACE 0 CONFIGURATION             */
48 sfr at 0x9B SPI0DAT  ;  /* SERIAL PERIPHERAL INTERFACE 0 DATA                      */
49 sfr at 0x9D SPI0CKR  ;  /* SERIAL PERIPHERAL INTERFACE 0 CLOCK RATE CONTROL        */
50 sfr at 0x9E CPT0CN   ;  /* COMPARATOR 0 CONTROL                                    */
51 sfr at 0x9F CPT1CN   ;  /* COMPARATOR 1 CONTROL                                    */
52 sfr at 0xA0 P2       ;  /* PORT 2                                                  */
53 sfr at 0xA4 PRT0CF   ;  /* PORT 0 CONFIGURATION                                    */
54 sfr at 0xA5 PRT1CF   ;  /* PORT 1 CONFIGURATION                                    */
55 sfr at 0xA6 PRT2CF   ;  /* PORT 2 CONFIGURATION                                    */
56 sfr at 0xA7 PRT3CF   ;  /* PORT 3 CONFIGURATION                                    */
57 sfr at 0xA8 IE       ;  /* INTERRUPT ENABLE                                        */
58 sfr at 0xAD PRT1IF   ;  /* PORT 1 EXTERNAL INTERRUPT FLAGS                         */
59 sfr at 0xAF EMI0CN   ;  /* EXTERNAL MEMORY INTERFACE CONTROL                       */
60 sfr at 0xAF _XPAGE ;    /* XDATA/PDATA PAGE                                        */
61 sfr at 0xB0 P3       ;  /* PORT 3                                                  */
62 sfr at 0xB1 OSCXCN   ;  /* EXTERNAL OSCILLATOR CONTROL                             */
63 sfr at 0xB2 OSCICN   ;  /* INTERNAL OSCILLATOR CONTROL                             */
64 sfr at 0xB6 FLSCL    ;  /* FLASH MEMORY TIMING PRESCALER                           */
65 sfr at 0xB7 FLACL    ;  /* FLASH ACESS LIMIT                                       */
66 sfr at 0xB8 IP       ;  /* INTERRUPT PRIORITY                                      */
67 sfr at 0xBA AMX0CF   ;  /* ADC 0 MUX CONFIGURATION                                 */
68 sfr at 0xBB AMX0SL   ;  /* ADC 0 MUX CHANNEL SELECTION                             */
69 sfr at 0xBC ADC0CF   ;  /* ADC 0 CONFIGURATION                                     */
70 sfr at 0xBE ADC0L    ;  /* ADC 0 DATA - LOW BYTE                                   */
71 sfr at 0xBF ADC0H    ;  /* ADC 0 DATA - HIGH BYTE                                  */
72 sfr at 0xC0 SMB0CN   ;  /* SMBUS 0 CONTROL                                         */
73 sfr at 0xC1 SMB0STA  ;  /* SMBUS 0 STATUS                                          */
74 sfr at 0xC2 SMB0DAT  ;  /* SMBUS 0 DATA                                            */
75 sfr at 0xC3 SMB0ADR  ;  /* SMBUS 0 SLAVE ADDRESS                                   */
76 sfr at 0xC4 ADC0GTL  ;  /* ADC 0 GREATER-THAN REGISTER - LOW BYTE                  */
77 sfr at 0xC5 ADC0GTH  ;  /* ADC 0 GREATER-THAN REGISTER - HIGH BYTE                 */
78 sfr at 0xC6 ADC0LTL  ;  /* ADC 0 LESS-THAN REGISTER - LOW BYTE                     */
79 sfr at 0xC7 ADC0LTH  ;  /* ADC 0 LESS-THAN REGISTER - HIGH BYTE                    */
80 sfr at 0xC8 T2CON    ;  /* TIMER 2 CONTROL                                         */
81 sfr at 0xCA RCAP2L   ;  /* TIMER 2 CAPTURE REGISTER - LOW BYTE                     */
82 sfr at 0xCB RCAP2H   ;  /* TIMER 2 CAPTURE REGISTER - HIGH BYTE                    */
83 sfr at 0xCC TL2      ;  /* TIMER 2 - LOW BYTE                                      */
84 sfr at 0xCD TH2      ;  /* TIMER 2 - HIGH BYTE                                     */
85 sfr at 0xCF SMB0CR   ;  /* SMBUS 0 CLOCK RATE                                      */
86 sfr at 0xD0 PSW      ;  /* PROGRAM STATUS WORD                                     */
87 sfr at 0xD1 REF0CN   ;  /* VOLTAGE REFERENCE 0 CONTROL                             */
88 sfr at 0xD2 DAC0L    ;  /* DAC 0 REGISTER - LOW BYTE                               */
89 sfr at 0xD3 DAC0H    ;  /* DAC 0 REGISTER - HIGH BYTE                              */
90 sfr at 0xD4 DAC0CN   ;  /* DAC 0 CONTROL                                           */
91 sfr at 0xD5 DAC1L    ;  /* DAC 1 REGISTER - LOW BYTE                               */
92 sfr at 0xD6 DAC1H    ;  /* DAC 1 REGISTER - HIGH BYTE                              */
93 sfr at 0xD7 DAC1CN   ;  /* DAC 1 CONTROL                                           */
94 sfr at 0xD8 PCA0CN   ;  /* PCA 0 COUNTER CONTROL                                   */
95 sfr at 0xD9 PCA0MD   ;  /* PCA 0 COUNTER MODE                                      */
96 sfr at 0xDA PCA0CPM0 ;  /* CONTROL REGISTER FOR PCA 0 MODULE 0                     */
97 sfr at 0xDB PCA0CPM1 ;  /* CONTROL REGISTER FOR PCA 0 MODULE 1                     */
98 sfr at 0xDC PCA0CPM2 ;  /* CONTROL REGISTER FOR PCA 0 MODULE 2                     */
99 sfr at 0xDD PCA0CPM3 ;  /* CONTROL REGISTER FOR PCA 0 MODULE 3                     */
100 sfr at 0xDE PCA0CPM4 ;  /* CONTROL REGISTER FOR PCA 0 MODULE 4                     */
101 sfr at 0xE0 ACC      ;  /* ACCUMULATOR                                             */
102 sfr at 0xE1 XBR0     ;  /* DIGITAL CROSSBAR CONFIGURATION REGISTER 0               */
103 sfr at 0xE2 XBR1     ;  /* DIGITAL CROSSBAR CONFIGURATION REGISTER 1               */
104 sfr at 0xE3 XBR2     ;  /* DIGITAL CROSSBAR CONFIGURATION REGISTER 2               */
105 sfr at 0xE6 EIE1     ;  /* EXTERNAL INTERRUPT ENABLE 1                             */
106 sfr at 0xE7 EIE2     ;  /* EXTERNAL INTERRUPT ENABLE 2                             */
107 sfr at 0xE8 ADC0CN   ;  /* ADC 0 CONTROL                                           */
108 sfr at 0xE9 PCA0L    ;  /* PCA 0 TIMER - LOW BYTE                                  */
109 sfr at 0xEA PCA0CPL0 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 0 - LOW BYTE  */
110 sfr at 0xEB PCA0CPL1 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 1 - LOW BYTE  */
111 sfr at 0xEC PCA0CPL2 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 2 - LOW BYTE  */
112 sfr at 0xED PCA0CPL3 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 3 - LOW BYTE  */
113 sfr at 0xEE PCA0CPL4 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 4 - LOW BYTE  */
114 sfr at 0xEF RSTSRC   ;  /* RESET SOURCE                                            */
115 sfr at 0xF0 B        ;  /* B REGISTER                                              */
116 sfr at 0xF6 EIP1     ;  /* EXTERNAL INTERRUPT PRIORITY REGISTER 1                  */
117 sfr at 0xF7 EIP2     ;  /* EXTERNAL INTERRUPT PRIORITY REGISTER 2                  */
118 sfr at 0xF8 SPI0CN   ;  /* SERIAL PERIPHERAL INTERFACE 0 CONTROL                   */
119 sfr at 0xF9 PCA0H    ;  /* PCA 0 TIMER - HIGH BYTE                                 */
120 sfr at 0xFA PCA0CPH0 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 0 - HIGH BYTE */
121 sfr at 0xFB PCA0CPH1 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 1 - HIGH BYTE */
122 sfr at 0xFC PCA0CPH2 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 2 - HIGH BYTE */
123 sfr at 0xFD PCA0CPH3 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 3 - HIGH BYTE */
124 sfr at 0xFE PCA0CPH4 ;  /* CAPTURE/COMPARE REGISTER FOR PCA 0 MODULE 4 - HIGH BYTE */
125 sfr at 0xFF WDTCN    ;  /* WATCHDOG TIMER CONTROL                                  */
126
127
128 /*  BIT Registers  */
129
130 /*  P0  0x80 */
131 sbit at 0x87 P0_7    ;
132 sbit at 0x86 P0_6    ;
133 sbit at 0x85 P0_5    ;
134 sbit at 0x84 P0_4    ;
135 sbit at 0x83 P0_3    ;
136 sbit at 0x82 P0_2    ;
137 sbit at 0x81 P0_1    ;
138 sbit at 0x80 P0_0    ;
139
140 /*  TCON  0x88 */
141 sbit at 0x8F TF1     ;  /* TIMER 1 OVERFLOW FLAG                     */
142 sbit at 0x8E TR1     ;  /* TIMER 1 ON/OFF CONTROL                    */
143 sbit at 0x8D TF0     ;  /* TIMER 0 OVERFLOW FLAG                     */
144 sbit at 0x8C TR0     ;  /* TIMER 0 ON/OFF CONTROL                    */
145 sbit at 0x8B IE1     ;  /* EXT. INTERRUPT 1 EDGE FLAG                */
146 sbit at 0x8A IT1     ;  /* EXT. INTERRUPT 1 TYPE                     */
147 sbit at 0x89 IE0     ;  /* EXT. INTERRUPT 0 EDGE FLAG                */
148 sbit at 0x88 IT0     ;  /* EXT. INTERRUPT 0 TYPE                     */
149
150 /*  P1  0x90 */
151 sbit at 0x97 P1_7    ;
152 sbit at 0x96 P1_6    ;
153 sbit at 0x95 P1_5    ;
154 sbit at 0x94 P1_4    ;
155 sbit at 0x93 P1_3    ;
156 sbit at 0x92 P1_2    ;
157 sbit at 0x91 P1_1    ;
158 sbit at 0x90 P1_0    ;
159
160 /*  SCON  0x98 */
161 sbit at 0x9F SM0     ;  /* SERIAL MODE CONTROL BIT 0                 */
162 sbit at 0x9E SM1     ;  /* SERIAL MODE CONTROL BIT 1                 */
163 sbit at 0x9D SM2     ;  /* MULTIPROCESSOR COMMUNICATION ENABLE       */
164 sbit at 0x9C REN     ;  /* RECEIVE ENABLE                            */
165 sbit at 0x9B TB8     ;  /* TRANSMIT BIT 8                            */
166 sbit at 0x9A RB8     ;  /* RECEIVE BIT 8                             */
167 sbit at 0x99 TI      ;  /* TRANSMIT INTERRUPT FLAG                   */
168 sbit at 0x98 RI      ;  /* RECEIVE INTERRUPT FLAG                    */
169
170 /*  P2  0xA0 */
171 sbit at 0xA7 P2_7    ;
172 sbit at 0xA6 P2_6    ;
173 sbit at 0xA5 P2_5    ;
174 sbit at 0xA4 P2_4    ;
175 sbit at 0xA3 P2_3    ;
176 sbit at 0xA2 P2_2    ;
177 sbit at 0xA1 P2_1    ;
178 sbit at 0xA0 P2_0    ;
179
180 /*  IE  0xA8 */
181 sbit at 0xAF EA      ;  /* GLOBAL INTERRUPT ENABLE                   */
182 sbit at 0xAD ET2     ;  /* TIMER 2 INTERRUPT ENABLE                  */
183 sbit at 0xAC ES      ;  /* SERIAL PORT INTERRUPT ENABLE              */
184 sbit at 0xAB ET1     ;  /* TIMER 1 INTERRUPT ENABLE                  */
185 sbit at 0xAA EX1     ;  /* EXTERNAL INTERRUPT 1 ENABLE               */
186 sbit at 0xA9 ET0     ;  /* TIMER 0 INTERRUPT ENABLE                  */
187 sbit at 0xA8 EX0     ;  /* EXTERNAL INTERRUPT 0 ENABLE               */
188
189 /*  P3  0xB0 */
190 sbit at 0xB7 P3_7    ;
191 sbit at 0xB6 P3_6    ;
192 sbit at 0xB5 P3_5    ;
193 sbit at 0xB4 P3_4    ;
194 sbit at 0xB3 P3_3    ;
195 sbit at 0xB2 P3_2    ;
196 sbit at 0xB1 P3_1    ;
197 sbit at 0xB0 P3_0    ;
198
199 /*  IP  0xB8 */
200 sbit at 0xBD PT2     ;  /* TIMER 2 PRIORITY                          */
201 sbit at 0xBC PS      ;  /* SERIAL PORT PRIORITY                      */
202 sbit at 0xBB PT1     ;  /* TIMER 1 PRIORITY                          */
203 sbit at 0xBA PX1     ;  /* EXTERNAL INTERRUPT 1 PRIORITY             */
204 sbit at 0xB9 PT0     ;  /* TIMER 0 PRIORITY                          */
205 sbit at 0xB8 PX0     ;  /* EXTERNAL INTERRUPT 0 PRIORITY             */
206
207 /*  SMB0CN  0xC0 */
208 sbit at 0xC7 BUSY    ;  /* SMBUS 0 BUSY                              */
209 sbit at 0xC6 ENSMB   ;  /* SMBUS 0 ENABLE                            */
210 sbit at 0xC5 STA     ;  /* SMBUS 0 START FLAG                        */
211 sbit at 0xC4 STO     ;  /* SMBUS 0 STOP FLAG                         */
212 sbit at 0xC3 SI      ;  /* SMBUS 0 INTERRUPT PENDING FLAG            */
213 sbit at 0xC2 AA      ;  /* SMBUS 0 ASSERT/ACKNOWLEDGE FLAG           */
214 sbit at 0xC1 SMBFTE  ;  /* SMBUS 0 FREE TIMER ENABLE                 */
215 sbit at 0xC0 SMBTOE  ;  /* SMBUS 0 TIMEOUT ENABLE                    */
216
217 /*  T2CON  0xC8 */
218 sbit at 0xCF TF2     ;  /* TIMER 2 OVERFLOW FLAG                     */
219 sbit at 0xCE EXF2    ;  /* EXTERNAL FLAG                             */
220 sbit at 0xCD RCLK    ;  /* RECEIVE CLOCK FLAG                        */
221 sbit at 0xCC TCLK    ;  /* TRANSMIT CLOCK FLAG                       */
222 sbit at 0xCB EXEN2   ;  /* TIMER 2 EXTERNAL ENABLE FLAG              */
223 sbit at 0xCA TR2     ;  /* TIMER 2 ON/OFF CONTROL                    */
224 sbit at 0xC9 CT2     ;  /* TIMER OR COUNTER SELECT                   */
225 sbit at 0xC8 CPRL2   ;  /* CAPTURE OR RELOAD SELECT                  */
226
227 /*  PSW  0xD0 */
228 sbit at 0xD7 CY      ;  /* CARRY FLAG                                */
229 sbit at 0xD6 AC      ;  /* AUXILIARY CARRY FLAG                      */
230 sbit at 0xD5 F0      ;  /* USER FLAG 0                               */
231 sbit at 0xD4 RS1     ;  /* REGISTER BANK SELECT 1                    */
232 sbit at 0xD3 RS0     ;  /* REGISTER BANK SELECT 0                    */
233 sbit at 0xD2 OV      ;  /* OVERFLOW FLAG                             */
234 sbit at 0xD1 F1      ;  /* USER FLAG 1                               */
235 sbit at 0xD0 P       ;  /* ACCUMULATOR PARITY FLAG                   */
236
237 /*  PCA0CN  0xD8H */
238 sbit at 0xDF CF      ;  /* PCA 0 COUNTER OVERFLOW FLAG               */
239 sbit at 0xDE CR      ;  /* PCA 0 COUNTER RUN CONTROL BIT             */
240 sbit at 0xDC CCF4    ;  /* PCA 0 MODULE 4 INTERRUPT FLAG             */
241 sbit at 0xDB CCF3    ;  /* PCA 0 MODULE 3 INTERRUPT FLAG             */
242 sbit at 0xDA CCF2    ;  /* PCA 0 MODULE 2 INTERRUPT FLAG             */
243 sbit at 0xD9 CCF1    ;  /* PCA 0 MODULE 1 INTERRUPT FLAG             */
244 sbit at 0xD8 CCF0    ;  /* PCA 0 MODULE 0 INTERRUPT FLAG             */
245
246 /*  ADC0CN  0xE8H */
247 sbit at 0xEF AD0EN   ;  /* ADC 0 ENABLE                              */
248 sbit at 0xEE AD0TM   ;  /* ADC 0 TRACK MODE                          */
249 sbit at 0xED AD0INT  ;  /* ADC 0 CONVERISION COMPLETE INTERRUPT FLAG */
250 sbit at 0xEC AD0BUSY ;  /* ADC 0 BUSY FLAG                           */
251 sbit at 0xEB ADSTM1  ;  /* ADC 0 START OF CONVERSION MODE BIT 1      */
252 sbit at 0xEA ADSTM0  ;  /* ADC 0 START OF CONVERSION MODE BIT 0      */
253 sbit at 0xE9 AD0WINT ;  /* ADC 0 WINDOW COMPARE INTERRUPT FLAG       */
254 sbit at 0xE8 ADLJST  ;  /* ADC 0 RIGHT JUSTIFY DATA BIT              */
255
256 /*  SPI0CN  0xF8H */
257 sbit at 0xFF SPIF    ;  /* SPI 0 INTERRUPT FLAG                      */
258 sbit at 0xFE WCOL    ;  /* SPI 0 WRITE COLLISION FLAG                */
259 sbit at 0xFD MODF    ;  /* SPI 0 MODE FAULT FLAG                     */
260 sbit at 0xFC RXOVRN  ;  /* SPI 0 RX OVERRUN FLAG                     */
261 sbit at 0xFB TXBSY   ;  /* SPI 0 TX BUSY FLAG                        */
262 sbit at 0xFA SLVSEL  ;  /* SPI 0 SLAVE SELECT                        */
263 sbit at 0xF9 MSTEN   ;  /* SPI 0 MASTER ENABLE                       */
264 sbit at 0xF8 SPIEN   ;  /* SPI 0 SPI ENABLE                          */
265
266
267 /* Predefined SFR Bit Masks */
268
269 #define IDLE    0x01    /* PCON */
270 #define STOP    0x02    /* PCON */
271 #define TF3     0x80    /* TMR3CN */
272 #define CPFIF   0x10    /* CPTnCN */
273 #define CPRIF   0x20    /* CPTnCN */
274 #define CPOUT   0x40    /* CPTnCN */
275 #define ECCF    0x01    /* PCA0CPMn */
276 #define PWM     0x02    /* PCA0CPMn */
277 #define TOG     0x04    /* PCA0CPMn */
278 #define MAT     0x08    /* PCA0CPMn */
279 #define CAPN    0x10    /* PCA0CPMn */
280 #define CAPP    0x20    /* PCA0CPMn */
281 #define ECOM    0x40    /* PCA0CPMn */
282
283 #endif