While I'm here attached is a modified copy of the w7100.h file in
SDCC. I sent a copy to the author some time back but haven't heard anything.
I don't quarantee this is entirely correct, but it at least builds and runs
on the W7100.
Peter Van Epp
/*-------------------------------------------------------------------------
Register Declarations for WIZnet's W7100
(Based on Internet Embedded MCU W7100 Datasheet Version 0.9 Beta)
Written By - Jesus Calvino-Fraga / jesusc at ece.ubc.ca (December 2009)
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
Feb 2010 - Peter Van Epp - Corrected a typo in a #define
Jan 2010 - Peter Van Epp - reformatted to match the example w7100.h file
from the Wiznet site, added some comments and corrected a
couple of bugs.
-------------------------------------------------------------------------*/
#ifndef REG_W7100_H
#define REG_W7100_H
#include <compiler.h>
SFR(P0, 0x80); /* GPIO port 0 */
SBIT(P0_0, 0x80, 0);
SBIT(P0_1, 0x80, 1);
SBIT(P0_2, 0x80, 2);
SBIT(P0_3, 0x80, 3);
SBIT(P0_4, 0x80, 4);
SBIT(P0_5, 0x80, 5);
SBIT(P0_6, 0x80, 6);
SBIT(P0_7, 0x80, 7);
SFR(SP, 0x81); /* Stack pointer */
SFR16(DPTR0, 0x82); /* Data Pointer Register 0 */
SFR(DPL0, 0x82); /* Data Pointer Register 0 low */
SFR(DPH0, 0x83); /* Data Pointer Register 0 high */
SFR16(DPTR1, 0x84); /* Data Pointer Register 1 */
SFR(DPL1, 0x84); /* Data Pointer Register 1 low */
SFR(DPH1, 0x85); /* Data Pointer Register 1 high */
SFR(DPS, 0x86); /* Data Pointer Select Register */
#define SEL 0x01 /* DPTR register select */
#define TSL 0x20 /* Toggle select enable */
#define ID0 0x40 /* DPTR0, DPTR1 Operations bit 0 */
#define ID1 0x80 /* DPTR1, DPTR1 Operations bit 1 */
SFR(PCON, 0x87); /* Power Configuration Register */
#define PWE 0x10 /* Program Code Memory Write Enable Bit */
#define SMOD1 0x40 /* unimplemented? */
#define SMOD0 0x80 /* Baud rate select bit */
/* 1 clock from timer1 ovflow */
/* 0 clock from timer1 ovflow / 2 */
SFR(TCON, 0x88); /* Timer0, 1 configuration register. */
SBIT(IT0, 0x88, 0); /* INT0 mode: level (at 0) edge (at 1) */
SBIT(IE0, 0x88, 1); /* INT0 interrupt flag. */
SBIT(IT1, 0x88, 2); /* INT1 mode: level (at 0)/edge (at 1) */
SBIT(IE1, 0x88, 3); /* INT1 interrupt flag. */
SBIT(TR0, 0x88, 4); /* Timer 0 run control bit */
/* 0: Disabled. */
/* 1: Enabled. */
SBIT(TF0, 0x88, 5); /* Timer 0 interrupt (overflow) flag. */
SBIT(TR1, 0x88, 6); /* Timer 1 run control bit */
/* 0: Disabled. */
/* 1: Enabled. */
SBIT(TF1, 0x88, 7); /* Timer 1 interrupt (overflow) flag. */
SFR(TMOD, 0x89); /* Timer 0 and 1 mode control register. */
#define T0_M0 0x01 /* M1 M0 Mode Description */
#define T0_M1 0x02 /* 0 0 0 8 bit timer, / 32 prescaler */
/* 0 1 1 16 bit timer thx and tlx */
/* 1 0 2 tlx 8bit counter reloads tlh */
/* 1 1 3 tl0 8 bit th0 8bit t1 frozen */
#define T0_CT 0x04 /* 0 - timer 1 - counter */
#define T0_GATE 0x08 /* 0 - TRx enables 1 gate pin enables */
#define T1_M0 0x10 /* Same as for timer 0 above */
#define T1_M1 0x20
#define T1_CT 0x40
#define T1_GATE 0x80
SFR(TL0, 0x8A); /* Counter register of timer 0 low. */
SFR(TL1, 0x8B); /* Counter register of timer 1 low. */
SFR(TH0, 0x8C); /* Counter register of timer 0 high. */
SFR(TH1, 0x8D); /* Counter register of timer 1 high. */
SFR(CKCON, 0x8E); /* Clock Control Register */
#define MD0 0x01 /* Memory wait stretch bit 0 */
#define MD1 0x02 /* Memory wait stretch bit 1 */
#define MD2 0x04 /* Memory wait stretch bit 2 */
/* currently unused */
#define WD0 0x40 /* Watchdog interval bit 0 */
#define WD1 0x80 /* Watchdog interval bit 1 */
SFR(P1, 0x90); /* GPIO port 1 */
SBIT(P1_0, 0x90, 0);
SBIT(P1_1, 0x90, 1);
SBIT(P1_2, 0x90, 2);
SBIT(P1_3, 0x90, 3);
SBIT(P1_4, 0x90, 4);
SBIT(P1_5, 0x90, 5);
SBIT(P1_6, 0x90, 6);
SBIT(P1_7, 0x90, 7);
SFR(EIF, 0x91); /* Extended Interrupt Flag Register. */
#define INT2F 0x01 /* INT2 interrupt flag. */
/* Must be cleared by software. */
#define INT3F 0x02 /* INT3 interrupt flag. */
/* Must be cleared by software. */
#define INT4F 0x04 /* Must be set to '0'. */
#define INT5F 0x08 /* TCPIPCore Interrupt flag. */
/* Must be cleared by software. */
SFR(WTST, 0x92); /* Program Code Memory Wait States */
SBIT(WTST0, 0x92, 0); /* Wait States Register bit 0 */
SBIT(WTST1, 0x92, 1); /* Wait States Register bit 1 */
SBIT(WTST2, 0x92, 2); /* Wait States Register bit 2 */
SFR(DPX0, 0x93); /* Data Pointer Extended Register low */
SFR(DPX1, 0x95); /* Data Pointer Extended Register high */
SFR(SCON, 0x98); /* UART Configuration Register. */
SBIT(RI, 0x98, 0); /* UART receiver interrupt flag. */
SBIT(TI, 0x98, 1); /* UART transmitter interrupt flag. */
SBIT(RB8, 0x98, 2); /* The 9th received data bit in */
/* Modes 2 and 3. */
SBIT(TB8, 0x98, 3); /* The 9th transmitted data bit in */
/* Modes 2 and 3. */
SBIT(REN, 0x98, 4); /* Enable/Disable serial receive. */
SBIT(SM2, 0x98, 5); /* Enable a multiprocessor sync */
/* communication feature. */
SBIT(SM1, 0x98, 6); /* SM0,SM1 set baud rate: */
SBIT(SM0, 0x98, 7); /* 0 0 - sync shift register baud: fosc/12 */
/* 0 1 - 8 bit uart baud: timer1/2 overflow */
/* 1 0 - 9 bit uart */
/* SMOD = 1 bsud: fosc/32 */
/* SMOD = 0 bsud: fosc/64 */
/* 1 1 - 9 bit uart baud: timer1/2 overflow */
SFR(SBUF, 0x99); /* UART Buffer Register. */
SFR(P2, 0xA0); /* GPIO port 2 */
SBIT(P2_0, 0xA0, 0);
SBIT(P2_1, 0xA0, 1);
SBIT(P2_2, 0xA0, 2);
SBIT(P2_3, 0xA0, 3);
SBIT(P2_4, 0xA0, 4);
SBIT(P2_5, 0xA0, 5);
SBIT(P2_6, 0xA0, 6);
SBIT(P2_7, 0xA0, 7);
SFR(IE, 0xA8); /* Interrupt Enable Register. */
SBIT(EX0, 0xA8, 0); /* Enable INT0 interrupt. */
SBIT(ET0, 0xA8, 1); /* Enable Timer0 interrupt. */
SBIT(EX1, 0xA8, 2); /* Enable INT1 interrupt. */
SBIT(ET1, 0xA8, 3); /* Enable Timer1 interrupt. */
SBIT(ES, 0xA8, 4); /* Enable UART interrupt. */
SBIT(ET2, 0xA8, 5); /* Enable Timer2 interrupt. */
SBIT(EA, 0xA8, 7); /* Enable global interrupt. */
SFR(P3, 0xB0); /* GPIO port 3 */
SBIT(P3_0, 0xB0, 0);
SBIT(P3_1, 0xB0, 1);
SBIT(P3_2, 0xB0, 2);
SBIT(P3_3, 0xB0, 3);
SBIT(P3_4, 0xB0, 4);
SBIT(P3_5, 0xB0, 5);
SBIT(P3_6, 0xB0, 6);
SBIT(P3_7, 0xB0, 7);
SFR(IP, 0xB8); /* Interrupt Priority Register. */
SBIT(PX0, 0xB8, 0); /* INT0 priority level control. */
SBIT(PT0, 0xB8, 1); /* Timer0 priority level control. */
SBIT(PX1, 0xB8, 2); /* INT1 priority level control. */
SBIT(PT1, 0xB8, 3); /* Timer1 priority level control. */
SBIT(PS, 0xB8, 4); /* UART priority level control. */
SBIT(PT2, 0xB8, 5); /* Timer2 priority level control. */
SFR(TA, 0xC7); /* Timed Access Register. */
/* write 0xAA followd by 0X55 to TA */
/* then write WDCON on the next cycle */
SFR(T2CON, 0xC8); /* Timer 2 Configuration Register. */
SBIT(CPRL2, 0xC8, 0); /* Capture reload 0: auto reload on overflow */
/* if EXEN2 = 0 or RCLK or TCLK is set */
/* if EXEN2 is 1 and RCLK and TCLK unset */
/* then reload on the falling edge of T2EX */
SBIT(CT2, 0xC8, 1); /* Timer/Counter select. */
SBIT(TR2, 0xC8, 2); /* Start/Stop Timer2. */
SBIT(EXEN2, 0xC8, 3); /* Enable T2EX pin functionality. */
SBIT(TCLK, 0xC8, 4); /* Transmit clock enable. */
SBIT(RCLK, 0xC8, 5); /* Receive clock enable. */
SBIT(EXF2, 0xC8, 6); /* Indicates a Falling edge in the */
/* T2EX pin when EXEN2=1. */
SBIT(TF2, 0xC8, 7); /* Timer2 overflow flag. */
SFR(RLDL, 0xCA); /* Capture Registers of Timer 2 low. */
SFR(RLDH, 0xCB); /* Capture Registers of Timer 2 high. */
SFR(TL2, 0xCC); /* Counter Register of Timer 2 low. */
SFR(TH2, 0xCD); /* Counter Register of Timer 2 high. */
SFR(PSW, 0xD0); /* Program Status Word Register. */
SBIT(P, 0xD0, 0); /* Parity flag. */
SBIT(F1, 0xD0, 1); /* General purpose flag 1. */
SBIT(OV, 0xD0, 2); /* Overflow flag. */
SBIT(RS0, 0xD0, 3); /* Register bank select bit 0. */
SBIT(RS1, 0xD0, 4); /* Register bank select bit 1. */
SBIT(F0, 0xD0, 5); /* General purpose flag 0. */
SBIT(AC, 0xD0, 6); /* Auxiliary carry. */
SBIT(CY, 0xD0, 7); /* Carry flag. */
SFR(WDCON, 0xD8); /* Watchdog Control Register */
SBIT(RWT, 0xD8, 0); /* Reset the Watchdog Timer. */
SBIT(EWT, 0xD8, 1); /* Enable the Watchdog Timer reset. */
SBIT(WTRF, 0xD8, 2); /* Watchdog Timer reset Flag. */
SBIT(WDIF, 0xD8, 3); /* Watchdog Interrupt Flag. */
SFR(ACC, 0xE0); /* Accumulator */
SBIT(ACC_0, 0xE0, 0);
SBIT(ACC_1, 0xE0, 1);
SBIT(ACC_2, 0xE0, 2);
SBIT(ACC_3, 0xE0, 3);
SBIT(ACC_4, 0xE0, 4);
SBIT(ACC_5, 0xE0, 5);
SBIT(ACC_6, 0xE0, 6);
SBIT(ACC_7, 0xE0, 7);
SFR(EIE, 0xE8); /* Extended Interrupt Enable Register. */
SBIT(EINT2, 0xE8, 0); /* Enable INT2 Interrupt. */
SBIT(EINT3, 0xE8, 1); /* Enable INT3 Interrupt. */
SBIT(EINT4, 0xE8, 2); /* Must be set to '0'. */
SBIT(EINT5, 0xE8, 3); /* Enable TCPIPCore Interrupt. */
SBIT(EWDI, 0xE8, 4); /* Enable WATCHDOG Interrupt. */
SFR(MXAX, 0xEA); /* Data Pointer Extended Register */
SFR(B, 0xF0); /* Register B */
SBIT(B_0, 0xF0, 0);
SBIT(B_1, 0xF0, 1);
SBIT(B_2, 0xF0, 2);
SBIT(B_3, 0xF0, 3);
SBIT(B_4, 0xF0, 4);
SBIT(B_5, 0xF0, 5);
SBIT(B_6, 0xF0, 6);
SBIT(B_7, 0xF0, 7);
SFR(ISPID, 0xF1); /* ID Register for ISP. */
SFR16(ISPADDR16, 0xF2); /* 16bit Address Register for ISP */
SFR(ISPDATA, 0xF4); /* Data Register for ISP. */
SFR(CKCBK, 0xF5); /* CKCON Backup Register. */
SFR(DPX0BK, 0xF6); /* DPX0 Backup Register. */
SFR(DPX1BK, 0xF7); /* DPX1 Backup Register. */
SFR(EIP, 0xF8); /* Extended Interrupt Priority Register */
SBIT(PINT2, 0xF8, 0); /* INT2 priority level control. */
SBIT(PINT3, 0xF8, 1); /* INT3 priority level control. */
SBIT(PINT4, 0xF8, 2); /* Must be set to '0'. */
SBIT(PINT5, 0xF8, 3); /* TCPIPCore Interrupt priority level */
SBIT(PWDI, 0xF8, 4); /* WATCHDOG priority level control. */
SFR(DPSBK, 0xF9); /* DPX Backup Register. */
/* WARNING: the following six definitions are not well documented */
SFR16(RAMBA16, 0xFA); /* RAM Base Address Register. */
SFR(RAMBA16L, 0xFA); /* RAM base Address Register low byte */
SFR(RAMBA16H, 0xFB); /* RAM base Address Register high byte */
SFR16(RAMEA16, 0xFC); /* RAM End Address Register. */
SFR(RAMEA16L, 0xFC); /* RAM End Address Register low byte */
SFR(RAMEA16H, 0xFD); /* RAM End Address Register high byte */
SFR(WCONF, 0xFF); /* W7100 Configuration Register. */
/* (needs to be done as bits, can't be */
/* SBIT) */
#define BE 0x01 /* Boot Enable */
/* 0 : Apps Running). Read only. */
/* 1 : Boot Running */
#define FB 0x02 /* FLASH Busy Flag for ISP. Read only. */
#define F64EN 0x04 /* Always '0'. Read only. */
#define ISPEN 0x40 /* 0 : Enable ISP in Boot built in W7100 */
/* 1 : Disable. */
#define RB 0x80 /* 0 : No Reboot */
/* 1 : Reboot after the ISP done. */
/* As of the latest snapshot release the following keywords are */
/* depreciated in SDCC so modify them to their new values to avoid the */
/* warnings. The other compilers presumably still use the old names */
/* which is why to not change the code instead. */
#define xdata __xdata
#define interrupt __interrupt
#define code __code
#define bit __bit
#define sbit __sbit
#define using __using
#endif /*REG_W7100_H*/
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user