Referencia del Archivo enc28j60.h

Declaracion de constantes de ENC28J60. Más...

Gráfico de los archivos que directa o indirectamente incluyen a este archivo:


Definiciones

#define ENC28J60_H
#define ADDR_MASK   0x1F
#define BANK_MASK   0x60
#define SPRD_MASK   0x80
#define CSACTIVE   PORTB &= ~_BV(PB4)
#define CSPASSIVE   PORTB |= _BV(PB4)
#define waitspi()   while(!(SPSR&(1<<SPIF)))
#define MAX_TX_BUFFER   1500
#define MAX_RX_BUFFER   1500
#define RXSTART_INIT   0x0000
#define RXSTOP_INIT   (8192-1500-1)
#define TXSTART_INIT   (8192-1500)
#define TXSTOP_INIT   8192
#define MAX_FRAMELEN   (1500+sizeof(ETH_HEADER)+4)
All-bank registers
#define EIE   0x1B
#define EIR   0x1C
#define ESTAT   0x1D
#define ECON2   0x1E
#define ECON1   0x1F
Bank 0 registers
#define ERDPTL   (0x00|0x00)
#define ERDPTH   (0x01|0x00)
#define EWRPTL   (0x02|0x00)
#define EWRPTH   (0x03|0x00)
#define ETXSTL   (0x04|0x00)
#define ETXSTH   (0x05|0x00)
#define ETXNDL   (0x06|0x00)
#define ETXNDH   (0x07|0x00)
#define ERXSTL   (0x08|0x00)
#define ERXSTH   (0x09|0x00)
#define ERXNDL   (0x0A|0x00)
#define ERXNDH   (0x0B|0x00)
#define ERXRDPTL   (0x0C|0x00)
#define ERXRDPTH   (0x0D|0x00)
#define ERXWRPTL   (0x0E|0x00)
#define ERXWRPTH   (0x0F|0x00)
#define EDMASTL   (0x10|0x00)
#define EDMASTH   (0x11|0x00)
#define EDMANDL   (0x12|0x00)
#define EDMANDH   (0x13|0x00)
#define EDMADSTL   (0x14|0x00)
#define EDMADSTH   (0x15|0x00)
#define EDMACSL   (0x16|0x00)
#define EDMACSH   (0x17|0x00)
Bank 1 registers
#define EHT0   (0x00|0x20)
#define EHT1   (0x01|0x20)
#define EHT2   (0x02|0x20)
#define EHT3   (0x03|0x20)
#define EHT4   (0x04|0x20)
#define EHT5   (0x05|0x20)
#define EHT6   (0x06|0x20)
#define EHT7   (0x07|0x20)
#define EPMM0   (0x08|0x20)
#define EPMM1   (0x09|0x20)
#define EPMM2   (0x0A|0x20)
#define EPMM3   (0x0B|0x20)
#define EPMM4   (0x0C|0x20)
#define EPMM5   (0x0D|0x20)
#define EPMM6   (0x0E|0x20)
#define EPMM7   (0x0F|0x20)
#define EPMCSL   (0x10|0x20)
#define EPMCSH   (0x11|0x20)
#define EPMOL   (0x14|0x20)
#define EPMOH   (0x15|0x20)
#define EWOLIE   (0x16|0x20)
#define EWOLIR   (0x17|0x20)
#define ERXFCON   (0x18|0x20)
#define EPKTCNT   (0x19|0x20)
Bank 2 registers
#define MACON1   (0x00|0x40|0x80)
#define MACON2   (0x01|0x40|0x80)
#define MACON3   (0x02|0x40|0x80)
#define MACON4   (0x03|0x40|0x80)
#define MABBIPG   (0x04|0x40|0x80)
#define MAIPGL   (0x06|0x40|0x80)
#define MAIPGH   (0x07|0x40|0x80)
#define MACLCON1   (0x08|0x40|0x80)
#define MACLCON2   (0x09|0x40|0x80)
#define MAMXFLL   (0x0A|0x40|0x80)
#define MAMXFLH   (0x0B|0x40|0x80)
#define MAPHSUP   (0x0D|0x40|0x80)
#define MICON   (0x11|0x40|0x80)
#define MICMD   (0x12|0x40|0x80)
#define MIREGADR   (0x14|0x40|0x80)
#define MIWRL   (0x16|0x40|0x80)
#define MIWRH   (0x17|0x40|0x80)
#define MIRDL   (0x18|0x40|0x80)
#define MIRDH   (0x19|0x40|0x80)
Bank 3 registers
#define MAADR1   (0x00|0x60|0x80)
#define MAADR0   (0x01|0x60|0x80)
#define MAADR3   (0x02|0x60|0x80)
#define MAADR2   (0x03|0x60|0x80)
#define MAADR5   (0x04|0x60|0x80)
#define MAADR4   (0x05|0x60|0x80)
#define EBSTSD   (0x06|0x60)
#define EBSTCON   (0x07|0x60)
#define EBSTCSL   (0x08|0x60)
#define EBSTCSH   (0x09|0x60)
#define MISTAT   (0x0A|0x60|0x80)
#define EREVID   (0x12|0x60)
#define ECOCON   (0x15|0x60)
#define EFLOCON   (0x17|0x60)
#define EPAUSL   (0x18|0x60)
#define EPAUSH   (0x19|0x60)
PHY registers
#define PHCON1   0x00
#define PHSTAT1   0x01
#define PHHID1   0x02
#define PHHID2   0x03
#define PHCON2   0x10
#define PHSTAT2   0x11
#define PHIE   0x12
#define PHIR   0x13
#define PHLCON   0x14
ENC28J60 ERXFCON Register Bit Definitions
#define ERXFCON_UCEN   0x80
#define ERXFCON_ANDOR   0x40
#define ERXFCON_CRCEN   0x20
#define ERXFCON_PMEN   0x10
#define ERXFCON_MPEN   0x08
#define ERXFCON_HTEN   0x04
#define ERXFCON_MCEN   0x02
#define ERXFCON_BCEN   0x01
ENC28J60 EIE Register Bit Definitions
#define EIE_INTIE   0x80
#define EIE_PKTIE   0x40
#define EIE_DMAIE   0x20
#define EIE_LINKIE   0x10
#define EIE_TXIE   0x08
#define EIE_WOLIE   0x04
#define EIE_TXERIE   0x02
#define EIE_RXERIE   0x01
ENC28J60 EIR Register Bit Definitions
#define EIR_PKTIF   0x40
#define EIR_DMAIF   0x20
#define EIR_LINKIF   0x10
#define EIR_TXIF   0x08
#define EIR_WOLIF   0x04
#define EIR_TXERIF   0x02
#define EIR_RXERIF   0x01
ENC28J60 ESTAT Register Bit Definitions
#define ESTAT_INT   0x80
#define ESTAT_LATECOL   0x10
#define ESTAT_RXBUSY   0x04
#define ESTAT_TXABRT   0x02
#define ESTAT_CLKRDY   0x01
ENC28J60 ECON2 Register Bit Definitions
#define ECON2_AUTOINC   0x80
#define ECON2_PKTDEC   0x40
#define ECON2_PWRSV   0x20
#define ECON2_VRPS   0x08
ENC28J60 ECON1 Register Bit Definitions
#define ECON1_TXRST   0x80
#define ECON1_RXRST   0x40
#define ECON1_DMAST   0x20
#define ECON1_CSUMEN   0x10
#define ECON1_TXRTS   0x08
#define ECON1_RXEN   0x04
#define ECON1_BSEL1   0x02
#define ECON1_BSEL0   0x01
ENC28J60 MACON1 Register Bit Definitions
#define MACON1_LOOPBK   0x10
#define MACON1_TXPAUS   0x08
#define MACON1_RXPAUS   0x04
#define MACON1_PASSALL   0x02
#define MACON1_MARXEN   0x01
ENC28J60 MACON2 Register Bit Definitions
#define MACON2_MARST   0x80
#define MACON2_RNDRST   0x40
#define MACON2_MARXRST   0x08
#define MACON2_RFUNRST   0x04
#define MACON2_MATXRST   0x02
#define MACON2_TFUNRST   0x01
ENC28J60 MACON3 Register Bit Definitions
#define MACON3_PADCFG2   0x80
#define MACON3_PADCFG1   0x40
#define MACON3_PADCFG0   0x20
#define MACON3_TXCRCEN   0x10
#define MACON3_PHDRLEN   0x08
#define MACON3_HFRMLEN   0x04
#define MACON3_FRMLNEN   0x02
#define MACON3_FULDPX   0x01
ENC28J60 MACON4 Register Bit Definitions
#define MACON4_DEFER   (1<<6)
#define MACON4_BPEN   (1<<5)
#define MACON4_NOBKOFF   (1<<4)
ENC28J60 MICMD Register Bit Definitions
#define MICMD_MIISCAN   0x02
#define MICMD_MIIRD   0x01
ENC28J60 MISTAT Register Bit Definitions
#define MISTAT_NVALID   0x04
#define MISTAT_SCAN   0x02
#define MISTAT_BUSY   0x01
ENC28J60 PHY PHCON1 Register Bit Definitions
#define PHCON1_PRST   0x8000
#define PHCON1_PLOOPBK   0x4000
#define PHCON1_PPWRSV   0x0800
#define PHCON1_PDPXMD   0x0100
ENC28J60 PHY PHSTAT1 Register Bit Definitions
#define PHSTAT1_PFDPX   0x1000
#define PHSTAT1_PHDPX   0x0800
#define PHSTAT1_LLSTAT   0x0004
#define PHSTAT1_JBSTAT   0x0002
ENC28J60 PHY PHCON2 Register Bit Definitions
#define PHCON2_FRCLINK   0x4000
#define PHCON2_TXDIS   0x2000
#define PHCON2_JABBER   0x0400
#define PHCON2_HDLDIS   0x0100
ENC28J60 Packet Control Byte Bit Definitions
#define PKTCTRL_PHUGEEN   0x08
#define PKTCTRL_PPADEN   0x04
#define PKTCTRL_PCRCEN   0x02
#define PKTCTRL_POVERRIDE   0x01
SPI operation codes
#define ENC28J60_READ_CTRL_REG   0x00
#define ENC28J60_READ_BUF_MEM   0x3A
#define ENC28J60_WRITE_CTRL_REG   0x40
#define ENC28J60_WRITE_BUF_MEM   0x7A
#define ENC28J60_BIT_FIELD_SET   0x80
#define ENC28J60_BIT_FIELD_CLR   0xA0
#define ENC28J60_SOFT_RESET   0xFF
ENC28J60 SPI port PIN names
#define ENC28J60_RESET_PIN_DDR   DDD3
#define ENC28J60_INT_PIN_DDR   DDD2
#define ENC28J60_RESET_PIN   PD3
#define ENC28J60_INT_PIN   PD2
#define ENC28J60_PORT   PORTD
#define ENC28J60_DDR   DDRD

Funciones

BYTE enc28j60ReadOp (BYTE op, BYTE address)
 Implementa operaciones del tipo lectura
Enmascara OPCODE y address para generar el comando:
O0 O1 O2 A0 A1 A2 A3 A4
espera a que llegue el dato y lo devuelve.
void enc28j60WriteOp (BYTE op, BYTE address, BYTE data)
 Implementa operaciones del tipo escritura
Enmascara OPCODE y address para generar el comando:
O0 O1 O2 A0 A1 A2 A3 A4
Escribe el dato.
void enc28j60SetBank (BYTE address)
 Setea el banco con el que se esta trabajando.
BYTE enc28j60Read (BYTE address)
 Implementa lectura de un registro
setea el banco usando la primer parte de la direccion
llama a ReadOp usando OPCODE de lectura de registro y address.
void enc28j60Write (BYTE address, BYTE data)
 Implementa escritura de un registro
setea el banco usando la primer parte de la direccion
llama a WriteOp usando OPCODE de escritura de registro y address.
WORD enc28j60_read_phyreg (BYTE address)
 Implementa lectura de un registro del tipo PHY ver datasheet por diferencias con lectura comun.
void enc28j60PhyWrite (BYTE address, WORD_BYTES data)
 Implementa escritura de un registro PHY
ver datasheet por diferencias con lectura comun.
void enc28j60_init (BYTE *avr_mac)
 Inicializa el puerto SPI y el chip ENC28J60
La inicializacion se hace en base a las recomendaciones del datasheet
inicializa buffers Tx y Rx
inicializa capa MAC
inicializa capa PHY.
BYTE enc28j60getrev (void)
 lee "Silicon Revision Level" (no es muy necesario)
void enc28j60_packet_send (BYTE *buffer, WORD length)
 Envia un paquete
Escribe un bloque de memoria en el buffer Tx del ENC y lo envia a la red.
Agrega el byte de control necesario para el ENC previo a cada paquete a ser transmitido.
El ENC se encarga de agregar el preambulo, CRC y padding necesarios.
BYTE enc28j60_mac_is_linked (void)
WORD enc28j60_tx_checksum (WORD offset, WORD len)
WORD enc28j60_packet_receive (BYTE *rxtx_buffer, WORD max_length)
 Lee un paquete que llega al ENC
Escribe el paquete recibido a RAM.
Devuelve el largo del paquete.

Descripción detallada

Declaracion de constantes de ENC28J60.

Se definen los comandos del ENC, las direcciones de registros, los pines del puerto SPI y constantes como el tamaño del paquete y de inicializacion. La direccion de un registro se define como un byte que contiene:


Documentación de las definiciones

#define ADDR_MASK   0x1F

#define BANK_MASK   0x60

#define CSACTIVE   PORTB &= ~_BV(PB4)

#define CSPASSIVE   PORTB |= _BV(PB4)

#define EBSTCON   (0x07|0x60)

#define EBSTCSH   (0x09|0x60)

#define EBSTCSL   (0x08|0x60)

#define EBSTSD   (0x06|0x60)

#define ECOCON   (0x15|0x60)

#define ECON1   0x1F

#define ECON1_BSEL0   0x01

#define ECON1_BSEL1   0x02

#define ECON1_CSUMEN   0x10

#define ECON1_DMAST   0x20

#define ECON1_RXEN   0x04

#define ECON1_RXRST   0x40

#define ECON1_TXRST   0x80

#define ECON1_TXRTS   0x08

#define ECON2   0x1E

#define ECON2_AUTOINC   0x80

#define ECON2_PKTDEC   0x40

#define ECON2_PWRSV   0x20

#define ECON2_VRPS   0x08

#define EDMACSH   (0x17|0x00)

#define EDMACSL   (0x16|0x00)

#define EDMADSTH   (0x15|0x00)

#define EDMADSTL   (0x14|0x00)

#define EDMANDH   (0x13|0x00)

#define EDMANDL   (0x12|0x00)

#define EDMASTH   (0x11|0x00)

#define EDMASTL   (0x10|0x00)

#define EFLOCON   (0x17|0x60)

#define EHT0   (0x00|0x20)

#define EHT1   (0x01|0x20)

#define EHT2   (0x02|0x20)

#define EHT3   (0x03|0x20)

#define EHT4   (0x04|0x20)

#define EHT5   (0x05|0x20)

#define EHT6   (0x06|0x20)

#define EHT7   (0x07|0x20)

#define EIE   0x1B

#define EIE_DMAIE   0x20

#define EIE_INTIE   0x80

#define EIE_LINKIE   0x10

#define EIE_PKTIE   0x40

#define EIE_RXERIE   0x01

#define EIE_TXERIE   0x02

#define EIE_TXIE   0x08

#define EIE_WOLIE   0x04

#define EIR   0x1C

#define EIR_DMAIF   0x20

#define EIR_LINKIF   0x10

#define EIR_PKTIF   0x40

#define EIR_RXERIF   0x01

#define EIR_TXERIF   0x02

#define EIR_TXIF   0x08

#define EIR_WOLIF   0x04

#define ENC28J60_BIT_FIELD_CLR   0xA0

#define ENC28J60_BIT_FIELD_SET   0x80

#define ENC28J60_DDR   DDRD

#define ENC28J60_H

#define ENC28J60_INT_PIN   PD2

#define ENC28J60_INT_PIN_DDR   DDD2

#define ENC28J60_PORT   PORTD

#define ENC28J60_READ_BUF_MEM   0x3A

#define ENC28J60_READ_CTRL_REG   0x00

#define ENC28J60_RESET_PIN   PD3

#define ENC28J60_RESET_PIN_DDR   DDD3

#define ENC28J60_SOFT_RESET   0xFF

#define ENC28J60_WRITE_BUF_MEM   0x7A

#define ENC28J60_WRITE_CTRL_REG   0x40

#define EPAUSH   (0x19|0x60)

#define EPAUSL   (0x18|0x60)

#define EPKTCNT   (0x19|0x20)

#define EPMCSH   (0x11|0x20)

#define EPMCSL   (0x10|0x20)

#define EPMM0   (0x08|0x20)

#define EPMM1   (0x09|0x20)

#define EPMM2   (0x0A|0x20)

#define EPMM3   (0x0B|0x20)

#define EPMM4   (0x0C|0x20)

#define EPMM5   (0x0D|0x20)

#define EPMM6   (0x0E|0x20)

#define EPMM7   (0x0F|0x20)

#define EPMOH   (0x15|0x20)

#define EPMOL   (0x14|0x20)

#define ERDPTH   (0x01|0x00)

#define ERDPTL   (0x00|0x00)

#define EREVID   (0x12|0x60)

#define ERXFCON   (0x18|0x20)

#define ERXFCON_ANDOR   0x40

#define ERXFCON_BCEN   0x01

#define ERXFCON_CRCEN   0x20

#define ERXFCON_HTEN   0x04

#define ERXFCON_MCEN   0x02

#define ERXFCON_MPEN   0x08

#define ERXFCON_PMEN   0x10

#define ERXFCON_UCEN   0x80

#define ERXNDH   (0x0B|0x00)

#define ERXNDL   (0x0A|0x00)

#define ERXRDPTH   (0x0D|0x00)

#define ERXRDPTL   (0x0C|0x00)

#define ERXSTH   (0x09|0x00)

#define ERXSTL   (0x08|0x00)

#define ERXWRPTH   (0x0F|0x00)

#define ERXWRPTL   (0x0E|0x00)

#define ESTAT   0x1D

#define ESTAT_CLKRDY   0x01

#define ESTAT_INT   0x80

#define ESTAT_LATECOL   0x10

#define ESTAT_RXBUSY   0x04

#define ESTAT_TXABRT   0x02

#define ETXNDH   (0x07|0x00)

#define ETXNDL   (0x06|0x00)

#define ETXSTH   (0x05|0x00)

#define ETXSTL   (0x04|0x00)

#define EWOLIE   (0x16|0x20)

#define EWOLIR   (0x17|0x20)

#define EWRPTH   (0x03|0x00)

#define EWRPTL   (0x02|0x00)

#define MAADR0   (0x01|0x60|0x80)

#define MAADR1   (0x00|0x60|0x80)

#define MAADR2   (0x03|0x60|0x80)

#define MAADR3   (0x02|0x60|0x80)

#define MAADR4   (0x05|0x60|0x80)

#define MAADR5   (0x04|0x60|0x80)

#define MABBIPG   (0x04|0x40|0x80)

#define MACLCON1   (0x08|0x40|0x80)

#define MACLCON2   (0x09|0x40|0x80)

#define MACON1   (0x00|0x40|0x80)

#define MACON1_LOOPBK   0x10

#define MACON1_MARXEN   0x01

#define MACON1_PASSALL   0x02

#define MACON1_RXPAUS   0x04

#define MACON1_TXPAUS   0x08

#define MACON2   (0x01|0x40|0x80)

#define MACON2_MARST   0x80

#define MACON2_MARXRST   0x08

#define MACON2_MATXRST   0x02

#define MACON2_RFUNRST   0x04

#define MACON2_RNDRST   0x40

#define MACON2_TFUNRST   0x01

#define MACON3   (0x02|0x40|0x80)

#define MACON3_FRMLNEN   0x02

#define MACON3_FULDPX   0x01

#define MACON3_HFRMLEN   0x04

#define MACON3_PADCFG0   0x20

#define MACON3_PADCFG1   0x40

#define MACON3_PADCFG2   0x80

#define MACON3_PHDRLEN   0x08

#define MACON3_TXCRCEN   0x10

#define MACON4   (0x03|0x40|0x80)

#define MACON4_BPEN   (1<<5)

#define MACON4_DEFER   (1<<6)

#define MACON4_NOBKOFF   (1<<4)

#define MAIPGH   (0x07|0x40|0x80)

#define MAIPGL   (0x06|0x40|0x80)

#define MAMXFLH   (0x0B|0x40|0x80)

#define MAMXFLL   (0x0A|0x40|0x80)

#define MAPHSUP   (0x0D|0x40|0x80)

#define MAX_FRAMELEN   (1500+sizeof(ETH_HEADER)+4)

#define MAX_RX_BUFFER   1500

#define MAX_TX_BUFFER   1500

#define MICMD   (0x12|0x40|0x80)

#define MICMD_MIIRD   0x01

#define MICMD_MIISCAN   0x02

#define MICON   (0x11|0x40|0x80)

#define MIRDH   (0x19|0x40|0x80)

#define MIRDL   (0x18|0x40|0x80)

#define MIREGADR   (0x14|0x40|0x80)

#define MISTAT   (0x0A|0x60|0x80)

#define MISTAT_BUSY   0x01

#define MISTAT_NVALID   0x04

#define MISTAT_SCAN   0x02

#define MIWRH   (0x17|0x40|0x80)

#define MIWRL   (0x16|0x40|0x80)

#define PHCON1   0x00

#define PHCON1_PDPXMD   0x0100

#define PHCON1_PLOOPBK   0x4000

#define PHCON1_PPWRSV   0x0800

#define PHCON1_PRST   0x8000

#define PHCON2   0x10

#define PHCON2_FRCLINK   0x4000

#define PHCON2_HDLDIS   0x0100

#define PHCON2_JABBER   0x0400

#define PHCON2_TXDIS   0x2000

#define PHHID1   0x02

#define PHHID2   0x03

#define PHIE   0x12

#define PHIR   0x13

#define PHLCON   0x14

#define PHSTAT1   0x01

#define PHSTAT1_JBSTAT   0x0002

#define PHSTAT1_LLSTAT   0x0004

#define PHSTAT1_PFDPX   0x1000

#define PHSTAT1_PHDPX   0x0800

#define PHSTAT2   0x11

#define PKTCTRL_PCRCEN   0x02

#define PKTCTRL_PHUGEEN   0x08

#define PKTCTRL_POVERRIDE   0x01

#define PKTCTRL_PPADEN   0x04

#define RXSTART_INIT   0x0000

#define RXSTOP_INIT   (8192-1500-1)

#define SPRD_MASK   0x80

#define TXSTART_INIT   (8192-1500)

#define TXSTOP_INIT   8192

 
#define waitspi (  )     while(!(SPSR&(1<<SPIF)))


Documentación de las funciones

void enc28j60_init ( BYTE avr_mac  ) 

Inicializa el puerto SPI y el chip ENC28J60
La inicializacion se hace en base a las recomendaciones del datasheet
inicializa buffers Tx y Rx
inicializa capa MAC
inicializa capa PHY.

Parámetros:
avr_mac puntero a la direccion MAC

enable PD3, reset as output

INICIALIZACION DE ETHERNET

puntero al siguiente paquete= dir rx inicial

ERXST= RXSTART_INIT (ETHERNET RECEIVE BUFFER START POINTER)

ERXRDPT= RXSTART_INIT (ETHERNET RECEIVE BUFFER READ POINTER)

ERXND= RXSTOP_INIT (ETHERNET RECEIVE BUFFER END POINTER)

ETXST= TXSTART_INIT posicion del paquete a trasmitir (inicial)

ETXND= TXSTOP_INIT

INICIALIZACION DE LA MAC

MARXEN: ENEBLE MAC TO RECEIVE FRAMES
TXPAUS Y RXPAUS: SE SETEAN SI USO FULL DUPLEX XA CONTROL DE FLUJO

bring MAC out of reset

enable automatic padding to 60bytes and CRC operations

LA MAC ESPERA INDEFINIDAMENTE A QUE SE LIBERE EL MEDIO PARA TRANSMITIR
SE ANULA EL TIMEOUT PARA TRANSMISION

Set non-back-to-back inter-packet gap to 9.6us. The back-to-back inter-packet gap (MABBIPG) is set by MACSetDuplex() which is called later.

Set the maximum packet size which the controller will accept.
Do not send packets longer than MAX_FRAMELEN:

write MAC address
NOTE: MAC address in ENC28J60 is byte-backward ENC28J60 is big-endian avr gcc is little-endian

no loopback of transmitted frames

do bank 1 stuff, packet filter:
For broadcast packets we allow only ARP packtets
All other packets should be unicast only for our mac (MAADR)

The pattern to match on is therefore
Type ETH.DST
ARP BROADCAST
06 08 -- ff ff ff ff ff ff -> ip checksum for theses bytes=f7f9
in binary these poitions are:11 0000 0011 1111
This is hex 303F->EPMM0=0x3f,EPMM1=0x30

PMEN=PATTERN MATCH
CRCEN = POST FILTER CRC ENABLE
UCEN= UNICAST ENABLE
EPMM0= 0x3f,EPMM1= 0x30
SETEA DONDE ESTA EL PATRON ADENTRO DEL MENSAJE
EPMCSL= 0xf9, EPMCSH= 0xf7
PATERN MATCH CHECKSUM

set inter-frame gap (back-to-back)

switch to bank 0

enable interrutps

enable packet reception

Gráfico de llamadas para esta función:

BYTE enc28j60_mac_is_linked ( void   ) 

WORD enc28j60_packet_receive ( BYTE rxtx_buffer,
WORD  max_length 
)

Lee un paquete que llega al ENC
Escribe el paquete recibido a RAM.
Devuelve el largo del paquete.

Parámetros:
rxtx_buffer espacio de memoria donde se colocaran los datos recibidos
max_length largo maximo de datos a leer

check if a packet has been received and buffered

Set the read pointer to the start of the received packet

read the next packet pointer

read the packet length (see datasheet page 43)

read the receive status (see datasheet page 43)

check CRC and symbol errors (see datasheet page 44, table 7-3): The ERXFCON.CRCEN is set by default. Normally we should not need to check this.

read data from rx buffer and save to rxtx_buffer

Move the RX read pointer to the start of the next received packet

decrement the packet counter indicate we are done with this packet

Gráfico de llamadas para esta función:

void enc28j60_packet_send ( BYTE buffer,
WORD  length 
)

Envia un paquete
Escribe un bloque de memoria en el buffer Tx del ENC y lo envia a la red.
Agrega el byte de control necesario para el ENC previo a cada paquete a ser transmitido.
El ENC se encarga de agregar el preambulo, CRC y padding necesarios.

Parámetros:
buffer espacio de memoria donde estan los datos a enviar
length largo de datos

Set the write pointer to start of transmit buffer area

Set the TXND pointer to correspond to the packet size given

write per-packet control byte (0x00 means use macon3 settings)

issue write command

write data

send the contents of the transmit buffer onto the network

Reset the transmit logic problem. See Rev. B4 Silicon Errata point 12.

Gráfico de llamadas para esta función:

WORD enc28j60_read_phyreg ( BYTE  address  ) 

Implementa lectura de un registro del tipo PHY ver datasheet por diferencias con lectura comun.

Parámetros:
address un registro

set the PHY register address

Loop to wait until the PHY register has been read through the MII This requires 10.24us

Stop reading

Obtain results and return

Gráfico de llamadas para esta función:

WORD enc28j60_tx_checksum ( WORD  offset,
WORD  len 
)

BYTE enc28j60getrev ( void   ) 

lee "Silicon Revision Level" (no es muy necesario)

Gráfico de llamadas para esta función:

void enc28j60PhyWrite ( BYTE  address,
WORD_BYTES  data 
)

Implementa escritura de un registro PHY
ver datasheet por diferencias con lectura comun.

Parámetros:
address un registro
data dato a escribir

set the PHY register address

write the PHY data

wait until the PHY write completes

Gráfico de llamadas para esta función:

BYTE enc28j60Read ( BYTE  address  ) 

Implementa lectura de un registro
setea el banco usando la primer parte de la direccion
llama a ReadOp usando OPCODE de lectura de registro y address.

Parámetros:
address un registro

selecciona banco a leer.

lee utilizando ReadOp

Gráfico de llamadas para esta función:

BYTE enc28j60ReadOp ( BYTE  op,
BYTE  address 
)

Implementa operaciones del tipo lectura
Enmascara OPCODE y address para generar el comando:
O0 O1 O2 A0 A1 A2 A3 A4
espera a que llegue el dato y lo devuelve.

Parámetros:
op un opcode.
address un registro

pongo activo el CS indicando inicio de Tx

envio comando de lectura

espero que el comando sea enviado

escribir el SPDR hace q se inicie una transmision de 1 byte

espero a que llegue el dato que queda guardado en SPDR

si necesito doble lectura(la anterior fue dummy y debo hacer otra)(for mac and mii, see datasheet page 29)

void enc28j60SetBank ( BYTE  address  ) 

Setea el banco con el que se esta trabajando.

Parámetros:
address nombre del banco

LA MEMORIA SE DIVIDE EN 4 BANCOS SELECCIONABLES POR MEDIO DE BSEL0,1 (VER PAG 14)

setea el banco solo si es diferente del actual

LIMPIA LOS 2 MEDIANTE AND CON 11111100

HACE UN OR ENMASCARADO: 000000XX

GUARDA REGISTRO DE EN Q BANCO ESTOY

Gráfico de llamadas para esta función:

void enc28j60Write ( BYTE  address,
BYTE  data 
)

Implementa escritura de un registro
setea el banco usando la primer parte de la direccion
llama a WriteOp usando OPCODE de escritura de registro y address.

Parámetros:
address un registro
data dato a escribir

selecciona el banco en q va a escribir

escribe el registro utilizando WriteOp

Gráfico de llamadas para esta función:

void enc28j60WriteOp ( BYTE  op,
BYTE  address,
BYTE  data 
)

Implementa operaciones del tipo escritura
Enmascara OPCODE y address para generar el comando:
O0 O1 O2 A0 A1 A2 A3 A4
Escribe el dato.

EJECUCION DE COMANDOS DE ESCRITURA
LOS 7 COMANDOS SON UN OPCODE DE 3 BITS + UN ARGUMENTO DE 5 BITS(ADDRESS) Y EL SIGUIENTE BYTE ES EL DATO
OP ES EL COMANDO: (VER INSTRUCTION SET)
ADDRESS INDICA EL ARGUMENTO
DATA ES EL DATO Q SE ESCRIBE

Parámetros:
op un opcode.
address un registro
data el dato a escribir

indica comando escribir y a que direccion

espera a que se active flag de interrupcion de spi (o sea que haya llegado el comando)

escribe el dato en SPDR (es SPI I/O data register)


Generado el Wed Jul 2 09:20:49 2008 para TCP/IP por  doxygen 1.5.6