* Fixed svn:eol-style and svn:keywords properties
[fw/sdcc] / device / include / mcs51 / ADuC84x.h
index 2eb0d00660df49d1778b42ec9509a7239f24ce27..2ce4131f20cb1d3f363e030667fa8a7ce0f36442 100644 (file)
-/*-------------------------------------------------------------------------\r
-   Register Declarations for Analog Devices ADuC841/ADuC842/ADuC843\r
-   (Based on datasheet Rev 0, 11/2003 )\r
-\r
-   Written By -  Jesus Calvino-Fraga / jesusc at ece.ubc.ca (March 2007)\r
-\r
-   This library is free software; you can redistribute it and/or\r
-   modify it under the terms of the GNU Lesser General Public\r
-   License as published by the Free Software Foundation; either\r
-   version 2.1 of the License, or (at your option); any later version\r
-\r
-   This library is distributed in the hope that it will be useful,\r
-   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-   Lesser General Public License for more details\r
-\r
-   You should have received a copy of the GNU Lesser General Public\r
-   License along with this library; if not, write to the Free Software\r
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
-\r
-   In other words, you are welcome to use, share and improve this program\r
-   You are forbidden to forbid anyone else to use, share and improve\r
-   what you give them.   Help stamp out software-hoarding!\r
--------------------------------------------------------------------------*/\r
-#ifndef REG_ADUC84X_H\r
-#define REG_ADUC84X_H\r
-\r
-#include <compiler.h>\r
-\r
-SFR(CFG841, 0xAF); // ADuC841 Configuration SFR.\r
-SFR(CFG842, 0xAF); // ADuC842/ADuC843 Configuration SFR.\r
-       //For the two SFRs above these are the bits.  Warning: some are different for\r
-       //the ADuC841 and ADuC842/ADuC843.  Check the datasheet!\r
-    #define EPM2   0x10 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 2.\r
-    #define EPM1   0x08 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 1.\r
-    #define EPM0   0x04 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 0.\r
-    #define EXSP   0x80 // Extended SP Enable.\r
-    #define PWPO   0x40 // PWM Pin Out Selection.\r
-    #define DBUF   0x20 // DAC Output Buffer.\r
-    #define EXTCLK 0x10 // Set by the user to 1 to select an external clock input on P3.4.\r
-    #define MSPI   0x02 // Set to 1 by the user to move the SPI functionality of.\r
-    #define XRAMEN 0x01 // XRAM Enable Bit.\r
-\r
-SFR(SP,    0x81); // Stack Pointer.\r
-SFR(SPH,   0xB7); // Stack pointer high.\r
-\r
-SFR(DPL,   0x82); // Data Pointer Low.\r
-SFR(DPH,   0x83); // Data Pointer High.\r
-SFR(DPP,   0x84); // Data Pointer Page Byte.\r
-SFR(DPCON, 0xA7); // Data Pointer Control SFR.\r
-\r
-SFR(PCON, 0x87); // Power Control.\r
-   #define SMOD   0x80 //Double UART Baud Rate.\r
-   #define SERIPD 0x40 //I2C/SPI Power-Down Interrupt Enable.\r
-   #define INT0PD 0x20 //INT0 Power-Down Interrupt Enable.\r
-   #define ALEOFF 0x10 //Disable ALE Output.\r
-   #define GF1    0x08 //General-Purpose Flag Bit.\r
-   #define GF0    0x04 //General-Purpose Flag Bit.\r
-   #define PD     0x02 //Power-Down Mode Enable.\r
-   #define IDL    0x01 //Idle Mode Enable.\r
-\r
-SFR(TCON, 0x88); // Timer/Counter Control.\r
-    SBIT(TF1, 0x88, 7); // Timer 1 overflow flag.\r
-    SBIT(TR1, 0x88, 6); // Timer 1 run control flag.\r
-    SBIT(TF0, 0x88, 5); // Timer 0 overflow flag.\r
-    SBIT(TR0, 0x88, 4); // Timer 0 run control flag.\r
-    SBIT(IE1, 0x88, 3); // Interrupt 1 flag.\r
-    SBIT(IT1, 0x88, 2); // Interrupt 1 type control bit.\r
-    SBIT(IE0, 0x88, 1); // Interrupt 0 flag.\r
-    SBIT(IT0, 0x88, 0); // Interrupt 0 type control bit.\r
-\r
-SFR(TMOD, 0x89); // Timer/Counter Mode Control.\r
-   #define GATE1 0x80 // External enable for timer 1.\r
-   #define C_T1  0x40 // Timer or counter select for timer 1.\r
-   #define M1_1  0x20 // Operation mode bit 1 for timer 1.\r
-   #define M0_1  0x10 // Operation mode bit 0 for timer 1.\r
-   #define GATE0 0x08 // External enable for timer 0.\r
-   #define C_T0  0x04 // Timer or counter select for timer 0.\r
-   #define M1_0  0x02 // Operation mode bit 1 for timer 0.\r
-   #define M0_0  0x01 // Operation mode bit 0 for timer 0.\r
-\r
-SFR(TL0, 0x8A); // Timer 0 LSB.\r
-SFR(TL1, 0x8B); // Timer 1 LSB.\r
-SFR(TH0, 0x8C); // Timer 0 MSB.\r
-SFR(TH1, 0x8D); // Timer 1 MSB.\r
-\r
-SFR(P0, 0x80); // Port 0\r
-    SBIT(P0_0, 0x80, 0); // Port 0 bit 0.\r
-    SBIT(P0_1, 0x80, 1); // Port 0 bit 1.\r
-    SBIT(P0_2, 0x80, 2); // Port 0 bit 2.\r
-    SBIT(P0_3, 0x80, 3); // Port 0 bit 3.\r
-    SBIT(P0_4, 0x80, 4); // Port 0 bit 4.\r
-    SBIT(P0_5, 0x80, 5); // Port 0 bit 5.\r
-    SBIT(P0_6, 0x80, 6); // Port 0 bit 6.\r
-    SBIT(P0_7, 0x80, 7); // Port 0 bit 7.\r
-\r
-SFR(P1, 0x90); // Port 1\r
-    SBIT(P1_0, 0x90, 0); // Port 1 bit 0.\r
-    SBIT(P1_1, 0x90, 1); // Port 1 bit 1.\r
-    SBIT(P1_2, 0x90, 2); // Port 1 bit 2.\r
-    SBIT(P1_3, 0x90, 3); // Port 1 bit 3.\r
-    SBIT(P1_4, 0x90, 4); // Port 1 bit 4.\r
-    SBIT(P1_5, 0x90, 5); // Port 1 bit 5.\r
-    SBIT(P1_6, 0x90, 6); // Port 1 bit 6.\r
-    SBIT(P1_7, 0x90, 7); // Port 1 bit 7.\r
-    // Alternate names\r
-    SBIT(T2EX, 0x90, 1); //Capture/reload trigger for Counter 2.\r
-    SBIT(T2,   0x90, 0); //Input to Timer/Counter 2.\r
-\r
-SFR(P2, 0xA0); // Port 2\r
-   SBIT(P2_0, 0xA0, 0); // Port 2 bit 0.\r
-   SBIT(P2_1, 0xA0, 1); // Port 2 bit 1.\r
-   SBIT(P2_2, 0xA0, 2); // Port 2 bit 2.\r
-   SBIT(P2_3, 0xA0, 3); // Port 2 bit 3.\r
-   SBIT(P2_4, 0xA0, 4); // Port 2 bit 4.\r
-   SBIT(P2_5, 0xA0, 5); // Port 2 bit 5.\r
-   SBIT(P2_6, 0xA0, 6); // Port 2 bit 6.\r
-   SBIT(P2_7, 0xA0, 7); // Port 2 bit 7.\r
-\r
-SFR(P3, 0xB0); // Port 3\r
-   SBIT(P3_0, 0xB0, 0); // Port 3 bit 0.\r
-   SBIT(P3_1, 0xB0, 1); // Port 3 bit 1.\r
-   SBIT(P3_2, 0xB0, 2); // Port 3 bit 2.\r
-   SBIT(P3_3, 0xB0, 3); // Port 3 bit 3.\r
-   SBIT(P3_4, 0xB0, 4); // Port 3 bit 4.\r
-   SBIT(P3_5, 0xB0, 5); // Port 3 bit 5.\r
-   SBIT(P3_6, 0xB0, 6); // Port 3 bit 6.\r
-   SBIT(P3_7, 0xB0, 7); // Port 3 bit 7.\r
-   // Alternate names.\r
-   SBIT(RXD,  0xB0, 0);\r
-   SBIT(TXD,  0xB0, 1);\r
-   SBIT(INT0, 0xB0, 2);\r
-   SBIT(INT1, 0xB0, 3);\r
-   SBIT(T0,   0xB0, 4);\r
-   SBIT(T1,   0xB0, 5);\r
-   SBIT(WR,   0xB0, 6);\r
-   SBIT(RD,   0xB0, 7);\r
-\r
-SFR(I2CADD,  0x9B); // I2C Address Register 1.\r
-SFR(I2CADD1, 0x91); // I2C Address Register 2.\r
-SFR(I2CADD2, 0x92); // I2C Address Register 3.\r
-SFR(I2CADD3, 0x93); // I2C Address Register 4.\r
-SFR(I2CDAT,  0x9A); // I2C Data Register.\r
-\r
-SFR(SCON, 0x98); // Serial Port Control.\r
-   SBIT(SM0, 0x98, 7); // Serial Port Mode Bit 0.\r
-   SBIT(SM1, 0x98, 6); // Serial Port Mode Bit 1.\r
-   SBIT(SM2, 0x98, 5); // Serial Port Mode Bit 2.\r
-   SBIT(REN, 0x98, 4); // Enables serial reception.\r
-   SBIT(TB8, 0x98, 3); // The 9th data bit that will be transmitted in Modes 2 and 3.\r
-   SBIT(RB8, 0x98, 2); // In Modes 2 and 3, the 9th data bit that was received.\r
-   SBIT(TI,  0x98, 1); // Transmit interrupt flag.\r
-   SBIT(RI,  0x98, 0); // Receive interrupt flag.\r
-\r
-SFR(SBUF, 0x99); // Serial Data Buffer.\r
-\r
-//For these two, you may want to check page 68 of the datasheet...\r
-SFR(T3FD,  0x9D);       // Fractional divider ratio.\r
-SFR(T3CON, 0x9E);       // T3CON is the baud rate control SFR, allowing Timer 3 to be\r
-                        // used to set up the UART baud rate, and setting up the binary\r
-                        // divider (DIV).\r
-#define T3BAUDEN 0x80   // T3 UART BAUD Enable.\r
-#define DIV2 0x04       // Binary Divider Factor bit 3.\r
-#define DIV1 0x02       // Binary Divider Factor bit 2.\r
-#define DIV0 0x01       // Binary Divider Factor bit 1.\r
-\r
-SFR(TIMECON, 0xA1); // TIC Control Register.\r
-    #define TFH  0x40 // Twenty-Four Hour Select Bit.\r
-    #define ITS1 0x20 // Interval Timebase Selection Bit 1.\r
-    #define ITS0 0x10 // Interval Timebase Selection Bit 1.\r
-    #define STI  0x08 // Single Time Interval Bit.\r
-    #define TII  0x04 // TIC Interrupt Bit.\r
-    #define TIEN 0x02 // Time Interval Enable Bit.\r
-    #define TCEN 0x01 // Time Clock Enable Bit.\r
-\r
-SFR(HTHSEC, 0xA2); // Hundredths Seconds Time Register.\r
-SFR(SEC,    0xA3); // Seconds Time Register.\r
-SFR(MIN,    0xA4); // Minutes Time Register.\r
-SFR(HOUR,   0xA5); // Hours Time Register.\r
-SFR(INTVAL, 0xA6); // User Time Interval Select Register.\r
-\r
-SFR(IE,  0xA8); // Interrupt Enable.\r
-   SBIT(EA,   0xA8, 7); // Global Interrupt Enable.\r
-   SBIT(EADC, 0xA8, 6); // ADC Interrupt Enable.\r
-   SBIT(ET2,  0xA8, 5); // Timer 2 Interrupt Enable.\r
-   SBIT(ES,   0xA8, 4); // Serial Interrupt Enable.\r
-   SBIT(ET1,  0xA8, 3); // Timer 1 Interrupt Enable.\r
-   SBIT(EX1,  0xA8, 2); // External 1 Interrupt Enable.\r
-   SBIT(ET0,  0xA8, 1); // Timer 0 Interrupt Enable.\r
-   SBIT(EX0,  0xA8, 0); // External 0 Interrupt Enable.\r
-\r
-SFR(IEIP2, 0xA9); // Secondary Interrupt Enable Register\r
-    #define PTI   0x40 // Priority for time interval interrupt.\r
-    #define PPSM  0x20 // Priority for power supply monitor interrupt.\r
-    #define PSI2  0x10 // Priority for SPI/I2C interrupt. Same name as bit in IP???\r
-    #define ETI   0x04 // Enable time interval counter interrupts.\r
-    #define EPSMI 0x02 // Enable power supply monitor interrupts.\r
-    #define ESI   0x01 // Enable SPI or I2C serial port interrupts.\r
-\r
-SFR(PWMCON, 0xAE); //PWM control.\r
-    #define SNGL  0x80 // Turns off PMW output at P2.6 or P3.4.\r
-    #define MD2   0x40 // PWM Mode Bit 2.\r
-    #define MD1   0x20 // PWM Mode Bit 2.\r
-    #define MD0   0x10 // PWM Mode Bit 2.\r
-    #define CDIV1 0x08 // PWM Clock Divider bit 1.\r
-    #define CDIV0 0x04 // PWM Clock Divider bit 1.\r
-    #define CSEL1 0x02 // PWM Clock Select bit 1. (Typo in datasheet???)\r
-    #define CSEL0 0x01 // PWM Clock Select bit 0.\r
-\r
-SFR(PWM0L, 0xB1); // PWM 0 duty cycle low.\r
-SFR(PWM0H, 0xB2); // PWM 0 duty cycle high.\r
-SFR(PWM1L, 0xB3); // PWM 1 duty cycle low.\r
-SFR(PWM1H, 0xB4); // PWM 1 duty cycle high.\r
-\r
-SFR(IP,  0xB8); // Interrupt Priority Reg.\r
-   SBIT(PSI,  0xB8, 7); // Priority for SPI/I2C interrupt.\r
-   SBIT(PADC, 0xB8, 6); // ADC interrupt priority bit.\r
-   SBIT(PT2,  0xB8, 5); // Timer 2 interrupt priority bit.\r
-   SBIT(PS,   0xB8, 4); // Serial Port interrupt priority bit.\r
-   SBIT(PT1,  0xB8, 3); // Timer 1 interrupt priority bit.\r
-   SBIT(PX1,  0xB8, 2); // External interrupt 1 priority bit.\r
-   SBIT(PT0,  0xB8, 1); // Timer 0 interrupt priority bit.\r
-   SBIT(PX0,  0xB8, 0); // External interrupt 0 priority bit.\r
-\r
-SFR(ECON,   0xB9); // Flash/EE Memory Control SFR.\r
-SFR(EDATA1, 0xBC); // EE page data byte 1.\r
-SFR(EDATA2, 0xBD); // EE page data byte 2.\r
-SFR(EDATA3, 0xBE); // EE page data byte 3.\r
-SFR(EDATA4, 0xBF); // EE page data byte 4.\r
-SFR(EADRL,  0xC6); // EE address low.\r
-SFR(EADRH,  0xC7); // EE address high.\r
-\r
-SFR(WDCON, 0xC0); //Watchdog Timer Control Register.\r
-    SBIT(PRE3, 0xc0, 7); // Timeout period bit 4.\r
-    SBIT(PRE2, 0xc0, 6); // Timeout period bit 3.\r
-    SBIT(PRE1, 0xc0, 5); // Timeout period bit 2.\r
-    SBIT(PRE0, 0xc0, 4); // Timeout period bit 1.\r
-    SBIT(WDIR, 0xc0, 3); // Watchdog Interrupt Response Enable Bit.\r
-    SBIT(WDS,  0xc0, 2); // Watchdog Status Bit.\r
-    SBIT(WDE,  0xc0, 1); // Watchdog Enable Bit.\r
-    SBIT(WDWR, 0xc0, 0); // Watchdog Write Enable Bit.\r
-\r
-SFR(CHIPID, 0xC2); // System Self-Identification? WARNING: No description in the datasheet.\r
-\r
-SFR(T2CON, 0xC8); // Timer / Counter 2 Control.\r
-   SBIT(TF2,   0xC8, 7); // Timer 2 overflow flag.\r
-   SBIT(EXF2,  0xC8, 6); // Timer 2 external flag.\r
-   SBIT(RCLK,  0xC8, 5); // Receive clock flag.\r
-   SBIT(TCLK,  0xC8, 4); // Transmit clock flag.\r
-   SBIT(EXEN2, 0xC8, 3); // Timer 2 external enable flag.\r
-   SBIT(TR2,   0xC8, 2); // Start/stop control for timer 2.\r
-   SBIT(CNT2,  0xC8, 1); // Timer or coutner select.\r
-   SBIT(CAP2,  0xC8, 0); // Capture/reload flag.\r
-\r
-SFR(RCAP2L, 0xCA); // Timer 2 Capture LSB.\r
-SFR(RCAP2H, 0xCB); // Timer 2 Capture MSB.\r
-SFR(TL2,    0xCC); // Timer 2 LSB.\r
-SFR(TH2,    0xCD); // Timer 2 MSB.\r
-\r
-SFR(PSW, 0xD0); // Program Status Word.\r
-   SBIT(CY,  0xD0, 7); // Carry Flag.\r
-   SBIT(AC,  0xD0, 6); // Auxiliary Carry Flag.\r
-   SBIT(F0,  0xD0, 5); // User-Defined Flag.\r
-   SBIT(RS1, 0xD0, 4); // Register Bank Select 1.\r
-   SBIT(RS0, 0xD0, 3); // Register Bank Select 0.\r
-   SBIT(OV,  0xD0, 2); // Overflow Flag.\r
-   SBIT(F1,  0xD0, 1); // User-Defined Flag.\r
-   SBIT(P,   0xD0, 0); // Parity Flag.\r
-\r
-SFR(DMAL,   0xD2); // DMA mode address pointer low.\r
-SFR(DMAH,   0xD3); // DMA mode address pointer high.\r
-SFR(DMAP,   0xD4); // DMA mode address pointer page. (?)\r
-SFR(PLLCON, 0xD7); // PLL Control Register.\r
-\r
-SFR(PSMCON, 0xDF); // Power supply monitor.\r
-    #define CMPD  0x40 // DVDD Comparator Bit.\r
-    #define PSMI  0x20 // Power Supply Monitor Interrupt Bit.\r
-    #define TPD1  0x10 // DVDD Trip Point Selection Bit 2.\r
-    #define TPD0  0x08 // DVDD Trip Point Selection Bit 1.\r
-    #define PSMEN 0x01 // Power Supply Monitor Enable Bit.\r
-\r
-SFR(ACC, 0xE0); // Accumulator\r
-   SBIT(ACC_0, 0xE0, 0); // Accumulator bit 0.\r
-   SBIT(ACC_1, 0xE0, 1); // Accumulator bit 1.\r
-   SBIT(ACC_2, 0xE0, 2); // Accumulator bit 2.\r
-   SBIT(ACC_3, 0xE0, 3); // Accumulator bit 3.\r
-   SBIT(ACC_4, 0xE0, 4); // Accumulator bit 4.\r
-   SBIT(ACC_5, 0xE0, 5); // Accumulator bit 5.\r
-   SBIT(ACC_6, 0xE0, 6); // Accumulator bit 6.\r
-   SBIT(ACC_7, 0xE0, 7); // Accumulator bit 7.\r
-\r
-SFR(I2CCON, 0xE8); // I2C Control Register\r
-    // Master mode\r
-    SBIT(MDO,    0xE8, 7); // I2C Software Master Data Output Bit.\r
-    SBIT(MDE,    0xE8, 6); // I2C Software Master Data Output Enable Bit.\r
-    SBIT(MCO,    0xE8, 5); // I2C Software Master Clock Output Bit.\r
-    SBIT(MDI,    0xE8, 4); // I2C Software Master Data Input Bit.\r
-    // Slave mode\r
-    SBIT(I2CSI,  0xE8, 7); // I2C Stop Interrupt Enable Bit.\r
-    SBIT(I2CGC,  0xE8, 6); // I2C General Call Status Bit.\r
-    SBIT(I2CID1, 0xE8, 5); // I2C Interrupt Decode Bit 2.\r
-    SBIT(I2CID0, 0xE8, 4); // I2C Interrupt Decode Bit 1.\r
-    SBIT(I2CM,   0xE8, 3); // I2C Master/Slave Mode Bit.\r
-    SBIT(I2CRS,  0xE8, 2); // I2C Reset Bit.\r
-    SBIT(I2CTX,  0xE8, 1); // I2C Direction Transfer Bit.\r
-    SBIT(I2CI,   0xE8, 0); // I2C Interrupt Bit.\r
-\r
-SFR(B,   0xF0); // B Register\r
-   SBIT(B_0, 0xF0, 0); // Register B bit 0.\r
-   SBIT(B_1, 0xF0, 1); // Register B bit 1.\r
-   SBIT(B_2, 0xF0, 2); // Register B bit 2.\r
-   SBIT(B_3, 0xF0, 3); // Register B bit 3.\r
-   SBIT(B_4, 0xF0, 4); // Register B bit 4.\r
-   SBIT(B_5, 0xF0, 5); // Register B bit 5.\r
-   SBIT(B_6, 0xF0, 6); // Register B bit 6.\r
-   SBIT(B_7, 0xF0, 7); // Register B bit 7.\r
-\r
-SFR(ADCCON1,  0xEF); //ADC Control SFR 1\r
-       //WARNING: bit 7 is named MD1 in the datasheet, but that name is already used.\r
-    #define MD      0x80 // The mode bit selects the active operating mode of the ADC.\r
-    #define EXT_REF 0x40 // Set by the user to select an external reference.\r
-    #define CK1     0x20 // The ADC clock divide bit 1.\r
-    #define CK0     0x10 // The ADC clock divide bit 0.\r
-    #define AQ1     0x08 // ADC acquisition select bit 1.\r
-    #define AQ0     0x04 // ADC acquisition select bit 0.\r
-    #define T2C     0x02 // The Timer 2 conversion bit.\r
-    #define EXC     0x01 // The external trigger enable bit.\r
-\r
-SFR(ADCCON2,  0xD8); // ADC Control SFR 2.\r
-    SBIT(ADCI,  0xD8, 7); // ADC Interrupt Bit.\r
-    SBIT(DMA,   0xD8, 6); // DMA Mode Enable Bit.\r
-    SBIT(CCONV, 0xD8, 5); // Continuous Conversion Bit.\r
-    SBIT(SCONV, 0xD8, 4); // Single Conversion Bit.\r
-    SBIT(CS3,   0xD8, 3); // Channel Selection Bit 4.\r
-    SBIT(CS2,   0xD8, 2); // Channel Selection Bit 3.\r
-    SBIT(CS1,   0xD8, 1); // Channel Selection Bit 2.\r
-    SBIT(CS0,   0xD8, 0); // Channel Selection Bit 1.\r
-\r
-SFR(ADCCON3,  0xF5); //ADC Control SFR 3\r
-    #define BUSY    0x80 // ADC Busy Status Bit.\r
-    #define AVGS1   0x20 // Number of Average Selection Bit 2.\r
-    #define AVGS0   0x10 // Number of Average Selection Bit 1.\r
-    #define TYPICAL 0x02 // Calibration Type Select Bit.\r
-    #define SCAL    0x01 // Start Calibration Cycle Bit.\r
-\r
-SFR(ADCDATAL, 0xD9); // ADC Result byte low.\r
-SFR(ADCDATAH, 0xDA); // ADC Result byte high.  WARNING: bits 4 to 7 are the ADC channel!\r
-SFR(ADCOFSL,  0xF1); // Offset calibration coefficient byte (low).\r
-SFR(ADCOFSH,  0xF2); // Offset calibration coefficient byte (high).\r
-SFR(ADCGAINL, 0xF3); // Gain calibration coefficient byte (low).\r
-SFR(ADCGAINH, 0xF4); // Gain calibration coefficient byte (high).\r
-\r
-SFR(SPIDAT, 0xF7); // SPI Data Register.\r
-\r
-SFR(SPICON, 0xF8); // SPI Control Register.\r
-    SBIT(ISPI, 0xF8, 7); // SPI Interrupt Bit.\r
-    SBIT(WCOL, 0xF8, 6); // Write Collision Error Bit.\r
-    SBIT(SPE,  0xF8, 5); // SPI Interface Enable Bit.\r
-    SBIT(SPIM, 0xF8, 4); // SPI Master/Slave Mode Select Bit.\r
-    SBIT(CPOL, 0xF8, 3); // Clock Polarity Select Bit.\r
-    SBIT(CPHA, 0xF8, 2); // Clock Phase Select Bit.\r
-    SBIT(SPR1, 0xF8, 1); // SPI Bit Rate Select Bit 2.\r
-    SBIT(SPR0, 0xF8, 0); // SPI Bit Rate Select Bit 1.\r
-\r
-SFR(DAC0L,  0xF9); // DAC0 Data Low Byte.\r
-SFR(DAC0H,  0xFA); // DAC0 Data High Byte.\r
-SFR(DAC1L,  0xFB); // DAC1 Data Low Byte.\r
-SFR(DAC1H,  0xFC); // DAC1 Data High Byte.\r
-SFR(DACCON, 0xFD); // DAC Control Register.\r
-    #define MODE 0x80 // 8/12 bit selection.\r
-    #define RNG1 0x40 // DAC1 Range Select Bit.\r
-    #define RNG0 0x20 // DAC0 Range Select Bit.\r
-    #define CLR1 0x10 // DAC1 Clear Bit.\r
-    #define CLR0 0x08 // DAC0 Clear Bit.\r
-    #define SYNC 0x04 // DAC0/1 Update Synchronization Bit.\r
-    #define PD1  0x02 // DAC1 Power-Down Bit.\r
-    #define PD0  0x01 // DAC0 Power-Down Bit.\r
-\r
-#endif //REG_ADUC84X_H\r
+/*-------------------------------------------------------------------------
+   Register Declarations for Analog Devices ADuC841/ADuC842/ADuC843
+   (Based on datasheet Rev 0, 11/2003 )
+
+   Written By -  Jesus Calvino-Fraga / jesusc at ece.ubc.ca (March 2007)
+
+   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, MA  02111-1307 USA
+
+   In other words, you are welcome to use, share and improve this program
+   You are forbidden to forbid anyone else to use, share and improve
+   what you give them.   Help stamp out software-hoarding!
+-------------------------------------------------------------------------*/
+#ifndef REG_ADUC84X_H
+#define REG_ADUC84X_H
+
+#include <compiler.h>
+
+SFR(CFG841, 0xAF); // ADuC841 Configuration SFR.
+SFR(CFG842, 0xAF); // ADuC842/ADuC843 Configuration SFR.
+       //For the two SFRs above these are the bits.  Warning: some are different for
+       //the ADuC841 and ADuC842/ADuC843.  Check the datasheet!
+    #define EPM2   0x10 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 2.
+    #define EPM1   0x08 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 1.
+    #define EPM0   0x04 // Flash/EE Controller and PWM Clock Frequency Configuration Bit 0.
+    #define EXSP   0x80 // Extended SP Enable.
+    #define PWPO   0x40 // PWM Pin Out Selection.
+    #define DBUF   0x20 // DAC Output Buffer.
+    #define EXTCLK 0x10 // Set by the user to 1 to select an external clock input on P3.4.
+    #define MSPI   0x02 // Set to 1 by the user to move the SPI functionality of.
+    #define XRAMEN 0x01 // XRAM Enable Bit.
+
+SFR(SP,    0x81); // Stack Pointer.
+SFR(SPH,   0xB7); // Stack pointer high.
+
+SFR(DPL,   0x82); // Data Pointer Low.
+SFR(DPH,   0x83); // Data Pointer High.
+SFR(DPP,   0x84); // Data Pointer Page Byte.
+SFR(DPCON, 0xA7); // Data Pointer Control SFR.
+
+SFR(PCON, 0x87); // Power Control.
+   #define SMOD   0x80 //Double UART Baud Rate.
+   #define SERIPD 0x40 //I2C/SPI Power-Down Interrupt Enable.
+   #define INT0PD 0x20 //INT0 Power-Down Interrupt Enable.
+   #define ALEOFF 0x10 //Disable ALE Output.
+   #define GF1    0x08 //General-Purpose Flag Bit.
+   #define GF0    0x04 //General-Purpose Flag Bit.
+   #define PD     0x02 //Power-Down Mode Enable.
+   #define IDL    0x01 //Idle Mode Enable.
+
+SFR(TCON, 0x88); // Timer/Counter Control.
+    SBIT(TF1, 0x88, 7); // Timer 1 overflow flag.
+    SBIT(TR1, 0x88, 6); // Timer 1 run control flag.
+    SBIT(TF0, 0x88, 5); // Timer 0 overflow flag.
+    SBIT(TR0, 0x88, 4); // Timer 0 run control flag.
+    SBIT(IE1, 0x88, 3); // Interrupt 1 flag.
+    SBIT(IT1, 0x88, 2); // Interrupt 1 type control bit.
+    SBIT(IE0, 0x88, 1); // Interrupt 0 flag.
+    SBIT(IT0, 0x88, 0); // Interrupt 0 type control bit.
+
+SFR(TMOD, 0x89); // Timer/Counter Mode Control.
+   #define GATE1 0x80 // External enable for timer 1.
+   #define C_T1  0x40 // Timer or counter select for timer 1.
+   #define M1_1  0x20 // Operation mode bit 1 for timer 1.
+   #define M0_1  0x10 // Operation mode bit 0 for timer 1.
+   #define GATE0 0x08 // External enable for timer 0.
+   #define C_T0  0x04 // Timer or counter select for timer 0.
+   #define M1_0  0x02 // Operation mode bit 1 for timer 0.
+   #define M0_0  0x01 // Operation mode bit 0 for timer 0.
+
+SFR(TL0, 0x8A); // Timer 0 LSB.
+SFR(TL1, 0x8B); // Timer 1 LSB.
+SFR(TH0, 0x8C); // Timer 0 MSB.
+SFR(TH1, 0x8D); // Timer 1 MSB.
+
+SFR(P0, 0x80); // Port 0
+    SBIT(P0_0, 0x80, 0); // Port 0 bit 0.
+    SBIT(P0_1, 0x80, 1); // Port 0 bit 1.
+    SBIT(P0_2, 0x80, 2); // Port 0 bit 2.
+    SBIT(P0_3, 0x80, 3); // Port 0 bit 3.
+    SBIT(P0_4, 0x80, 4); // Port 0 bit 4.
+    SBIT(P0_5, 0x80, 5); // Port 0 bit 5.
+    SBIT(P0_6, 0x80, 6); // Port 0 bit 6.
+    SBIT(P0_7, 0x80, 7); // Port 0 bit 7.
+
+SFR(P1, 0x90); // Port 1
+    SBIT(P1_0, 0x90, 0); // Port 1 bit 0.
+    SBIT(P1_1, 0x90, 1); // Port 1 bit 1.
+    SBIT(P1_2, 0x90, 2); // Port 1 bit 2.
+    SBIT(P1_3, 0x90, 3); // Port 1 bit 3.
+    SBIT(P1_4, 0x90, 4); // Port 1 bit 4.
+    SBIT(P1_5, 0x90, 5); // Port 1 bit 5.
+    SBIT(P1_6, 0x90, 6); // Port 1 bit 6.
+    SBIT(P1_7, 0x90, 7); // Port 1 bit 7.
+    // Alternate names
+    SBIT(T2EX, 0x90, 1); //Capture/reload trigger for Counter 2.
+    SBIT(T2,   0x90, 0); //Input to Timer/Counter 2.
+
+SFR(P2, 0xA0); // Port 2
+   SBIT(P2_0, 0xA0, 0); // Port 2 bit 0.
+   SBIT(P2_1, 0xA0, 1); // Port 2 bit 1.
+   SBIT(P2_2, 0xA0, 2); // Port 2 bit 2.
+   SBIT(P2_3, 0xA0, 3); // Port 2 bit 3.
+   SBIT(P2_4, 0xA0, 4); // Port 2 bit 4.
+   SBIT(P2_5, 0xA0, 5); // Port 2 bit 5.
+   SBIT(P2_6, 0xA0, 6); // Port 2 bit 6.
+   SBIT(P2_7, 0xA0, 7); // Port 2 bit 7.
+
+SFR(P3, 0xB0); // Port 3
+   SBIT(P3_0, 0xB0, 0); // Port 3 bit 0.
+   SBIT(P3_1, 0xB0, 1); // Port 3 bit 1.
+   SBIT(P3_2, 0xB0, 2); // Port 3 bit 2.
+   SBIT(P3_3, 0xB0, 3); // Port 3 bit 3.
+   SBIT(P3_4, 0xB0, 4); // Port 3 bit 4.
+   SBIT(P3_5, 0xB0, 5); // Port 3 bit 5.
+   SBIT(P3_6, 0xB0, 6); // Port 3 bit 6.
+   SBIT(P3_7, 0xB0, 7); // Port 3 bit 7.
+   // Alternate names.
+   SBIT(RXD,  0xB0, 0);
+   SBIT(TXD,  0xB0, 1);
+   SBIT(INT0, 0xB0, 2);
+   SBIT(INT1, 0xB0, 3);
+   SBIT(T0,   0xB0, 4);
+   SBIT(T1,   0xB0, 5);
+   SBIT(WR,   0xB0, 6);
+   SBIT(RD,   0xB0, 7);
+
+SFR(I2CADD,  0x9B); // I2C Address Register 1.
+SFR(I2CADD1, 0x91); // I2C Address Register 2.
+SFR(I2CADD2, 0x92); // I2C Address Register 3.
+SFR(I2CADD3, 0x93); // I2C Address Register 4.
+SFR(I2CDAT,  0x9A); // I2C Data Register.
+
+SFR(SCON, 0x98); // Serial Port Control.
+   SBIT(SM0, 0x98, 7); // Serial Port Mode Bit 0.
+   SBIT(SM1, 0x98, 6); // Serial Port Mode Bit 1.
+   SBIT(SM2, 0x98, 5); // Serial Port Mode Bit 2.
+   SBIT(REN, 0x98, 4); // Enables serial reception.
+   SBIT(TB8, 0x98, 3); // The 9th data bit that will be transmitted in Modes 2 and 3.
+   SBIT(RB8, 0x98, 2); // In Modes 2 and 3, the 9th data bit that was received.
+   SBIT(TI,  0x98, 1); // Transmit interrupt flag.
+   SBIT(RI,  0x98, 0); // Receive interrupt flag.
+
+SFR(SBUF, 0x99); // Serial Data Buffer.
+
+//For these two, you may want to check page 68 of the datasheet...
+SFR(T3FD,  0x9D);       // Fractional divider ratio.
+SFR(T3CON, 0x9E);       // T3CON is the baud rate control SFR, allowing Timer 3 to be
+                        // used to set up the UART baud rate, and setting up the binary
+                        // divider (DIV).
+#define T3BAUDEN 0x80   // T3 UART BAUD Enable.
+#define DIV2 0x04       // Binary Divider Factor bit 3.
+#define DIV1 0x02       // Binary Divider Factor bit 2.
+#define DIV0 0x01       // Binary Divider Factor bit 1.
+
+SFR(TIMECON, 0xA1); // TIC Control Register.
+    #define TFH  0x40 // Twenty-Four Hour Select Bit.
+    #define ITS1 0x20 // Interval Timebase Selection Bit 1.
+    #define ITS0 0x10 // Interval Timebase Selection Bit 1.
+    #define STI  0x08 // Single Time Interval Bit.
+    #define TII  0x04 // TIC Interrupt Bit.
+    #define TIEN 0x02 // Time Interval Enable Bit.
+    #define TCEN 0x01 // Time Clock Enable Bit.
+
+SFR(HTHSEC, 0xA2); // Hundredths Seconds Time Register.
+SFR(SEC,    0xA3); // Seconds Time Register.
+SFR(MIN,    0xA4); // Minutes Time Register.
+SFR(HOUR,   0xA5); // Hours Time Register.
+SFR(INTVAL, 0xA6); // User Time Interval Select Register.
+
+SFR(IE,  0xA8); // Interrupt Enable.
+   SBIT(EA,   0xA8, 7); // Global Interrupt Enable.
+   SBIT(EADC, 0xA8, 6); // ADC Interrupt Enable.
+   SBIT(ET2,  0xA8, 5); // Timer 2 Interrupt Enable.
+   SBIT(ES,   0xA8, 4); // Serial Interrupt Enable.
+   SBIT(ET1,  0xA8, 3); // Timer 1 Interrupt Enable.
+   SBIT(EX1,  0xA8, 2); // External 1 Interrupt Enable.
+   SBIT(ET0,  0xA8, 1); // Timer 0 Interrupt Enable.
+   SBIT(EX0,  0xA8, 0); // External 0 Interrupt Enable.
+
+SFR(IEIP2, 0xA9); // Secondary Interrupt Enable Register
+    #define PTI   0x40 // Priority for time interval interrupt.
+    #define PPSM  0x20 // Priority for power supply monitor interrupt.
+    #define PSI2  0x10 // Priority for SPI/I2C interrupt. Same name as bit in IP???
+    #define ETI   0x04 // Enable time interval counter interrupts.
+    #define EPSMI 0x02 // Enable power supply monitor interrupts.
+    #define ESI   0x01 // Enable SPI or I2C serial port interrupts.
+
+SFR(PWMCON, 0xAE); //PWM control.
+    #define SNGL  0x80 // Turns off PMW output at P2.6 or P3.4.
+    #define MD2   0x40 // PWM Mode Bit 2.
+    #define MD1   0x20 // PWM Mode Bit 2.
+    #define MD0   0x10 // PWM Mode Bit 2.
+    #define CDIV1 0x08 // PWM Clock Divider bit 1.
+    #define CDIV0 0x04 // PWM Clock Divider bit 1.
+    #define CSEL1 0x02 // PWM Clock Select bit 1. (Typo in datasheet???)
+    #define CSEL0 0x01 // PWM Clock Select bit 0.
+
+SFR(PWM0L, 0xB1); // PWM 0 duty cycle low.
+SFR(PWM0H, 0xB2); // PWM 0 duty cycle high.
+SFR(PWM1L, 0xB3); // PWM 1 duty cycle low.
+SFR(PWM1H, 0xB4); // PWM 1 duty cycle high.
+
+SFR(IP,  0xB8); // Interrupt Priority Reg.
+   SBIT(PSI,  0xB8, 7); // Priority for SPI/I2C interrupt.
+   SBIT(PADC, 0xB8, 6); // ADC interrupt priority bit.
+   SBIT(PT2,  0xB8, 5); // Timer 2 interrupt priority bit.
+   SBIT(PS,   0xB8, 4); // Serial Port interrupt priority bit.
+   SBIT(PT1,  0xB8, 3); // Timer 1 interrupt priority bit.
+   SBIT(PX1,  0xB8, 2); // External interrupt 1 priority bit.
+   SBIT(PT0,  0xB8, 1); // Timer 0 interrupt priority bit.
+   SBIT(PX0,  0xB8, 0); // External interrupt 0 priority bit.
+
+SFR(ECON,   0xB9); // Flash/EE Memory Control SFR.
+SFR(EDATA1, 0xBC); // EE page data byte 1.
+SFR(EDATA2, 0xBD); // EE page data byte 2.
+SFR(EDATA3, 0xBE); // EE page data byte 3.
+SFR(EDATA4, 0xBF); // EE page data byte 4.
+SFR(EADRL,  0xC6); // EE address low.
+SFR(EADRH,  0xC7); // EE address high.
+
+SFR(WDCON, 0xC0); //Watchdog Timer Control Register.
+    SBIT(PRE3, 0xc0, 7); // Timeout period bit 4.
+    SBIT(PRE2, 0xc0, 6); // Timeout period bit 3.
+    SBIT(PRE1, 0xc0, 5); // Timeout period bit 2.
+    SBIT(PRE0, 0xc0, 4); // Timeout period bit 1.
+    SBIT(WDIR, 0xc0, 3); // Watchdog Interrupt Response Enable Bit.
+    SBIT(WDS,  0xc0, 2); // Watchdog Status Bit.
+    SBIT(WDE,  0xc0, 1); // Watchdog Enable Bit.
+    SBIT(WDWR, 0xc0, 0); // Watchdog Write Enable Bit.
+
+SFR(CHIPID, 0xC2); // System Self-Identification? WARNING: No description in the datasheet.
+
+SFR(T2CON, 0xC8); // Timer / Counter 2 Control.
+   SBIT(TF2,   0xC8, 7); // Timer 2 overflow flag.
+   SBIT(EXF2,  0xC8, 6); // Timer 2 external flag.
+   SBIT(RCLK,  0xC8, 5); // Receive clock flag.
+   SBIT(TCLK,  0xC8, 4); // Transmit clock flag.
+   SBIT(EXEN2, 0xC8, 3); // Timer 2 external enable flag.
+   SBIT(TR2,   0xC8, 2); // Start/stop control for timer 2.
+   SBIT(CNT2,  0xC8, 1); // Timer or coutner select.
+   SBIT(CAP2,  0xC8, 0); // Capture/reload flag.
+
+SFR(RCAP2L, 0xCA); // Timer 2 Capture LSB.
+SFR(RCAP2H, 0xCB); // Timer 2 Capture MSB.
+SFR(TL2,    0xCC); // Timer 2 LSB.
+SFR(TH2,    0xCD); // Timer 2 MSB.
+
+SFR(PSW, 0xD0); // Program Status Word.
+   SBIT(CY,  0xD0, 7); // Carry Flag.
+   SBIT(AC,  0xD0, 6); // Auxiliary Carry Flag.
+   SBIT(F0,  0xD0, 5); // User-Defined Flag.
+   SBIT(RS1, 0xD0, 4); // Register Bank Select 1.
+   SBIT(RS0, 0xD0, 3); // Register Bank Select 0.
+   SBIT(OV,  0xD0, 2); // Overflow Flag.
+   SBIT(F1,  0xD0, 1); // User-Defined Flag.
+   SBIT(P,   0xD0, 0); // Parity Flag.
+
+SFR(DMAL,   0xD2); // DMA mode address pointer low.
+SFR(DMAH,   0xD3); // DMA mode address pointer high.
+SFR(DMAP,   0xD4); // DMA mode address pointer page. (?)
+SFR(PLLCON, 0xD7); // PLL Control Register.
+
+SFR(PSMCON, 0xDF); // Power supply monitor.
+    #define CMPD  0x40 // DVDD Comparator Bit.
+    #define PSMI  0x20 // Power Supply Monitor Interrupt Bit.
+    #define TPD1  0x10 // DVDD Trip Point Selection Bit 2.
+    #define TPD0  0x08 // DVDD Trip Point Selection Bit 1.
+    #define PSMEN 0x01 // Power Supply Monitor Enable Bit.
+
+SFR(ACC, 0xE0); // Accumulator
+   SBIT(ACC_0, 0xE0, 0); // Accumulator bit 0.
+   SBIT(ACC_1, 0xE0, 1); // Accumulator bit 1.
+   SBIT(ACC_2, 0xE0, 2); // Accumulator bit 2.
+   SBIT(ACC_3, 0xE0, 3); // Accumulator bit 3.
+   SBIT(ACC_4, 0xE0, 4); // Accumulator bit 4.
+   SBIT(ACC_5, 0xE0, 5); // Accumulator bit 5.
+   SBIT(ACC_6, 0xE0, 6); // Accumulator bit 6.
+   SBIT(ACC_7, 0xE0, 7); // Accumulator bit 7.
+
+SFR(I2CCON, 0xE8); // I2C Control Register
+    // Master mode
+    SBIT(MDO,    0xE8, 7); // I2C Software Master Data Output Bit.
+    SBIT(MDE,    0xE8, 6); // I2C Software Master Data Output Enable Bit.
+    SBIT(MCO,    0xE8, 5); // I2C Software Master Clock Output Bit.
+    SBIT(MDI,    0xE8, 4); // I2C Software Master Data Input Bit.
+    // Slave mode
+    SBIT(I2CSI,  0xE8, 7); // I2C Stop Interrupt Enable Bit.
+    SBIT(I2CGC,  0xE8, 6); // I2C General Call Status Bit.
+    SBIT(I2CID1, 0xE8, 5); // I2C Interrupt Decode Bit 2.
+    SBIT(I2CID0, 0xE8, 4); // I2C Interrupt Decode Bit 1.
+    SBIT(I2CM,   0xE8, 3); // I2C Master/Slave Mode Bit.
+    SBIT(I2CRS,  0xE8, 2); // I2C Reset Bit.
+    SBIT(I2CTX,  0xE8, 1); // I2C Direction Transfer Bit.
+    SBIT(I2CI,   0xE8, 0); // I2C Interrupt Bit.
+
+SFR(B,   0xF0); // B Register
+   SBIT(B_0, 0xF0, 0); // Register B bit 0.
+   SBIT(B_1, 0xF0, 1); // Register B bit 1.
+   SBIT(B_2, 0xF0, 2); // Register B bit 2.
+   SBIT(B_3, 0xF0, 3); // Register B bit 3.
+   SBIT(B_4, 0xF0, 4); // Register B bit 4.
+   SBIT(B_5, 0xF0, 5); // Register B bit 5.
+   SBIT(B_6, 0xF0, 6); // Register B bit 6.
+   SBIT(B_7, 0xF0, 7); // Register B bit 7.
+
+SFR(ADCCON1,  0xEF); //ADC Control SFR 1
+       //WARNING: bit 7 is named MD1 in the datasheet, but that name is already used.
+    #define MD      0x80 // The mode bit selects the active operating mode of the ADC.
+    #define EXT_REF 0x40 // Set by the user to select an external reference.
+    #define CK1     0x20 // The ADC clock divide bit 1.
+    #define CK0     0x10 // The ADC clock divide bit 0.
+    #define AQ1     0x08 // ADC acquisition select bit 1.
+    #define AQ0     0x04 // ADC acquisition select bit 0.
+    #define T2C     0x02 // The Timer 2 conversion bit.
+    #define EXC     0x01 // The external trigger enable bit.
+
+SFR(ADCCON2,  0xD8); // ADC Control SFR 2.
+    SBIT(ADCI,  0xD8, 7); // ADC Interrupt Bit.
+    SBIT(DMA,   0xD8, 6); // DMA Mode Enable Bit.
+    SBIT(CCONV, 0xD8, 5); // Continuous Conversion Bit.
+    SBIT(SCONV, 0xD8, 4); // Single Conversion Bit.
+    SBIT(CS3,   0xD8, 3); // Channel Selection Bit 4.
+    SBIT(CS2,   0xD8, 2); // Channel Selection Bit 3.
+    SBIT(CS1,   0xD8, 1); // Channel Selection Bit 2.
+    SBIT(CS0,   0xD8, 0); // Channel Selection Bit 1.
+
+SFR(ADCCON3,  0xF5); //ADC Control SFR 3
+    #define BUSY    0x80 // ADC Busy Status Bit.
+    #define AVGS1   0x20 // Number of Average Selection Bit 2.
+    #define AVGS0   0x10 // Number of Average Selection Bit 1.
+    #define TYPICAL 0x02 // Calibration Type Select Bit.
+    #define SCAL    0x01 // Start Calibration Cycle Bit.
+
+SFR(ADCDATAL, 0xD9); // ADC Result byte low.
+SFR(ADCDATAH, 0xDA); // ADC Result byte high.  WARNING: bits 4 to 7 are the ADC channel!
+SFR(ADCOFSL,  0xF1); // Offset calibration coefficient byte (low).
+SFR(ADCOFSH,  0xF2); // Offset calibration coefficient byte (high).
+SFR(ADCGAINL, 0xF3); // Gain calibration coefficient byte (low).
+SFR(ADCGAINH, 0xF4); // Gain calibration coefficient byte (high).
+
+SFR(SPIDAT, 0xF7); // SPI Data Register.
+
+SFR(SPICON, 0xF8); // SPI Control Register.
+    SBIT(ISPI, 0xF8, 7); // SPI Interrupt Bit.
+    SBIT(WCOL, 0xF8, 6); // Write Collision Error Bit.
+    SBIT(SPE,  0xF8, 5); // SPI Interface Enable Bit.
+    SBIT(SPIM, 0xF8, 4); // SPI Master/Slave Mode Select Bit.
+    SBIT(CPOL, 0xF8, 3); // Clock Polarity Select Bit.
+    SBIT(CPHA, 0xF8, 2); // Clock Phase Select Bit.
+    SBIT(SPR1, 0xF8, 1); // SPI Bit Rate Select Bit 2.
+    SBIT(SPR0, 0xF8, 0); // SPI Bit Rate Select Bit 1.
+
+SFR(DAC0L,  0xF9); // DAC0 Data Low Byte.
+SFR(DAC0H,  0xFA); // DAC0 Data High Byte.
+SFR(DAC1L,  0xFB); // DAC1 Data Low Byte.
+SFR(DAC1H,  0xFC); // DAC1 Data High Byte.
+SFR(DACCON, 0xFD); // DAC Control Register.
+    #define MODE 0x80 // 8/12 bit selection.
+    #define RNG1 0x40 // DAC1 Range Select Bit.
+    #define RNG0 0x20 // DAC0 Range Select Bit.
+    #define CLR1 0x10 // DAC1 Clear Bit.
+    #define CLR0 0x08 // DAC0 Clear Bit.
+    #define SYNC 0x04 // DAC0/1 Update Synchronization Bit.
+    #define PD1  0x02 // DAC1 Power-Down Bit.
+    #define PD0  0x01 // DAC0 Power-Down Bit.
+
+#endif //REG_ADUC84X_H