// Mask all interrupts in mask register.
etherdev_reg_write(IMR, 0x00);
- // TODO Obtengo MAC de la placa
- //etherdev_reg_write(CR, 0x21);
+ // Obtengo MAC de la placa
+ etherdev_reg_write(RBCR0, 0x0c); // Vamos a leer 12 bytes (2 x 6)
+ etherdev_reg_write(RBCR1, 0x00);
+ etherdev_reg_write(RSAR0, 0x00); // En la dirección 0x0000
+ etherdev_reg_write(RSAR1, 0x00);
+ etherdev_reg_write(CR, RD0 | STA); // Comienza lectura
+ uip_buf[6] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+ uip_buf[7] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+ uip_buf[8] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+ uip_buf[9] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+ uip_buf[10] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+ uip_buf[11] = etherdev_reg_read(RDMA);
+ etherdev_reg_read(RDMA); // Ignoramos porque viene como un word
+
+ // Wait until remote DMA operation completes.
+ while(!(etherdev_reg_read(ISR) & RDC)) continue;
+
+ // Abort/ complete DMA operation.
+ etherdev_reg_write(CR, RD2 | STP);
+
+ // Limpia ISR
+ etherdev_reg_write(ISR, RDC);
// Set transmit page start.
etherdev_reg_write(TPSR, ETH_TX_PAGE_START);
etherdev_reg_write(CURR, ETH_RX_PAGE_START + 1);
// Set physical address
- etherdev_reg_write(PAR0, 0x00);
- etherdev_reg_write(PAR1, 0x0c);
- etherdev_reg_write(PAR2, 0x6e);
- etherdev_reg_write(PAR3, 0x37);
- etherdev_reg_write(PAR4, 0x19);
- etherdev_reg_write(PAR5, 0xbe);
+ etherdev_reg_write(PAR0, uip_buf[0]);
+ etherdev_reg_write(PAR1, uip_buf[0]);
+ etherdev_reg_write(PAR2, uip_buf[0]);
+ etherdev_reg_write(PAR3, uip_buf[0]);
+ etherdev_reg_write(PAR4, uip_buf[0]);
+ etherdev_reg_write(PAR5, uip_buf[0]);
// Select RTL8019AS register page 0 and abort DMA operation.
etherdev_reg_write(CR, RD2 | STP);