1 /*-------------------------------------------------------------------------
2 p89lpc938.h - This header defines register addresses for the Philips
3 P89LPC938 microcontroller for use with the SDCC compiler.
5 Copyright (C) 2007, Kyle Guinn <elyk03@gmail.com>
7 This library is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this library; see the file COPYING. If not, write to the
19 Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
22 As a special exception, if you link this library with other files,
23 some of which are compiled with SDCC, to produce an executable,
24 this library does not by itself cause the resulting executable to
25 be covered by the GNU General Public License. This exception does
26 not however invalidate any other reasons why the executable file
27 might be covered by the GNU General Public License.
28 -------------------------------------------------------------------------*/
33 /* SFR byte addresses */
34 __sfr
__at (0x80) P0
; /* Port 0 */
35 __sfr
__at (0x81) SP
; /* Stack pointer */
36 __sfr
__at (0x82) DPL
; /* Data pointer low */
37 __sfr
__at (0x83) DPH
; /* Data pointer high */
38 __sfr
__at (0x84) P0M1
; /* Port 0 output mode 1 */
39 __sfr
__at (0x85) P0M2
; /* Port 0 output mode 2 */
40 __sfr
__at (0x86) KBMASK
; /* Keypad interrupt mask register */
41 __sfr
__at (0x87) PCON
; /* Power control register */
42 __sfr
__at (0x88) TCON
; /* Timer 0 and 1 control */
43 __sfr
__at (0x89) TMOD
; /* Timer 0 and 1 mode */
44 __sfr
__at (0x8A) TL0
; /* Timer 0 low */
45 __sfr
__at (0x8B) TL1
; /* Timer 1 low */
46 __sfr
__at (0x8C) TH0
; /* Timer 0 high */
47 __sfr
__at (0x8D) TH1
; /* Timer 1 high */
48 __sfr
__at (0x8F) TAMOD
; /* Timer 0 and 1 auxiliary mode */
49 __sfr
__at (0x90) P1
; /* Port 1 */
50 __sfr
__at (0x91) P1M1
; /* Port 1 output mode 1 */
51 __sfr
__at (0x92) P1M2
; /* Port 1 output mode 2 */
52 __sfr
__at (0x93) KBPATN
; /* Keypad pattern register */
53 __sfr
__at (0x94) KBCON
; /* Keypad control register */
54 __sfr
__at (0x95) DIVM
; /* CPU clock divide-by-M control */
55 __sfr
__at (0x96) TRIM
; /* Internal oscillator trim register */
56 __sfr
__at (0x97) AD0CON
; /* ADC0 control register */
57 __sfr
__at (0x98) SCON
; /* Serial port control */
58 __sfr
__at (0x99) SBUF
; /* Serial port data buffer register */
59 __sfr
__at (0xA0) P2
; /* Port 2 */
60 __sfr
__at (0xA1) AD0MODB
; /* ADC0 mode register B */
61 __sfr
__at (0xA2) AUXR1
; /* Auxiliary function register */
62 __sfr
__at (0xA3) AD0INS
; /* ADC0 input select */
63 __sfr
__at (0xA4) P2M1
; /* Port 2 output mode 1 */
64 __sfr
__at (0xA5) P2M2
; /* Port 2 output mode 2 */
65 __sfr
__at (0xA7) WDCON
; /* Watchdog control register */
66 __sfr
__at (0xA8) IEN0
; /* Interrupt enable 0 */
67 __sfr
__at (0xA9) SADDR
; /* Serial port address register */
68 __sfr
__at (0xAA) ICRAL
; /* Input capture A register low */
69 __sfr
__at (0xAB) ICRAH
; /* Input capture A register high */
70 __sfr
__at (0xAC) CMP1
; /* Comparator 1 control register */
71 __sfr
__at (0xAD) CMP2
; /* Comparator 2 control register */
72 __sfr
__at (0xAE) ICRBL
; /* Input capture B register low */
73 __sfr
__at (0xAF) ICRBH
; /* Input capture B register high */
74 __sfr
__at (0xB0) P3
; /* Port 3 */
75 __sfr
__at (0xB1) P3M1
; /* Port 3 output mode 1 */
76 __sfr
__at (0xB2) P3M2
; /* Port 3 output mode 2 */
77 __sfr
__at (0xB5) PCONA
; /* Power control register A */
78 __sfr
__at (0xB7) IP0H
; /* Interrupt priority 0 high */
79 __sfr
__at (0xB8) IP0
; /* Interrupt priority 0 */
80 __sfr
__at (0xB9) SADEN
; /* Serial port address enable */
81 __sfr
__at (0xBA) SSTAT
; /* Serial port extended status register */
82 __sfr
__at (0xBD) BRGCON
; /* Baud rate generator control */
83 __sfr
__at (0xBE) BRGR0
; /* Baud rate generator rate low */
84 __sfr
__at (0xBF) BRGR1
; /* Baud rate generator rate high */
85 __sfr
__at (0xC0) AD0MODA
; /* ADC0 mode register A */
86 __sfr
__at (0xC1) WDL
; /* Watchdog load */
87 __sfr
__at (0xC2) WFEED1
; /* Watchdog feed 1 */
88 __sfr
__at (0xC3) WFEED2
; /* Watchdog feed 2 */
89 __sfr
__at (0xC8) TCR20
; /* CCU control register 0 */
90 __sfr
__at (0xC9) TICR2
; /* CCU interrupt control register */
91 __sfr
__at (0xCA) TPCR2L
; /* Prescaler control register low */
92 __sfr
__at (0xCB) TPCR2H
; /* Prescaler control register high */
93 __sfr
__at (0xCC) TL2
; /* CCU timer low */
94 __sfr
__at (0xCD) TH2
; /* CCU timer high */
95 __sfr
__at (0xCE) TOR2L
; /* CCU reload register low */
96 __sfr
__at (0xCF) TOR2H
; /* CCU reload register high */
97 __sfr
__at (0xD0) PSW
; /* Program status word */
98 __sfr
__at (0xD1) RTCCON
; /* RTC control */
99 __sfr
__at (0xD2) RTCH
; /* RTC register high */
100 __sfr
__at (0xD3) RTCL
; /* RTC register low */
101 __sfr
__at (0xD5) IEN2
; /* Interrupt enable 2 */
102 __sfr
__at (0xD6) IP2
; /* Interrupt priority 2 */
103 __sfr
__at (0xD7) IP2H
; /* Interrupt priority 2 high */
104 __sfr
__at (0xD8) I2CON
; /* I²C control register */
105 __sfr
__at (0xD9) I2STAT
; /* I²C status register */
106 __sfr
__at (0xDA) I2DAT
; /* I²C data register */
107 __sfr
__at (0xDB) I2ADR
; /* I²C slave address register */
108 __sfr
__at (0xDC) I2SCLL
; /* Serial clock generator low/
109 * SCL duty cycle register low */
110 __sfr
__at (0xDD) I2SCLH
; /* Serial clock generator high/
111 * SCL duty cycle register high */
112 __sfr
__at (0xDE) TISE2
; /* CCU interrupt status encode register */
113 __sfr
__at (0xDF) RSTSRC
; /* Reset source register */
114 __sfr
__at (0xE0) ACC
; /* Accumulator */
115 __sfr
__at (0xE1) SPSTAT
; /* SPI status register */
116 __sfr
__at (0xE2) SPCTL
; /* SPI control register */
117 __sfr
__at (0xE3) SPDAT
; /* SPI data register */
118 __sfr
__at (0xE4) FMCON
; /* Program Flash control (Read)/
119 * Program Flash control (Write) */
120 __sfr
__at (0xE5) FMDATA
; /* Program Flash data */
121 __sfr
__at (0xE6) FMADRL
; /* Program Flash address low */
122 __sfr
__at (0xE7) FMADRH
; /* Program Flash address high */
123 __sfr
__at (0xE8) IEN1
; /* Interrupt enable 1 */
124 __sfr
__at (0xE9) TIFR2
; /* CCU interrupt flag register */
125 __sfr
__at (0xEA) CCCRA
; /* Capture compare A control register */
126 __sfr
__at (0xEB) CCCRB
; /* Capture compare B control register */
127 __sfr
__at (0xEC) CCCRC
; /* Capture compare C control register */
128 __sfr
__at (0xED) CCCRD
; /* Capture compare D control register */
129 __sfr
__at (0xEE) OCRAL
; /* Output compare A register low */
130 __sfr
__at (0xEF) OCRAH
; /* Output compare A register high */
131 __sfr
__at (0xF0) B
; /* B register */
132 __sfr
__at (0xF1) DEECON
; /* Data EEPROM control register */
133 __sfr
__at (0xF2) DEEDAT
; /* Data EEPROM data register */
134 __sfr
__at (0xF3) DEEADR
; /* Data EEPROM address register */
135 __sfr
__at (0xF6) PT0AD
; /* Port 0 digital input disable */
136 __sfr
__at (0xF7) IP1H
; /* Interrupt priority 1 high */
137 __sfr
__at (0xF8) IP1
; /* Interrupt priority 1 */
138 __sfr
__at (0xF9) TCR21
; /* CCU control register 1 */
139 __sfr
__at (0xFA) OCRBL
; /* Output compare B register low */
140 __sfr
__at (0xFB) OCRBH
; /* Output compare B register high */
141 __sfr
__at (0xFC) OCRCL
; /* Output compare C register low */
142 __sfr
__at (0xFD) OCRCH
; /* Output compare C register high */
143 __sfr
__at (0xFE) OCRDL
; /* Output compare D register low */
144 __sfr
__at (0xFF) OCRDH
; /* Output compare D register high */
146 /* 16-bit SFRs (duplicates of above) */
147 __sfr16
__at (0x8382) DPTR
; /* Data pointer */
148 __sfr16
__at (0x8C8A) TMR0
; /* Timer 0 count */
149 __sfr16
__at (0x8D8B) TMR1
; /* Timer 1 count */
150 __sfr16
__at (0xABAA) ICRA
; /* Input capture A register */
151 __sfr16
__at (0xAFAE) ICRB
; /* Input capture B register */
152 __sfr16
__at (0xBFBE) BRGR
; /* Baud rate generator */
153 __sfr16
__at (0xCBCA) TPCR2
; /* Prescaler control register */
154 __sfr16
__at (0xCDCC) TMR2
; /* Timer 2 count */
155 __sfr16
__at (0xCFCE) TOR2
; /* CCU reload register */
156 __sfr16
__at (0xD2D3) RTC
; /* RTC register */
157 __sfr16
__at (0xDDDC) I2SCL
; /* Serial clock generator/
158 * SCL duty cycle register */
159 __sfr16
__at (0xE7E6) FMADR
; /* Program Flash address */
160 __sfr16
__at (0xEFEE) OCRA
; /* Output compare A register */
161 __sfr16
__at (0xFBFA) OCRB
; /* Output compare B register */
162 __sfr16
__at (0xFDFC) OCRC
; /* Output compare C register */
163 __sfr16
__at (0xFFFE) OCRD
; /* Output compare D register */
165 /* "Extended SFRs" (logically in __xdata memory space) */
166 #define BNDSTA0 (*(__xdata volatile unsigned char*)0xFFED) /* ADC0 boundary status register */
167 #define ADC0LBND (*(__xdata volatile unsigned char*)0xFFEE) /* ADC0 low_boundary register (MSB) */
168 #define ADC0HBND (*(__xdata volatile unsigned char*)0xFFEF) /* ADC0 high_boundary register, left (MSB) */
169 #define AD0DAT7R (*(__xdata volatile unsigned char*)0xFFF0) /* ADC0 data register 7, right (LSB) */
170 #define AD0DAT7L (*(__xdata volatile unsigned char*)0xFFF1) /* ADC0 data register 7, left (MSB) */
171 #define AD0DAT6R (*(__xdata volatile unsigned char*)0xFFF2) /* ADC0 data register 6, right (LSB) */
172 #define AD0DAT6L (*(__xdata volatile unsigned char*)0xFFF3) /* ADC0 data register 6, left (MSB) */
173 #define AD0DAT5R (*(__xdata volatile unsigned char*)0xFFF4) /* ADC0 data register 5, right (LSB) */
174 #define AD0DAT5L (*(__xdata volatile unsigned char*)0xFFF5) /* ADC0 data register 5, left (MSB) */
175 #define AD0DAT4R (*(__xdata volatile unsigned char*)0xFFF6) /* ADC0 data register 4, right (LSB) */
176 #define AD0DAT4L (*(__xdata volatile unsigned char*)0xFFF7) /* ADC0 data register 4, left (MSB) */
177 #define AD0DAT3R (*(__xdata volatile unsigned char*)0xFFF8) /* ADC0 data register 3, right (LSB) */
178 #define AD0DAT3L (*(__xdata volatile unsigned char*)0xFFF9) /* ADC0 data register 3, left (MSB) */
179 #define AD0DAT2R (*(__xdata volatile unsigned char*)0xFFFA) /* ADC0 data register 2, right (LSB) */
180 #define AD0DAT2L (*(__xdata volatile unsigned char*)0xFFFB) /* ADC0 data register 2, left (MSB) */
181 #define AD0DAT1R (*(__xdata volatile unsigned char*)0xFFFC) /* ADC0 data register 1, right (LSB) */
182 #define AD0DAT1L (*(__xdata volatile unsigned char*)0xFFFD) /* ADC0 data register 1, left (MSB) */
183 #define AD0DAT0R (*(__xdata volatile unsigned char*)0xFFFE) /* ADC0 data register 0, right (LSB) */
184 #define AD0DAT0L (*(__xdata volatile unsigned char*)0xFFFF) /* ADC0 data register 0, left (MSB) */
186 /* Special Function Bits */
188 __sbit
__at (0x80) P0_0
;
189 __sbit
__at (0x81) P0_1
;
190 __sbit
__at (0x82) P0_2
;
191 __sbit
__at (0x83) P0_3
;
192 __sbit
__at (0x84) P0_4
;
193 __sbit
__at (0x85) P0_5
;
194 __sbit
__at (0x86) P0_6
;
195 __sbit
__at (0x87) P0_7
;
196 #define CMP_2 P0_0 /* Renamed: Name conflicts with SFR 0xAD */
208 #define CMP_1 P0_6 /* Renamed: Name conflicts with SFR 0xAC */
214 __sbit
__at (0x88) TCON_0
;
215 __sbit
__at (0x89) TCON_1
;
216 __sbit
__at (0x8A) TCON_2
;
217 __sbit
__at (0x8B) TCON_3
;
218 __sbit
__at (0x8C) TCON_4
;
219 __sbit
__at (0x8D) TCON_5
;
220 __sbit
__at (0x8E) TCON_6
;
221 __sbit
__at (0x8F) TCON_7
;
232 __sbit
__at (0x90) P1_0
;
233 __sbit
__at (0x91) P1_1
;
234 __sbit
__at (0x92) P1_2
;
235 __sbit
__at (0x93) P1_3
;
236 __sbit
__at (0x94) P1_4
;
237 __sbit
__at (0x95) P1_5
;
238 __sbit
__at (0x96) P1_6
;
239 __sbit
__at (0x97) P1_7
;
252 __sbit
__at (0x98) SCON_0
;
253 __sbit
__at (0x99) SCON_1
;
254 __sbit
__at (0x9A) SCON_2
;
255 __sbit
__at (0x9B) SCON_3
;
256 __sbit
__at (0x9C) SCON_4
;
257 __sbit
__at (0x9D) SCON_5
;
258 __sbit
__at (0x9E) SCON_6
;
259 __sbit
__at (0x9F) SCON_7
;
271 __sbit
__at (0xA0) P2_0
;
272 __sbit
__at (0xA1) P2_1
;
273 __sbit
__at (0xA2) P2_2
;
274 __sbit
__at (0xA3) P2_3
;
275 __sbit
__at (0xA4) P2_4
;
276 __sbit
__at (0xA5) P2_5
;
277 __sbit
__at (0xA6) P2_6
;
278 __sbit
__at (0xA7) P2_7
;
289 __sbit
__at (0xA8) IEN0_0
;
290 __sbit
__at (0xA9) IEN0_1
;
291 __sbit
__at (0xAA) IEN0_2
;
292 __sbit
__at (0xAB) IEN0_3
;
293 __sbit
__at (0xAC) IEN0_4
;
294 __sbit
__at (0xAD) IEN0_5
;
295 __sbit
__at (0xAE) IEN0_6
;
296 __sbit
__at (0xAF) IEN0_7
;
308 __sbit
__at (0xB0) P3_0
;
309 __sbit
__at (0xB1) P3_1
;
310 __sbit
__at (0xB2) P3_2
;
311 __sbit
__at (0xB3) P3_3
;
312 __sbit
__at (0xB4) P3_4
;
313 __sbit
__at (0xB5) P3_5
;
314 __sbit
__at (0xB6) P3_6
;
315 __sbit
__at (0xB7) P3_7
;
320 __sbit
__at (0xB8) IP0_0
;
321 __sbit
__at (0xB9) IP0_1
;
322 __sbit
__at (0xBA) IP0_2
;
323 __sbit
__at (0xBB) IP0_3
;
324 __sbit
__at (0xBC) IP0_4
;
325 __sbit
__at (0xBD) IP0_5
;
326 __sbit
__at (0xBE) IP0_6
;
327 __sbit
__at (0xBF) IP0_7
;
338 __sbit
__at (0xC0) AD0MODA_0
;
339 __sbit
__at (0xC1) AD0MODA_1
;
340 __sbit
__at (0xC2) AD0MODA_2
;
341 __sbit
__at (0xC3) AD0MODA_3
;
342 __sbit
__at (0xC4) AD0MODA_4
;
343 __sbit
__at (0xC5) AD0MODA_5
;
344 __sbit
__at (0xC6) AD0MODA_6
;
345 __sbit
__at (0xC7) AD0MODA_7
;
346 #define SCAN0 AD0MODA_4
347 #define SCC0 AD0MODA_5
348 #define BURST0 AD0MODA_6
349 #define BNDI0 AD0MODA_7
352 __sbit
__at (0xC8) TCR20_0
;
353 __sbit
__at (0xC9) TCR20_1
;
354 __sbit
__at (0xCA) TCR20_2
;
355 __sbit
__at (0xCB) TCR20_3
;
356 __sbit
__at (0xCC) TCR20_4
;
357 __sbit
__at (0xCD) TCR20_5
;
358 __sbit
__at (0xCE) TCR20_6
;
359 __sbit
__at (0xCF) TCR20_7
;
360 #define TMOD20 TCR20_0
361 #define TMOD21 TCR20_1
362 #define TDIR2 TCR20_2
363 #define ALTAB TCR20_3
364 #define ALTCD TCR20_4
365 #define HLTEN TCR20_5
366 #define HLTRN TCR20_6
367 #define PLEEN TCR20_7
370 __sbit
__at (0xD0) PSW_0
;
371 __sbit
__at (0xD1) PSW_1
;
372 __sbit
__at (0xD2) PSW_2
;
373 __sbit
__at (0xD3) PSW_3
;
374 __sbit
__at (0xD4) PSW_4
;
375 __sbit
__at (0xD5) PSW_5
;
376 __sbit
__at (0xD6) PSW_6
;
377 __sbit
__at (0xD7) PSW_7
;
388 __sbit
__at (0xD8) I2CON_0
;
389 __sbit
__at (0xD9) I2CON_1
;
390 __sbit
__at (0xDA) I2CON_2
;
391 __sbit
__at (0xDB) I2CON_3
;
392 __sbit
__at (0xDC) I2CON_4
;
393 __sbit
__at (0xDD) I2CON_5
;
394 __sbit
__at (0xDE) I2CON_6
;
395 __sbit
__at (0xDF) I2CON_7
;
396 #define CRSEL I2CON_0
404 __sbit
__at (0xE0) ACC_0
;
405 __sbit
__at (0xE1) ACC_1
;
406 __sbit
__at (0xE2) ACC_2
;
407 __sbit
__at (0xE3) ACC_3
;
408 __sbit
__at (0xE4) ACC_4
;
409 __sbit
__at (0xE5) ACC_5
;
410 __sbit
__at (0xE6) ACC_6
;
411 __sbit
__at (0xE7) ACC_7
;
414 __sbit
__at (0xE8) IEN1_0
;
415 __sbit
__at (0xE9) IEN1_1
;
416 __sbit
__at (0xEA) IEN1_2
;
417 __sbit
__at (0xEB) IEN1_3
;
418 __sbit
__at (0xEC) IEN1_4
;
419 __sbit
__at (0xED) IEN1_5
;
420 __sbit
__at (0xEE) IEN1_6
;
421 __sbit
__at (0xEF) IEN1_7
;
431 __sbit
__at (0xF0) B_0
;
432 __sbit
__at (0xF1) B_1
;
433 __sbit
__at (0xF2) B_2
;
434 __sbit
__at (0xF3) B_3
;
435 __sbit
__at (0xF4) B_4
;
436 __sbit
__at (0xF5) B_5
;
437 __sbit
__at (0xF6) B_6
;
438 __sbit
__at (0xF7) B_7
;
441 __sbit
__at (0xF8) IP1_0
;
442 __sbit
__at (0xF9) IP1_1
;
443 __sbit
__at (0xFA) IP1_2
;
444 __sbit
__at (0xFB) IP1_3
;
445 __sbit
__at (0xFC) IP1_4
;
446 __sbit
__at (0xFD) IP1_5
;
447 __sbit
__at (0xFE) IP1_6
;
448 __sbit
__at (0xFF) IP1_7
;
457 #endif /* P89LPC938_H */