SELECT_REG_PAGE(0);
// Clear rx buffer overflow & packet received interrupt flags.
- write_reg(ISR, OVW);
+ write_reg(ISR, PRX | OVW);
// Re-itialise transmit configuration reg for normal operation.
write_reg(TCR, MODE0);
*/
bool netdev_init()
{
+ byte i;
+
// Set IOR & IOW as they're active low.
IOR = 1;
IOW = 1;
write_reg(RSAR0, 0u); // En la dirección 0x0000
write_reg(RSAR1, 0u);
write_reg(CR, READ); // Comienza lectura
- eth_addr_local[0] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
- eth_addr_local[1] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
- eth_addr_local[2] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
- eth_addr_local[3] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
- eth_addr_local[4] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
- eth_addr_local[5] = read_reg(RDMA);
- read_reg(RDMA); // Ignoramos porque viene como un word
+ for (i = 0; i < ETH_ADDR_SIZE; ++i)
+ {
+ eth_addr_local[i] = read_reg(RDMA);
+ read_reg(RDMA); // Ignoramos porque viene como un word
+ }
// Abort/ complete DMA operation.
ABORT_DMA(STOP);
write_reg(CURR, RX_PAGE_START + 1);
// Set physical address
- write_reg(PAR0, eth_addr_local[0]);
- write_reg(PAR1, eth_addr_local[1]);
- write_reg(PAR2, eth_addr_local[2]);
- write_reg(PAR3, eth_addr_local[3]);
- write_reg(PAR4, eth_addr_local[4]);
- write_reg(PAR5, eth_addr_local[5]);
+ for (i = 0; i < ETH_ADDR_SIZE; ++i)
+ write_reg(PAR_BASE + i, eth_addr_local[i]);
// Restart RTL8019AS.
write_reg(CR, START);
// Initiate DMA transfer of packet data.
write_reg(CR, READ);
-
+
return buf_hdr.len;
}
return 0;