2008-11-09 Gudjon I. Gudjonsson <gudjon AT gudjon.org>
[fw/sdcc] / device / include / mcs51 / p89lpc933_4.h
diff --git a/device/include/mcs51/p89lpc933_4.h b/device/include/mcs51/p89lpc933_4.h
new file mode 100644 (file)
index 0000000..4ce1659
--- /dev/null
@@ -0,0 +1,463 @@
+/*--------------------------------------------------------------------------
+p89lpc933_4.h
+
+This header allows to use the microcontrolers NXP (formerly Philips)
+p89lpc933, 934.
+
+Copyright (c) 2008 Gudjon I. Gudjonsson <gudjon AT gudjon.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA
+
+ The registered are ordered in the same way as in the NXP data sheet:
+ http://www.standardics.nxp.com/products/lpc900/datasheet/p89lpc933.p89lpc934.p89lpc935.p89lpc936.pdf
+
+
+--------------------------------------------------------------------------*/
+#ifndef __P89LPC933_4_H__
+#define __P89LPC933_4_H__
+#include <compiler.h>
+
+/*BYTE Registers*/
+SFR(ACC, 0xE0); // Accumulator
+       SBIT(ACC_7, 0xE0, 7);
+       SBIT(ACC_6, 0xE0, 6);
+       SBIT(ACC_5, 0xE0, 5);
+       SBIT(ACC_4, 0xE0, 4);
+       SBIT(ACC_3, 0xE0, 3);
+       SBIT(ACC_2, 0xE0, 2);
+       SBIT(ACC_1, 0xE0, 1);
+       SBIT(ACC_0, 0xE0, 0);
+SFR(ADCON0, 0x8E); // A/D control register 0
+       #define  ENADC0   0x04
+SFR(ADCON1, 0x97); // A/D control register 1
+       #define  ENBI1    0x80
+       #define  ENADCI1  0x40
+       #define  TMM1     0x20
+       #define  EDGE1    0x10
+       #define  ADCI1    0x08
+       #define  ENADC1   0x04
+       #define  ADCS11   0x02
+       #define  ADCS10   0x01
+SFR(ADINS, 0xA3); // A/D input select
+       #define  ADI13    0x80
+       #define  ADI12    0x40
+       #define  ADI11    0x20
+       #define  ADI10    0x10
+SFR(ADMODA, 0xC0); // A/D mode register A
+       SBIT(BNDI1,  0xC0, 7);
+       SBIT(BURST1, 0xC0, 6);
+       SBIT(SCC1,   0xC0, 5);
+       SBIT(SCAN1,  0xC0, 4);
+SFR(ADMODB, 0xA1); // A/D mode register B
+       #define  CLK2     0x80
+       #define  CLK1     0x40
+       #define  CLK0     0x20
+       #define  ENDAC1   0x08
+       #define  ENDAC0   0x04
+       #define  BSA1     0x02
+SFR(AD0DAT3, 0xF4); // A/D_0 data register 3
+SFR(AD1BH,   0xC4); // A/D_1 boundary high register
+SFR(AD1BL,   0xBC); // A/D_1 boundary low register
+SFR(AD1DAT0, 0xD5); // A/D_1 data register 0
+SFR(AD1DAT1, 0xD6); // A/D_1 data register 1
+SFR(AD1DAT2, 0xD7); // A/D_1 data register 2
+SFR(AD1DAT3, 0xF5); // A/D_1 data register 3
+SFR(AUXR1,   0xA2); // Auxilary function register
+       #define  CLKLP    0x80
+       #define  EBRR     0x40
+       #define  ENT1     0x20
+       #define  ENT0     0x10
+       #define  SRST     0x08  // Bit 2 is always 0
+       #define  DPS      0x01
+SFR(B, 0xF0); // B register
+       SBIT(B7, 0xF0, 7);
+       SBIT(B6, 0xF0, 6);
+       SBIT(B5, 0xF0, 5);
+       SBIT(B4, 0xF0, 4);
+       SBIT(B3, 0xF0, 3);
+       SBIT(B2, 0xF0, 2);
+       SBIT(B1, 0xF0, 1);
+       SBIT(B0, 0xF0, 0);
+SFR(BRGR0,  0xBE); // Baud rate generator rate low
+SFR(BRGR1,  0xBF); // Baud rate generator rate high
+SFR(BRGCON, 0xBD); // Baud rate generator control
+       #define  SBRGS    0x02
+       #define  BRGEN    0x01
+SFR(CMP1,   0xAC); // Comparator 1 control register
+       #define  CE1      0x20
+       #define  CP1      0x10
+       #define  CN1      0x08
+       #define  OE1      0x04
+       #define  CO1      0x02
+       #define  CMF1     0x01
+SFR(CMP2,   0xAD); // Comparator 2 control register
+       #define  CE2      0x20
+       #define  CP2      0x10
+       #define  CN2      0x08
+       #define  OE2      0x04
+       #define  CO2      0x02
+       #define  CMF2     0x01
+SFR(DIVM,   0x95); // CPU clock divide-by-M control
+SFR(DPH,  0x83); // Data Pointer High
+SFR(DPL,  0x82); // Data Pointer Low
+SFR(FMADRH, 0xE7); // Program flash address high
+SFR(FMADRL, 0xE6); // Program flash address low
+SFR(FMCON,  0xE4);
+       // Program flash control (Read)
+       #define  BUSY     0x80
+       #define  HVA      0x08
+       #define  HVE      0x04
+       #define  SV       0x02
+       #define  OI       0x01
+       // Program flash control (Write)
+       #define  FMCMD_7  0x80
+       #define  FMCMD_6  0x40
+       #define  FMCMD_5  0x20
+       #define  FMCMD_4  0x10
+       #define  FMCMD_3  0x08
+       #define  FMCMD_2  0x04
+       #define  FMCMD_1  0x02
+       #define  FMCMD_0  0x01
+SFR(FMDATA,  0xE5); // Program flash data
+SFR(I2ADR,   0xDB); // I2C slave address register
+       #define I2ADR_6  0x80
+       #define I2ADR_5  0x40
+       #define I2ADR_4  0x20
+       #define I2ADR_3  0x10
+       #define I2ADR_2  0x08
+       #define I2ADR_1  0x04
+       #define I2ADR_0  0x02
+       #define GC       0x01
+SFR(I2CON,  0xD8); // I2C control register
+       SBIT(I2EN,  0xD8, 6);
+       SBIT(STA,   0xD8, 5);
+       SBIT(STO,   0xD8, 4);
+       SBIT(SI,    0xD8, 3);
+       SBIT(AA,    0xD8, 2);
+       SBIT(CRSEL, 0xD8, 0);
+SFR(I2DAT,  0xDA); // I2C data register
+SFR(I2SCLH, 0xDD); // I2C serial clock generator/SCL duty cycle register high
+SFR(I2SCLL, 0xDC); // I2C serial clock generator/SCL duty cycle register low
+SFR(I2STAT, 0xD9); // I2C status register
+       #define STA_4   0x80
+       #define STA_3   0x40
+       #define STA_2   0x20
+       #define STA_1   0x10
+       #define STA_0   0x08    // Only write 0 to the lowest three bits
+SFR(ICRAH,  0xAB); // Input capture A register high
+SFR(ICRAL,  0xAA); // Input capture A register low
+SFR(ICRBH,  0xAF); // Input capture B register high
+SFR(ICRBL,  0xAE); // Input capture B register low
+SFR(IEN0,   0xA8); // Interrupt Enable 0
+       SBIT(EA,     0xA8, 7);
+       SBIT(EWDRT,  0xA8, 6);
+       SBIT(EBO,    0xA8, 5);
+       SBIT(ES_ESR, 0xA8, 4);
+       SBIT(ET1,    0xA8, 3);
+       SBIT(EX1,    0xA8, 2);
+       SBIT(ET0,    0xA8, 1);
+       SBIT(EX0,    0xA8, 0);
+SFR(IEN1,  0xE8); // Interrupt Enable 1
+       SBIT(EAD,    0xE8, 7);
+       SBIT(EST,    0xE8, 6);
+       SBIT(ESPI,   0xE8, 3);
+       SBIT(EC,     0xE8, 2);
+       SBIT(EKBI,   0xE8, 1);
+       SBIT(EI2C,   0xE8, 0);
+SFR(IP0, 0xB8); // Interrupt Priority 0
+       SBIT(PWDRT,  0xB8, 6);
+       SBIT(PBO,    0xB8, 5);
+       SBIT(PS_PSR, 0xB8, 4);
+       SBIT(PT1,    0xB8, 3);
+       SBIT(PX1,    0xB8, 2);
+       SBIT(PT0,    0xB8, 1);
+       SBIT(PX0,    0xB8, 0);
+SFR(IP0H, 0xB7); // Interrupt Priority 0 high
+       #define PWDRTH    0x40
+       #define PBOH      0x20
+       #define PSH_PSRH  0x10
+       #define PT1H      0x08
+       #define PX1H      0x04
+       #define PT0H      0x02
+       #define PX0H      0x01
+SFR(IP1,  0xF8); // Interrupt Priority 1
+       SBIT(PAD,   0xF8, 7);
+       SBIT(PST,   0xF8, 6);
+       SBIT(PSPI,  0xF8, 3);
+       SBIT(PC,    0xF8, 2);
+       SBIT(PKBI,  0xF8, 1);
+       SBIT(PI2C,  0xF8, 0);
+SFR(IP1H, 0xF7); // Interrupt Priority 1 High
+       #define PADH   0x80
+       #define PSTH   0x40
+       #define PSPIH  0x08
+       #define PCH    0x04
+       #define PKBIH  0x02
+       #define PI2CH  0x01
+SFR(KBCON, 0x94); // Keypad control register
+       #define PATN_SEL 0x02
+       #define KBIF     0x01
+SFR(KBMASK, 0x86); // Keypad interrupt mask register
+SFR(KBPATN, 0x93); // Keypad pattern register
+SFR(P0, 0x80); // Port 0
+       SBIT(P0_7,  0x80, 7);
+       SBIT(T1,    0x80, 7);
+       SBIT(KB7,   0x80, 7);
+       SBIT(P0_6,  0x80, 6);
+       SBIT(CMP_1, 0x80, 6); // Renamed, not to conflict with the CMP1 register
+       SBIT(KB6,   0x80, 6);
+       SBIT(P0_5,  0x80, 5);
+       SBIT(CMPREF,0x80, 5);
+       SBIT(KB5,   0x80, 5);
+       SBIT(P0_4,  0x80, 4);
+       SBIT(CIN1A, 0x80, 4);
+       SBIT(KB4,   0x80, 4);
+       SBIT(P0_3,  0x80, 3);
+       SBIT(CIN1B, 0x80, 3);
+       SBIT(KB3,   0x80, 3);
+       SBIT(P0_2,  0x80, 2);
+       SBIT(CIN2A, 0x80, 2);
+       SBIT(KB2,   0x80, 2);
+       SBIT(P0_1,  0x80, 1);
+       SBIT(CIN2B, 0x80, 1);
+       SBIT(KB1,   0x80, 1);
+       SBIT(P0_0,  0x80, 0);
+       SBIT(CMP_2, 0x80, 0); // Renamed, not to conflict with the CMP2 register
+       SBIT(KB0,   0x80, 0);
+SFR(P1, 0x90); // Port 1
+       SBIT(P1_7,    0x90, 7);
+       SBIT(P1_6,    0x90, 6);
+       SBIT(P1_5,    0x90, 5);
+       SBIT(RST,     0x90, 5);
+       SBIT(P1_4,    0x90, 4);
+       SBIT(INT1,    0x90, 4);
+       SBIT(P1_3,    0x90, 3);
+       SBIT(INT0,    0x90, 3);
+       SBIT(SDA,     0x90, 3);
+       SBIT(P1_2,    0x90, 2);
+       SBIT(T0,      0x90, 2);
+       SBIT(SCL,     0x90, 2);
+       SBIT(P1_1,    0x90, 1);
+       SBIT(RXD,     0x90, 1);
+       SBIT(P1_0,    0x90, 0);
+       SBIT(TXD,     0x90, 0);
+SFR(P2, 0xA0); // Port 2
+       SBIT(P2_7,   0xA0, 7);
+       SBIT(P2_6,   0xA0, 6);
+       SBIT(P2_5,   0xA0, 5);
+       SBIT(SPICLK, 0xA0, 5);
+       SBIT(P2_4,   0xA0, 4);
+       SBIT(SS,     0xA0, 4);
+       SBIT(P2_3,   0xA0, 3);
+       SBIT(MISO,   0xA0, 3);
+       SBIT(P2_2,   0xA0, 2);
+       SBIT(MOSI,   0xA0, 2);
+       SBIT(P2_1,   0xA0, 1);
+       SBIT(P2_0,   0xA0, 0);
+SFR(P3, 0xB0); // Port 3
+       SBIT(P3_7, 0xB0, 7);
+       SBIT(P3_6, 0xB0, 6);
+       SBIT(P3_5, 0xB0, 5);
+       SBIT(P3_4, 0xB0, 4);
+       SBIT(P3_3, 0xB0, 3);
+       SBIT(P3_2, 0xB0, 2);
+       SBIT(P3_1, 0xB0, 1);
+       SBIT(XTAL1,0xB0, 1);
+       SBIT(P3_0, 0xB0, 0);
+       SBIT(XTAL2,0xB0, 0);
+SFR(P0M1, 0x84); // Port 0 output mode 1
+       #define P0M1_7  0x80
+       #define P0M1_6  0x40
+       #define P0M1_5  0x20
+       #define P0M1_4  0x10
+       #define P0M1_3  0x08
+       #define P0M1_2  0x04
+       #define P0M1_1  0x02
+       #define P0M1_0  0x01
+SFR(P0M2, 0x85); // Port 0 output mode 2
+       #define P0M2_7  0x80
+       #define P0M2_6  0x40
+       #define P0M2_5  0x20
+       #define P0M2_4  0x10
+       #define P0M2_3  0x08
+       #define P0M2_2  0x04
+       #define P0M2_1  0x02
+       #define P0M2_0  0x01
+SFR(P1M1, 0x91); // Port 1 output mode 1
+       #define P1M1_7  0x80
+       #define P1M1_6  0x40
+       #define P1M1_4  0x10
+       #define P1M1_3  0x08
+       #define P1M1_2  0x04
+       #define P1M1_1  0x02
+       #define P1M1_0  0x01
+SFR(P1M2, 0x92); // Port 1 output mode 2
+       #define P1M2_7  0x80
+       #define P1M2_6  0x40
+       #define P1M2_4  0x10
+       #define P1M2_3  0x08
+       #define P1M2_2  0x04
+       #define P1M2_1  0x02
+       #define P1M2_0  0x01
+SFR(P2M1, 0xA4); // Port 2 output mode 1
+       #define P2M1_7  0x80
+       #define P2M1_6  0x40
+       #define P2M1_5  0x20
+       #define P2M1_4  0x10
+       #define P2M1_3  0x08
+       #define P2M1_2  0x04
+       #define P2M1_1  0x02
+       #define P2M1_0  0x01
+SFR(P2M2, 0xA5); // Port 2 output mode 2
+       #define P2M2_7  0x80
+       #define P2M2_6  0x40
+       #define P2M2_5  0x20
+       #define P2M2_4  0x10
+       #define P2M2_3  0x08
+       #define P2M2_2  0x04
+       #define P2M2_1  0x02
+       #define P2M2_0  0x01
+SFR(P3M1, 0xB1); // Port 3 output mode 1
+       #define P3M1_1  0x02
+       #define P3M1_0  0x01
+SFR(P3M2, 0xB2); // Port 3 output mode 2
+       #define P3M2_1  0x02
+       #define P3M2_0  0x01
+SFR(PCON,  0x87); // Power control register
+       #define SMOD1   0x80
+       #define SMOD0   0x40
+       #define BOPD    0x20
+       #define BOI     0x10
+       #define GF1     0x08
+       #define GF0     0x04
+       #define PMOD1   0x02
+       #define PMOD0   0x01
+SFR(PCONA, 0xB5); // Power control register A
+       #define RTCPD   0x80
+       #define VCPD    0x20
+       #define ADPD    0x10
+       #define I2PD    0x08
+       #define SPPD    0x04
+       #define SPD     0x02
+SFR(PSW, 0xD0); // Program Status Word
+       SBIT(CY,  0xD0, 7);
+       SBIT(AC,  0xD0, 6);
+       SBIT(F0,  0xD0, 5);
+       SBIT(RS1, 0xD0, 4);
+       SBIT(RS0, 0xD0, 3);
+       SBIT(OV,  0xD0, 2);
+       SBIT(F1,  0xD0, 1);
+       SBIT(P,   0xD0, 0);
+SFR(PT0AD, 0xF6); // Port 0 digital input disable
+       #define PT0AD_5   0x20
+       #define PT0AD_4   0x10
+       #define PT0AD_3   0x08
+       #define PT0AD_2   0x04
+       #define PT0AD_1   0x02
+SFR(RSTSRC, 0xDF); // Reset source register
+       #define BOF    0x20
+       #define POF    0x10
+       #define R_BK   0x08
+       #define R_WD   0x04
+       #define R_SF   0x02
+       #define R_EX   0x01
+SFR(RTCCON, 0xD1); // Real-time clock control
+       #define RTCF   0x80
+       #define RTCS1  0x40
+       #define RTCS0  0x20
+       #define ERTC   0x02
+       #define RTCEN  0x01
+SFR(RTCH,  0xD2); // Real-time clock register high
+SFR(RTCL,  0xD3); // Real-time clock register low
+SFR(SADDR, 0xA9); // Serial port address register
+SFR(SADEN, 0xB9); // Serial port address enable
+SFR(SBUF,  0x99); // Serial port data buffer register
+SFR(SCON,  0x98); // Serial port control
+       SBIT(SM0_FE, 0x98, 7);
+       SBIT(SM1,    0x98, 6);
+       SBIT(SM2,    0x98, 5);
+       SBIT(REN,    0x98, 4);
+       SBIT(TB8,    0x98, 3);
+       SBIT(RB8,    0x98, 2);
+       SBIT(TI,     0x98, 1);
+       SBIT(RI,     0x98, 0);
+SFR(SSTAT, 0xBA); // Serial port extended status register
+       #define DBMOD  0x80
+       #define INTLO  0x40
+       #define CIDIS  0x20
+       #define DBISEL 0x10
+       #define FE     0x08
+       #define BR     0x04
+       #define OE     0x02
+       #define STINT  0x01
+SFR(SP,     0x81); // Stack Pointer
+SFR(SPCTL,  0xE2); // SPI control register
+       #define SSIG  0x80
+       #define SPEN  0x40
+       #define DORD  0x20
+       #define MSTR  0x10
+       #define CPOL  0x08
+       #define CPHA  0x04
+       #define SPR1  0x02
+       #define SPR0  0x01
+SFR(SPSTAT, 0xE1); // SPI status register
+       #define SPIF  0x80
+       #define WCOL  0x40
+SFR(SPDAT,  0xE3); // SPI data register
+SFR(TAMOD,  0x8F); // Timer 0 and 1 auxiliary mode
+       #define T1M2  0x10
+       #define T0M2  0x01
+SFR(TCON,   0x88); // Timer 0 and 1 control
+       SBIT(TF1, 0x88, 7);
+       SBIT(TR1, 0x88, 6);
+       SBIT(TF0, 0x88, 5);
+       SBIT(TR0, 0x88, 4);
+       SBIT(IE1, 0x88, 3);
+       SBIT(IT1, 0x88, 2);
+       SBIT(IE0, 0x88, 1);
+       SBIT(IT0, 0x88, 0);
+SFR(TH0,  0x8C); // Timer 0 high
+SFR(TH1,  0x8D); // Timer 1 high
+SFR(TL0,  0x8A); // Timer 0 low
+SFR(TL1,  0x8B); // Timer 1 low
+SFR(TMOD, 0x89); // Timer 0 and 1 mode
+       #define T1GATE  0x80
+       #define T1C_T   0x40
+       #define T1M1    0x20
+       #define T1M0    0x10
+       #define T0GATE  0x08
+       #define T0C_T   0x04
+       #define T0M1    0x02
+       #define T0M0    0x01
+SFR(TRIM, 0x96); // Internal oscillator trim register
+       #define RCCLK   0x80
+       #define ENCLK   0x40
+       #define TRIM_5  0x20
+       #define TRIM_4  0x10
+       #define TRIM_3  0x08
+       #define TRIM_2  0x04
+       #define TRIM_1  0x02
+       #define TRIM_0  0x01
+SFR(WDCON, 0xA7); // Watchdog control register
+       #define PRE2    0x80
+       #define PRE1    0x40
+       #define PRE0    0x20
+       #define WDRUN   0x04
+       #define WDTOF   0x02
+       #define WDCLK   0x01
+SFR(WDL,    0xC1); // Watchdog load
+SFR(WFEED1, 0xC2); // Watchdog feed 1
+SFR(WFEED2, 0xC3); // Watchdog feed 2
+#endif // __P89LPC933_4_H__
\ No newline at end of file