unsigned int phyalive;
unsigned int phylink;
-EMAC_Desc fr1;
-eth_frame_t efr1;
+EMAC_Desc fr1 __attribute__((aligned(4)));
+EMAC_Desc rx_desc __attribute__((aligned(4)));
+uint8_t rx_buff[1024] __attribute__((aligned(4)));
+
+eth_frame_t efr1 __attribute__((aligned(4)));
char *buff = "asdfasdfasdfasdf";
;
}
+#pragma INTERRUPT(EMACCore0RxIsr, FIQ)
void EMACCore0RxIsr(void)
{
-
+ EMACCoreIntAck(emacBase, EMAC_INT_CORE0_RX);
}
+#pragma INTERRUPT(EMACCore0TxIsr, FIQ)
void EMACCore0TxIsr(void)
{
- //EMACTxCPWrite(emacBase, channel, NULL);
- EMACCoreIntAck(emacBase, EMAC_INT_CORE0_RX);
- EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX);
+ /* Is not being processed by the EMAC anymore */
+ if (!(fr1.PktFlgLen & EMAC_DSC_FLAG_OWNER)) {
+ EMACTxCPWrite(emacBase, channel, (unsigned int)&fr1);
+ EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX);
+ }
}
int emac_test(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[])
gioSetBit(dmmPORT, DMM_CLK, 1);
dummy_wait();
*/
+ /* Prepare RX descriptors */
+ rx_desc.pBuffer = rx_buff;
+ rx_desc.PktFlgLen = sizeof(rx_buff) | EMAC_DSC_FLAG_OWNER;
+ rx_desc.pNext = NULL;
+ rx_desc.BufOffLen = 0;
+ //FIXME
+
/* Fill some testing Ethernet frame with relevant data */
efr1.destination[0] = 0x00;
efr1.destination[1] = 0x21;
;
}
- EMACTxIntPulseEnable(emacBase, emacCtrlBase, 0, 0);
- EMACRxIntPulseEnable(emacBase, emacCtrlBase, 0, 0);
-
- //EMACCoreIntAck(emacBase, EMAC_INT_CORE0_RX); // ?
- //EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX); // ?
+ for (chan = 0; chan < 8; chan++) {
+ EMACTxHdrDescPtrWrite(emacBase, 0, chan);
+ EMACRxHdrDescPtrWrite(emacBase, 0, chan);
+ }
- //EMACNumFreeBufSet(emacBase, 0, 10);
- //EMACRxEnable(emacBase);
+ EMACRxBroadCastEnable(emacBase, channel);
+ EMACNumFreeBufSet(emacBase, channel, 10);
EMACTxEnable(emacBase);
+ EMACRxEnable(emacBase);
- EMACMIIEnable(emacBase);
+ EMACTxIntPulseEnable(emacBase, emacCtrlBase, 0, channel);
+ EMACRxIntPulseEnable(emacBase, emacCtrlBase, 0, channel);
+ EMACCoreIntAck(emacBase, EMAC_INT_CORE0_RX);
+ EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX);
+
+
+ EMACRxHdrDescPtrWrite(emacBase, (unsigned int)&rx_desc, channel);
+
+ EMACMIIEnable(emacBase);
phylink = MDIOPhyLinkStatusGet(mdioBase);
if (!phylink)
fr1.PktFlgLen = (EMAC_DSC_FLAG_SOP | EMAC_DSC_FLAG_EOP | EMAC_DSC_FLAG_OWNER | 65);
EMACTxHdrDescPtrWrite(emacBase, (unsigned int)&fr1, channel);
- dummy_wait();
-
- EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX);
-
- EMACTxCPWrite(emacBase, channel, (unsigned int)&fr1);
- dummy_wait();
- EMACCoreIntAck(emacBase, EMAC_INT_CORE0_TX);
-
print((uint8_t *)"Packet sent\r\n");
+ dummy_wait();
}
return 0;