]> git.llucax.com Git - z.facultad/66.09/etherled.git/commitdiff
Obtengo MAC de la PROM de la placa =)
authorLeandro Lucarella <llucax@gmail.com>
Mon, 5 Dec 2005 21:06:12 +0000 (21:06 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 5 Dec 2005 21:06:12 +0000 (21:06 +0000)
pruebas/keil/red_test_anda/etherdev.c

index a4736293b9f9d86a48bbe532f4dff6d09e694c64..d3b1a5a2a29addc95d2542ce78436bb7e9757925 100644 (file)
@@ -142,8 +142,33 @@ bit etherdev_init(void)
     // 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);
@@ -164,12 +189,12 @@ bit etherdev_init(void)
     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);